#创新实训#VR漫游项目汇报4

1.有关游戏优化技术的详细整理


带宽优化

减少纹理大小

其中和优化相关的主要有“Generate Mip Maps”、“Max Size”和“Format”几个选项。 
“Generate Mip Maps”会为同一张纹理创建出很多不同大小的小纹理,构成一个纹理金字塔。而在游戏中可以根据距离物体的远近,来动态选择使用哪一个纹理。

“Max Size”决定了纹理的长宽值,如果我们使用的纹理本身超过了这个最大值,Unity会对其进行缩小来满足这个条件。

“Format”负责纹理使用的压缩模式。通常选择这种自动模式就可以了,Unity会负责根据不同的平台来选择合适的压缩模式。而对于GUI类型的纹理,我们可以根据对画质的要求来选择是否进行压缩

缩放

在考虑性能和画面的平衡下,我们需要对特定机器的分辨率进行放缩。 
在Unity中设置屏幕分辨率可以直接调用Screen.SetResolution

————————————————————————————————————————————————————

2.对协程的理解

在游戏中有许多过程(Process)需要花费多个逻辑帧去计算。

  • 你会遇到“密集”的流程,比如说寻路,寻路计算量非常大,所以我们通常会把它分割到不同的逻辑帧去进行计算,以免影响游戏的帧率。
  • 你会遇到“稀疏”的流程,比如说游戏中的触发器,这种触发器大多数时候什么也不做,但是一旦被调用会做非常重要的事情(比图说游戏中自动开启的门就是在门前放了一个Empty Object作为trigger,人到门前就会触发事件)。

不管什么时候,如果你想创建一个能够历经多个逻辑帧的流程,但是却不使用多线程,那你就需要把一个任务来分割成多个任务,然后在下一帧继续执行这个任务。

比如,A*算法是一个拥有主循环的算法,它拥有一个open list来记录它没有处理到的节点,那么我们为了不影响帧率,可以让A*算法在每个逻辑帧中只处理open list中一部分节点,来保证帧率不被影响(这种做法叫做time slicing)。

再比如,我们在处理网络传输问题时,经常需要处理异步传输,需要等文件下载完毕之后再执行其他任务,一般我们使用回调来解决这个问题,但是Unity使用协程可以更加自然的解决这个问题,如下边的程序:


private IEnumerator Test()  
{  
    WWW www = new WWW(ASSEST_URL);  
    yield return www;  
    AssetBundle bundle = www.assetBundle;
}


————————————————————————————————————————————————————

3.对SteamVR插件的学习


SteamVR_GazeTracker.cs脚本解析
这个脚本的作用是判断当前物体是否被用户(头显)所注视,进入注视和离开注视都会有回调。处于注视状态的物体与实际注视点的距离范围定义为小于0.15米,而离开注视状态的距离范围为大于0.4米。之所以有一个大概的范围,并且使用了一个平面来相交,是因为注视这个动作是比较粗略的,玩家比较难能精确注视。

  Gaze回调的事件结构体,只有一个参数,即距离,表示凝视点与物体(中心)的距离

自学了SteamVR中的多个脚本,并做了标注。

——————————————————————————————————————————————

4. 学习了VRTK的脚本解析

从VRTK的一些案例出发,对VRTK实现的部分基本的类和方法进行分析来加强unity vr开发的能力。





VRTK_SimplePointer脚本的例子可以在SteamVR_Unity_Toolkit/Examples/003_Controller_SimplePointer场景中看到并且事件用法和监听的脚本例子可以看SteamVR_Unity_Toolkit/Examples/Resources/Scripts/VRTK_ControllerPointerEvents_ListenerExample.cs脚本。

作为衍生和功能扩展,VRTK里还有许多其他类型的射线指针,这里先不展开描述。

因为篇幅原因这里就先讲到这里。之后我们会继续讲实现传送的方法以及可以交互的对象。


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页