您好, 访客   登录/注册

基于Unity3D的虚拟漫游实现方法研究

来源:用户上传      作者:

  【摘要】随着虚拟现实技术的飞速发展,各种3D引擎用于虚拟漫游系统的开发。本文针对利用unity3D引擎实现虚拟漫游的方法进行了探讨和研究,阐述了利用C#语言进行虚拟漫游的脚本实现。
  【关键词】Unity3D;漫游系统;虚拟现实
   1 虚拟漫游介绍
  1.1现状分析
  虚拟漫游,是虚拟现实(VR)技术的重要分支,在房地产、旅游、游戏、航空航天、医学等多种行业发展很快。
  1.2国内外发展趋势
  国外:美国是虚拟现实技术的发源地,现如今已经建立了空间站、航空、卫星维护的虚拟训练系统;在欧洲,英国在辅助设备设计、分布并行处理和应用研究方面是领先的,在硬件和软件的领域处于领先地位。
  国内:我国对于虚拟现实技术的研究和国外一些发达国家还存在相当大的一段距离,但随着计算机技术的发展速度越来越快,我国各界人士对于虚拟现实技术也越来越重视,正在积极进行虚拟环境的建立以及虚拟场景模型分布式系统的开发等等。
  2 虚拟漫游技术实现
  在虚拟漫游脚本设计中,主要涉及到三个功能,分别是自动漫游、手动漫游和摄像机镜头缩放功能。
  2.1自动漫游
  自动漫游其实就是在场景中设置几个遍历点,类似于设置一条固定路线,然后让摄像机去逐个遍历点,采用的API是Vector3.MoveTowards,具体设计流程图如图1所示:
  
  其中,脚本设计中的代码实现情况如下所示:
  (1)数组:此处设计一个列表存放遍历点,控制相机逐个遍历各个点并移动到当前遍历点的位置(注:定义移动速度是为了方便用户可以根据自己的需求来调整摄像机自动漫游的速度):
  public List point=new List();//定义遍历数组并实例化
  publicGameObject roamCamera;//定义相机
  public floatmoveSpeed;//定义移动速度
  int i=0;//定义遍历点变量
  (2)按键改变漫游速度,此处可以设置一个范围,如我在这里设置的是最小速度为0.5,最大速度为6,通过捕捉用户键盘操作“+”、“-”,按动一次速度+-0.5,执行流程图如图2所示:
  
  (3)遍历目标点(通过遍历列表中的点,依次移动到目标点):
  if(roamCamera.transform.position==point[i].position){
  i++;
  if(i==point.Count){
  i=0;
  roamCamera.transform.position=point[0].position;
  }}
  roamCamera.transform.position=Vector3.MoveTowards(roamCamera.transform.position,point[i].position,moveSpeed*Time.deltaTime);
  (4)控制攝像机的视野范围(通过按住鼠标左键使得摄像机漫游时根据用户需求旋转到自定义的视野中)
  if(Input.GetMouseButton(0)){
  floatmouseX=Input.GetAxis(“Mouse X”)*1f;
  roamCamera.transform.localRotation=roamCamera.transform.localRotation*Quaternion.Euler(0,mouseX,0);
  }
  2.2手动漫游
  用户自定义根据键盘WSAD键控制摄像机的移动。首先定义角色控制器及相机速度初始量,要设置一个角色控制器组件,其次定义移动速度并初始化,最后设置一个相机的组件让相机围绕角色运动。(注:角色可以设置为一个cub,然后将材质剔除,这样也就变为了第一人称视角)
  privateCharacterController player;
  publicint speed=3;
  publicGameObject camera;
  获取角色控制器组件:
  player=this.GetComponent();
  通过WASD键控制移动:
  player.SimpleMove(transform.forward*Input.GetAxis(“Vertical”)*speed);
  transform.Rotate(0,Input.GetAxis(“Horizontal”),0);//控制摄像机旋转
  //Vertical为水平轴 即表示AD键/左右键等
  2.3摄像机镜头缩放
  首先控制摄像机镜头缩放需要设置一个缩放速度,可以这样定义:
  public floatScaleSpeed=10.0f;
  另外,需要在每一帧的运行中,也就是update方法中实时获取到是否输入了滑轮的操作.(注:这里主要的实现思想是通过滑轮控制摄像机的位置移动,也就控制了视野范围的大小)
  if(Input.GetAxis(“Mouse ScrollWheel”)<0)
  {
  Camera.main.transform.Translate(0,0,-1*ScaleSpeed);
  }
  if(Input.GetAxis(“Mouse ScrollWheel”)>0)
  {
  Camera.main.transform.Translate(0,0,1*ScaleSpeed);
  }
  3 结论
  本研究很好地展示虚拟漫游的实现方法,可以根据自己设置的路线实现摄像机自动漫游功能,也可以通过键盘自定义控制摄像机移动来漫游整个场景。另外,当今已经更新到5G时代,可以结合5G、VR、AR等技术进一步推广,使得虚拟漫游功能更加丰富,给游客提供更加逼真的效果体验。
  
  参考文献:
  [1]祝敏娇.基于Unity3D的虚拟漫游技术的研究[J].硅谷,2012.
  [2]干建松.基于Unity 3D的室内漫游的关键技术研究[J].盐城工学院学报,2011.
  [3]王爱军,李中永,颜世波.基于Unity 3D的博物馆虚拟漫游系统设计[J].湖南工程学院学报,2019.
转载注明来源:https://www.xzbu.com/2/view-15278434.htm