Unity Gyro之使用陀螺儀實現簡單VR全景環視效果
阿新 • • 發佈:2018-12-19
轉https://jingyan.baidu.com/article/3aed632ec0f421701180914e.html
-
開啟Unity,新建一個空工程,具體如下圖
-
在場景中佈置一些物體作為參照,把相機置於其中,便於觀察,具體如下圖
-
拷貝MainCamera的Transform,在場景中新增一個GameObject,可以命名為CameraParent,把MainCamera的Transform貼上給CameraParent的 Transform,最後把MainCamera作為他的子物體,具體如下圖
-
在工程中新建一個指令碼,可以命名為 GyroPanorama,雙擊開啟進行編輯,具體如下圖
-
GyroPanorama 指令碼的具體程式碼和程式碼說明如下圖
-
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 陀螺儀實現全景圖效果 /// </summary> public class GyroPanorama : MonoBehaviour { private Quaternion gyroscopeQua; //陀螺儀四元數 private Quaternion quatMult = new Quaternion(0, 0, 1, 0); // 沿著 Z 周旋轉的四元數 因子 private float speedH = 0.2f; //差值 protected void Start() { //啟用陀螺儀 Input.gyro.enabled = true; //因安卓裝置的陀螺儀四元數水平值為[0,0,0,0]水平向下,所以將相機初始位置修改與其對齊 transform.eulerAngles = new Vector3(90, 90, 0); } protected void Update() { GyroModifyCamera(); } /// <summary> /// 檢測陀螺儀運動的函式 /// </summary> protected void GyroModifyCamera() { gyroscopeQua = Input.gyro.attitude * quatMult; //為球面運算做準備 Camera.main.transform.localRotation = Quaternion.Slerp( Camera.main.transform.localRotation, gyroscopeQua, speedH); } /// <summary> /// Gyro資訊列印,真正執行時可以去掉 /// </summary> protected void OnGUI() { GUI.skin.label.fontSize = Screen.width / 40; GUILayout.Label("Orientation: " + Screen.orientation); GUILayout.Label("input.gyro.eulerAngles: " + Input.gyro.attitude.eulerAngles); GUILayout.Label("now eulerAngles: " + Camera.main.transform.eulerAngles); GUILayout.Label("iphone width/font: " + Screen.width + " : " + GUI.skin.label.fontSize); } }