開發(fā)Htc Vive游戲應(yīng)用的用戶肯定都系那個了解瞬移技術(shù)的實(shí)現(xiàn)方法,這里跟大家分享下教程吧。
如何實(shí)現(xiàn)
一般的瞬移程序:
玩家定位的位置是camera.localPosition,現(xiàn)在想要移動到targetPositon,在不考慮轉(zhuǎn)向的情況下只要這么做:
CameraRig.position = targetPosition - camera.localPosition;
原因是 camera的本地位置+父物體(CameraRig)的位置 = camera的絕對位置。
所以要讓camera的絕對位置=targetPosition,就需要能滿足等式camera.localPosition + CameraRig.position = targetPosition。
這個等式通過移項(xiàng)可以獲得上面那行代碼。
考慮旋轉(zhuǎn)的瞬移:
有些程序像本文提到的例程一樣,需要考慮旋轉(zhuǎn)。
也就是說camera在游戲中的朝向未必和HMD定位的朝向保持一致。
那需要對上面代碼做如下改變:
1. 對父物體CameraRig的旋轉(zhuǎn)也做出類似改變
2. 設(shè)置旋轉(zhuǎn)后再設(shè)置位置
3. 改變相對位置到絕對位置的轉(zhuǎn)換式
最終的代碼是:
cameraRig.rotation = targetRotation * Quaternion .Inverse(camera.localRotation);
var relativePos = cameraRig.TransformPoint(camera.localPosition) - cameraRig.position;
cameraRig.position = targetPos - relativePos;
總結(jié)
最簡單的實(shí)現(xiàn)瞬移的方式是,改變camera父物體的位置和朝向。另外為了減少眩暈感,可以加上鏡頭的淡入淡出。