오큘러스 VR SDK에서는 기본적으로 이와 같은 기능은 VR 멀미가 발생할 가능성이 높기에 지원하지 않는데요. 종종 이와같은 기능이 특수한 VR시뮬레이션/게임 구현을 위해 필요할 때가 있기에 구현 해 보았어요.
using System.Collections; using System.Collections.Generic; using UnityEngine; //C# OVR 카메라 회전 비율 변경 public class ovr_speedcon : MonoBehaviour { //쿼터니언 변수 선언, update 안에서 선언할 경우 매번 재선언되므로 한번만 선언해도 되는 건 한번만 선언하세요. public Quaternion rotate = Quaternion.identity; // Use this for initialization void Start() { } // Update is called once per frame void Update() { rotate = UnityEngine.XR.InputTracking.GetLocalRotation(UnityEngine.XR.XRNode.CenterEye); float angle = Quaternion.Angle(transform.rotation, UnityEngine.XR.InputTracking.GetLocalRotation(UnityEngine.XR.XRNode.CenterEye)); // OVR(오큘러스 VR)원래의 각도변환 출력 - 로그창 Debug.Log("Original OVR angle change( x :" + rotate.eulerAngles.x.ToString() + ", y : " + rotate.eulerAngles.y.ToString() + ", z :" + rotate.eulerAngles.z.ToString() + " )"); //Quaternion각을 오일러각으로 변환 float x = rotate.eulerAngles.x; float y = rotate.eulerAngles.y; float z = rotate.eulerAngles.z; //OVR 각좌표는 3축 0 - 360의 절댓값이며, 이로 인해 180도 이후에는 역방향으로 movement를 계산해주어야 해요. //기본적으로 OVR SDK에 의해 별도의 설정 없이도 카마라가 1배속으로 강제 회전하므로, 0.5배로 맞추려면 -0.5배로 해 주어야 하며 1.5배로 하고 싶으면 부호를 지워 주면 되요. //OVR는 뒤로 고개젖힘에 대해서는 약간 부정확한 각도 값을 반환하는데 해당 부분에 대해서는 생략했어요. if (x > 180) { x = 360.0F - ((360 - rotate.eulerAngles.x) * 0.5F); x = -x; } else { x = rotate.eulerAngles.x * 0.5F; x = -x; } if (y > 180) { y = 360.0F - ((360 - rotate.eulerAngles.y) * 0.5F); y = -y; } else { y = rotate.eulerAngles.y * 0.5F; y = -y; } if (z > 180) { z = 360.0F - ((360 - rotate.eulerAngles.z) * 0.5F); z = -z; } else { z = rotate.eulerAngles.z * 0.5F; z = -z; } //transform.Rotate(rotation.eulerAngles.x * cast, rotation.eulerAngles.y * cast, rotation.eulerAngles.z * cast); //변화시킨 local 오일러각 변화를 OVR 카메라에 적용. transform.localEulerAngles = new Vector3(x, y, z); // OVR(오큘러스 VR)변화한 각도변환 출력 - 로그창 Debug.Log("OVR Changed camera angle( x :" + x + ", y : " + y + ", z :" + z + " )"); } }
댓글 없음:
댓글 쓰기
글에 대한 의문점이나 요청점, 남기고 싶은 댓글이 있으시면 남겨 주세요. 단 악성 및 스팸성 댓글일 경우 삭제 및 차단될 수 있습니다.
모든 댓글은 검토 후 게시됩니다.