下記に記載したURL➀を参考にゲーム内をVIVEコントローラで移動するコードを書きました。酔いを軽減したく、下記URL➁を参考にCameraRigにPost-process Layerをadd componentしたところ、VIVEコントローラで移動ができなくなってしまいました。Post-process Layerをremoveしても動きません。
動かなくなってしまった原因とどうすれば視野を狭めたまま、VIVEコントローラで移動できるようになるか教えていただけないでしょうか。
➀ VIVEコントローラで移動
https://qiita.com/Maron_Vtuber/items/0b67411fb29139d0faee
➁ 視野を狭めて酔いを軽減する
https://qiita.com/OKsaiyowa/items/9d26a2a86013f08d5914
環境
Windows10
Unity 2019.2.15f
SteamVR 1.12.5
Unity
1using UnityEngine; 2using Valve.VR; 3 4public class PlayerController : MonoBehaviour 5{ 6 public SteamVR_Input_Sources lefthandType; 7 public SteamVR_Input_Sources righthandType; 8 public SteamVR_Action_Boolean teleport; 9 public SteamVR_Action_Vector2 direction; 10 public Transform _VRCamera; 11 public float _Movespeed = 3f; 12 public float _Rotspeed = 2f; 13 14 void Update() 15 { 16 if (CheckGrabLeft()) 17 { 18 Move(); 19 } 20 if (CheckGrabRight()) 21 { 22 Rotate(); 23 } 24 } 25 26 private void Move() 27 { 28 // HMD(=カメラ)の向いている方向から上下左右に水平方向に進む 29 // 進む方向はCheckDirectionLeft()で計算する 30 this.transform.position += _Movespeed * Vector3.ProjectOnPlane(CheckDirectionLeft(), Vector3.up) / 100; 31 } 32 private void Rotate() 33 { 34 // HMD(=カメラ)位置を中心として左右に回転する 35 // 左右の判定はCheckDirectionRight()で計算する 36 this.transform.RotateAround(_VRCamera.position, Vector3.up, _Rotspeed * CheckDirectionRight()); 37 } 38 private bool CheckGrabLeft() 39 { 40 return teleport.GetState(lefthandType); 41 } 42 private bool CheckGrabRight() 43 { 44 return teleport.GetState(righthandType); 45 } 46 private Vector3 CheckDirectionLeft() 47 { 48 // タッチパッドのタッチ位置をVector2で取得 49 Vector2 dir = direction.GetAxis(lefthandType); 50 if (Mathf.Abs(dir.y) >= Mathf.Abs(dir.x)) 51 { 52 // Y方向の絶対値の方が大きければ、HMD(=カメラ)に対して前か後ろ方向を返す 53 return Mathf.Sign(dir.y) * Vector3.RotateTowards(new Vector3(0f, 0f, 1f), _VRCamera.forward, 360f, 360f); 54 } 55 else 56 { 57 // X方向の絶対値の方が大きければ、HMD(=カメラ)に対して右か左方向を返す 58 return Mathf.Sign(dir.x) * Vector3.RotateTowards(new Vector3(1f, 0f, 0f), _VRCamera.right, 360f, 360f); 59 } 60 } 61 private float CheckDirectionRight() 62 { 63 // タッチパッドのタッチ位置をVector2で取得 64 Vector2 dir = direction.GetAxis(righthandType); 65 if (Mathf.Abs(dir.y) >= Mathf.Abs(dir.x)) 66 { 67 // Y方向の絶対値の方が大きければ、回転量=0を返す 68 return 0f; 69 } 70 else 71 { 72 // X方向の絶対値の方が大きければ、回転量= 1か -1を返す 73 return Mathf.Sign(dir.x); 74 } 75 } 76}
あなたの回答
tips
プレビュー