unity实现第一人称场景漫游项目,主要包含如下功能:

1、场景搭建

场景主要包括水、草、树木、石头、飘动的白云,房子等。

2、模型导入

这个场景就导入了一个桥和一个房子,这个桥横跨在小溪的两边,我们可以通过桥从小溪这边走到对面去。

3、粒子特效

在这个项目里面主要使用了烟特效,把这个烟特效放到房子的房顶模拟炊烟特别好。还有3个火焰的粒子特效,一个火焰模拟火堆效果,还有两个火焰特效作为桥上面的照明效果,整体效果特别好看。还可以继续扩展,添加喷泉等粒子特效。

4、第一人称控制

主要就是通过控制摄像机进行视角的控制,通过WASD控制前后左右的移动。

5、添加音效

怎么能少了音效呢,哈哈哈,得有点氛围吧。

6、添加小地图

显示玩家在场景当中的位置。

7、等等。

整体创造了一个

小桥流水人家

行云流水

炊烟冉冉升起

火焰燃烧

的一片大好世外桃源之地。

步骤如下:

  1. 首先就是制作一个房子了,我的房子不是特别大,不过麻雀虽小五脏俱全,基本东西都是有的,效果如下图:

基本上房子里面的效果就是这样了。

  1. 有了房子以后就可以添加地形了,制作一个包含天空、云、水、山、草、树木、桥的环境。此美景堪称“行云流水”,“小桥流水人家”,“夕阳西下”。

如下图:

  1. 场景和房子都有了,是时候把我们的主角请出来了,做一个第一人称视角的漫游。主要就是控制摄像机的旋转和前后左右移动。

核心代码如下:

控制摄像机旋转。

using System.Collections;using System.Collections.Generic;using UnityEngine;public class CameraTurn : MonoBehaviour{// 水平视角移动的敏感度public float sensitivityHor = 3f;// 垂直视角移动的敏感度public float sensitivityVer = 3f;// 视角向上移动的角度范围,该值越小范围越大public float upVer = -40;// 视角向下移动的角度范围,该值越大范围越大public float downVer = 45;// 垂直旋转角度private float rotVer;// 旋转的方向问题// x 表示绕 x 轴旋转,即 前上后 的角度// y 表示绕 y 轴旋转,即 左前后 的角度// y 表示绕 y 轴旋转,即 左前后 的角度// Start is called before the first frame updatevoid Start(){// 初始化当前的垂直角度rotVer = transform.eulerAngles.x;}// Update is called once per framevoid Update(){// 获取鼠标上下的移动位置float mouseVer = Input.GetAxis("Mouse Y");// 获取鼠标左右的移动位置float mouseHor = Input.GetAxis("Mouse X");// 鼠标往上移动,视角其实是往下移,所以要想达到视角也往上移的话,就要减去它rotVer -= mouseVer * sensitivityVer;// 限定上下移动的视角范围,即垂直方向不能360度旋转rotVer = Mathf.Clamp(rotVer, upVer, downVer);// 水平移动float rotHor = transform.localEulerAngles.y + mouseHor * sensitivityHor;// 设置视角的移动值transform.localEulerAngles = new Vector3(rotVer, rotHor, 0);}}

控制移动:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;// 表示一定需要这个控件
[RequireComponent(typeof(CharacterController))]
public class Move : MonoBehaviour
{// 获取摄像机对象的位置信息,[SerializeField] 类似于 java 的构造方法的方法参数[SerializeField] private Transform target;// 跳起来的速度public float jumpSpeed = 15.0f;// 重力public float gravity = -9.8f;// 最终垂直速度public float endsVelocity = -10.0f;// 在地面时的垂直速度public float minFall = -1.5f;// 跑起来的速度public float runSpeed = 10;// 走路的速度public float walkSpeed = 4;// 垂直速度private float verSpeed;// 移动的速度private float moveSpeed;// 用于存储当前的角色控件private CharacterController character;// 在被加载时执行void Start(){// 初始化character = GetComponent<CharacterController>();verSpeed = minFall;moveSpeed = walkSpeed;}// 每更新一帧时执行void Update(){// 用于存储移动信息Vector3 movement = Vector3.zero;// 获取左右方向的移动信息float horspeed = Input.GetAxis("Horizontal");// 获取前后方向的移动信息float verspeed = Input.GetAxis("Vertical"); // 当发生了移动才执行if (horspeed != 0 || verspeed != 0){// 设置左右位置movement.x = horspeed * moveSpeed;// 设置前后的位置movement.z = verspeed * moveSpeed;// 设置斜着走的最大速度更水平垂直走的速度一样movement = Vector3.ClampMagnitude(movement, moveSpeed);// 将移动的信息转化为以摄像机为全局坐标的位置,即保证你向前走一定是摄像机的视角方向movement = target.TransformDirection(movement);}// 当按下左 shift 是跟换速度if (Input.GetKey(KeyCode.LeftShift)){moveSpeed = runSpeed;}else{moveSpeed = walkSpeed;}// 角色控件自带的一个方法,用于检测是否在地面if (character.isGrounded){// 按了空格键则给垂直方向施加一个速度if (Input.GetButtonDown("Jump")){verSpeed = jumpSpeed;}else{verSpeed = minFall;}}else{// 若已经跳起来了则将垂直方向的速度递减降低,来达到一个 下上下 的一个效果// Time.deltaTime 表示为每秒的刷新频率的倒数,用来控制每台电脑的移动速度都是一样的verSpeed += gravity * 3 * Time.deltaTime;// 限制最大坠落速度if (verSpeed < endsVelocity){verSpeed = endsVelocity;}}// 给移动一个垂直速度movement.y = verSpeed;// 控制速度movement *= Time.deltaTime;// 角色控件自带的一个方法,若用 transform.Translate() 的话会无视碰撞器character.Move(movement);}
}

(4)到这里基本上的功能就都有了,这个时候添加几个粒子效果,添加了火堆、蓝白火灯、烟花。突发奇想,房子有个烟冲可以实现一个烟的效果。哈哈哈。

效果如下图:

  1. 到这里好像大部分的东西都有了,突发奇想,这么好的风景怎么能少了音乐呢。加上一首高中很喜欢听的钢琴曲吧-----雨中的印记。

  1. 好像没有什么了,不知道有没有遗漏,最后就是加上一个小地图,至少得知道玩家的位置吧哈哈哈,然后在退出的时候有一个退出按钮,如下图:

  1. 写完了突然想起来还有一个东西,那就是门的自动关闭效果。这个主要就是通过触发器和代码实现。

代码如下:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class OpenCloseDoor : MonoBehaviour{public GameObject doorLeft;public GameObject doorRight;void Start(){doorLeft = GameObject.FindGameObjectWithTag("doorLeft");doorRight = GameObject.FindGameObjectWithTag("doorRight");}// Update is called once per framevoid Update(){}private void OnTriggerEnter(Collider other){if (other.gameObject.name == "Player"){doorLeft.gameObject.transform.Rotate(Vector3.up, 90);doorRight.gameObject.transform.Rotate(Vector3.up, 90);}}private void OnTriggerExit(Collider other){if (other.gameObject.name == "Player"){doorLeft.gameObject.transform.Rotate(Vector3.up, -90);doorRight.gameObject.transform.Rotate(Vector3.up, -90);}}}
  • 实验小结

本次漫游项目到这里也算是完成了,也花了不少时间。总体来说效果我还是很满意的,在这个项目里面有璀璨的星空,飘动的白云,小桥流水人家,袅袅炊烟,明亮的火堆以及桥上的红蓝灯光都是特别好看的,外加迷人的烟花,让人放松的钢琴曲,整体给人一种世外桃源之美。在制作的过程我都能慢慢体会到这里面的美好,哈哈哈。不过里面还是有很多可以扩展的地方的,不过时间有限,只能暂时做到这里。里面也是有很多需要改进的地方,粒子特效也还能更进一步完善,还有声音的各种调节,碰撞检测优化以及更加精确等。总体来说,我看到最后这么一个充满美感的画面还是挺满意的,哈哈哈。差不多就到这里了。

下载链接:https://download.csdn.net/download/weixin_44350205/12636428

unity虚拟现实技术场景漫游相关推荐

  1. android实验报告指导书,虚拟现实技术实验报告指导书.doc

    虚拟现实技术实验报告指导书.doc 虚拟现实技术实验指导书前言 虚拟现实技术实验简介虚拟现实Virtual Reality,简称VR,又译作灵境.幻真是近年来出现的高新技术,也称灵境技术或人工环境.虚 ...

  2. 虚拟现实技术应用到物流领域?Unity实现3D立体仓储可视化

    虚拟现实技术应用到物流领域?Unity实现3D立体仓储可视化 介绍 视频介绍 项目介绍 登陆验证 提升机模拟 穿梭车模拟 项目结果及应用 项目资料: 介绍 随着物流领域的发展,立体仓储技术越来越成熟. ...

  3. unity的vr场景怎么做_如何运用Unity制作VR全景漫游?

    看文百篇,不如实操一遍.今天给大家分享的是通过Unity制作VR全景漫游的过程与方法,大家感兴趣可以动手试试. 前言 本文介绍了两种方法来制作VR场景:方法一:通过6张小图搭建的VR场景 方法二:通过 ...

  4. ArcGIS Engine环境下VS窗体与Unity虚拟现实地理空间的嵌套和交互

    本文目录 一.前言 1.结果图片 2.相关系统与平台介绍 3.实践思路与基本流程 4.涉及环境与软件 二.前期操作介绍 1.Unity和Winform窗体的连接交互 1.1.Unity和Winform ...

  5. 虚拟现实技术(VR)

    1.简介   VR是Virtual Reality的缩写,中文的意思就是虚拟现实(真实幻觉.灵境.幻真),也称灵境技术或人工环境.概念是在20世纪80年代初提出来的,其具体是指借助计算机及最新传感器技 ...

  6. 虚拟现实是计算机软件么,虚拟现实技术对于电脑软件、硬件的配置要求有哪些?...

    2.1 硬件要求 基于INTEL P4或AMD ATHLON系列的CPU.256M以上内存.具备2M以上显存的显卡是现在设计师普遍使用的计算机配置,能满足VRML运行的需求. 2.2 软件要求 建模软 ...

  7. 计算机图形学研究背景及意义,虚拟现实技术研究背景目的意义与国内外现状.doc...

    虚拟现实技术研究背景目的意义与国内外现状 TOC \o "1-3" \n \h \z \u HYPERLINK \l "_Toc293405261" 1 研究背 ...

  8. 《Unity虚拟现实开发实战》——第3章,第3.6节虚拟现实设备的运行原理

    本节书摘来自华章出版社<Unity虚拟现实开发实战>一书中的第3章,第3.6节虚拟现实设备的运行原理,作者[美] 乔纳森·林诺维斯,更多章节内容可以访问云栖社区"华章计算机&qu ...

  9. #游戏unity-VR场景漫游#关于VR以及项目基础

    #游戏unity-VR场景漫游#关于VR以及项目基础 近年来,随着互联网的发展,VR的发展及其迅速,结合unity平台,可以制造很多不同的VR项目. 目前市场上大概有三种类型的VR硬件设备: 第1种: ...

最新文章

  1. (转载)OC学习篇之---KVC和KVO操作
  2. 【音效下载 / 编辑】网站
  3. frps与frpc的区别
  4. 《贝叶斯方法:概率编程与贝叶斯推断》一导读
  5. 嵌入式工作笔记0004---常见术语积累--随时更新
  6. 使用账户和密码在FTP客户端连接FTP服务器,出现vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot
  7. 顶会|关于数据库顶级会议 SIGMOD 2018,看这一篇就够了!
  8. Oracle 11g for Linux安装前准备工作
  9. 水晶球 crystal ball
  10. 如何挑选和购买适合自己的示波器
  11. [嵌入式linux]PCIe 热拔插(rescan)
  12. uni-app 小程序分享到朋友和朋友圈
  13. 用PySimpleGui做户籍资料查询工具
  14. 日语输入法的输入规则
  15. swiper点击左右失效
  16. Docker Mysql使用学习
  17. 爱奇艺、腾讯、优酷同日宣布:全面取消超前点播
  18. 【芝麻信用对接】欺诈信息验证
  19. uni-app 对接第三方h5
  20. pandas pandas中stack()与unstack()函数用法

热门文章

  1. 编写C# Windows服务,用于杀死Zsd.exe进程
  2. android 相机拍照返回,Android6.0机型上调用系统相机拍照返回的resultCode值始终等于0的问题...
  3. 错误连接数据库 [xxx] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while try
  4. UBT10:ubuntu安装tomcat
  5. 从linux启动到rootfs的挂载分析 https://blog.csdn.net/kevin_hcy/article/details/17663341
  6. Qt excel 操作使用说明
  7. oracle数据库中的回收站,Oracle 10G 中的"回收站"-数据库专栏,ORACLE
  8. Redis针对缓存击穿的解决方法-互斥锁
  9. LCA(包含RMQ)
  10. validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending c