使用环境:
Unity2021.3.21f
XR Interaction Toolkit v3.0.0
各类函数可用的:
简单项目配置:
第一步,导包(samples可以不用导这么多,两个就够了):
第二步,构建场景:
至此,一个简单的VR场景就搭好了,啥都没有的,如果你想加UI,想加课拖拽操纵的物体,那就往场景加。
XR Origin
这个就是头盔加两个手柄的信息集合体。
XR Device Simulator
这个是在Editor下PC模拟头盔手柄操作的脚本,方便调试用的,运行时看左下角的提示就懂如何操作了。(注:打包的时候记得Disable这个玩意儿或者自己些个脚本在Editor的时候激活这个脚本)
添加可操作的UI:
注意调一下这个canvas的大小位置,还要注意你的evetSystem是不是跟着生成出来的还是说是你场景里自带的,要它跟着生成出来的这个才能正确接受事件。
还想要自定义一些按键触发事件?去看我的new input system的文章。
可控制物体脚本(无重力的):
XR Grab Interactable
(会自动添加Rigidbody
、XR General Grab Transformer
,但最好还是自己添加,好配置参数);加脚本在你的物体上,如果这个物体很多碰撞体,拖拽整体,就加在父节点上也是一样的,脚本会自动获取子节点的碰撞然后移动的是父物体。
一个简单的不受重力影响的可射线操作的物体就完成了。(注:Rigidbody的 Is Kinematic
跟interpolate
要配置好)
除此之外,你还想要限定它的移动轴,规定它只能在某一特定轴移动?那么你在运行的时候其实就会发现有个脚本会自动添加进来的,
那就是XR General Grab Transformer
。你可以提前把它先挂载进你要操作的物体上,然后你看看这个Permitted displacement Axes属性点开就懂了,这里就是可操作的移动的轴。
什么?你还想限制它的旋转轴?也有这样的脚本,不过它不会跟随xr grab interactable
一起加进去,你需要自己手动添加 Grab Transformer Rotation Axis Lock
:
至此,这个物体你想怎么玩就怎么玩了,还有很多属性因为没有研究就不过多赘述了。
传送机制:
既然是VR,那肯定少不了空间移动,大多数都是射线过去的,前面已经配置好了一个VR环境了,在这基础上继续整。
Teleprotation Area
把这个脚本挂载在你的地面碰撞体上就行了,如果有很多不同的地面碰撞体,就整一个父节点把它们都放在子节点就行了,在PC(模拟)运行时上传送就是在select的对象是手柄的时候按方向键wasd传送就行了,射线必须hover在你的地板上哦。
传送到某一个具体位置?那就挂载Teleportation Anchor
,具体传送操作在PC也是方向键然后传送,同上。传送的位置就是这个teleprot Anchor Transform属性,你可以把这个具体的位置挂载在这个子节点下,拖拽上去就行了。