開發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父物體的位置和朝向。另外為了減少眩暈感,可以加上鏡頭的淡入淡出。