开发Htc Vive游戏应用的用户肯定都系那个了解瞬移技术的实现方法,这里跟大家分享下教程吧。
如何实现
一般的瞬移程序:
玩家定位的位置是camera.localPosition,现在想要移动到targetPositon,在不考虑转向的情况下只要这么做:
CameraRig.position = targetPosition - camera.localPosition;
原因是 camera的本地位置+父物体(CameraRig)的位置 = camera的绝对位置。
所以要让camera的绝对位置=targetPosition,就需要能满足等式camera.localPosition + CameraRig.position = targetPosition。
这个等式通过移项可以获得上面那行代码。
考虑旋转的瞬移:
有些程序像本文提到的例程一样,需要考虑旋转。
也就是说camera在游戏中的朝向未必和HMD定位的朝向保持一致。
那需要对上面代码做如下改变:
1. 对父物体CameraRig的旋转也做出类似改变
2. 设置旋转后再设置位置
3. 改变相对位置到绝对位置的转换式
最终的代码是:
cameraRig.rotation = targetRotation * Quaternion .Inverse(camera.localRotation);
var relativePos = cameraRig.TransformPoint(camera.localPosition) - cameraRig.position;
cameraRig.position = targetPos - relativePos;
总结
最简单的实现瞬移的方式是,改变camera父物体的位置和朝向。另外为了减少眩晕感,可以加上镜头的淡入淡出。
网友评论