Unity实现3D成像(立体游戏)
1、czaoth的博客上分享了一篇“Unity3D实现3D立体游戏原理及过程”的文章,详细的介绍了3D成像的原理以及使用Plane映射两个摄像机成像的方法。这种方法的好处是最后的资源包导出很简单,没有任何UI或者插件,但是不太方便的是对准两个plane的摄像机角度、大小、距离不是很好调整,RenderTexture的大小有限制还需要设置材质球的offset。本篇经验中,模拟“双眼”的方法与他相同,但映射成像选择了使用UI。这种方式非常方便简洁,避免了以上所有的问题,唯一不太好的地方就是我使用了NGUI,相当于在以后做成资源包的时候需要导出NGUI的部分(UGUI,GUI原理相同)

3、第一人称控制器下面的MainCamera不能再用了,因为他只有一只“眼睛”,而我们需要的是两只“眼睛”,把camera组件enabled=false或者直接删掉这个组件都可以。在MainCamera下新建两个Camera,命名为LeftEye和RightEye

4、设置“瞳距”:LeftEye水平左移0.03,RightEye水平右移0.03。两眼瞳距即0.06。每个人的瞳距都是不一样的,或大或小,所以在设置两个摄像机之间的距离时,可以根据实际需要进行调整。距离越大,景深越大,看起来更清晰,好像是距离拉近了,但不适于大场景,远镜头。距离越小,景深越小,距离为0的时候就相当于一个眼睛了,没有立体感没有距离感。

5、新建两个Render Texture,命名为LeftEye和RightEye。大小设置为2048*2048,Render Texture也可以设置成其他尺寸,尺寸越高,越清晰,相应占用的资源也就越多。

6、用Render Texture当做“幕布”,用来呈现两只眼睛看到的景象。两个Render Texture分别拖拽到两个摄像机的Target Texture

7、创建两个Material,命名为LeftEye和RightEye.两个Render Texture分别拖拽到材质球的Texture上

8、按照图片所示,创建UIRoot,新建一个层Layer,命名为Plane3DEye,设置UIRoot及它的子物体的Layer位Plane3DEye。这么做的原因是防止与项目中的其他UI发生层次冲突,这个UIRoot专门用来放置3D投影。Camera的Culling Mask也设置为Plane3DEye,也是为了防止视图混乱或者重叠等情况。Anchor一定要添加UIAnchor组件,side设置为TopLeft,稍后解释原因,再发挥作用之前这个组件的enabled=false.这时候一定要把第一人称控制下的两个摄像机的CullingMask中Plane3DEye取消掉,谁也不愿意在投影的影像中还有一个小“屏幕吧”





12、至此3D成像的“眼镜”全部制作完毕,运行一下看一下效果,没有问题的话,可以导成资源包,放在任何项目中都能适用。
