Unity3D基于陀螺仪实现VR相机功能(转)

阅读: 评论:0

Unity3D基于陀螺仪实现VR相机功能(转)

Unity3D基于陀螺仪实现VR相机功能(转)

转至=blogxgwz7

Unity自带陀螺仪功能,今天就利用陀螺仪实现一个VR相机功能。步骤如下:

 

  1. 打开Unity,创建一个新的C#脚本GyroController.cs,并挂在MainCamera游戏对象上,如图:

     

    代码如下:
    using UnityEngine;
    using System.Collections;public class GyroController : MonoBehaviour
    {// Fieldsprivate readonly Quaternion baseIdentity = Quaternion.Euler(90f, 0f, 0f);private Quaternion baseOrientation = Quaternion.Euler(90f, 0f, 0f);private Quaternion baseOrientationRotationFix = Quaternion.identity;private Quaternion calibration = Quaternion.identity;private Quaternion cameraBase = Quaternion.identity;private bool debug = true;public static bool gyroAvaiable;private bool gyroEnabled = true;private Quaternion gyroInitialRotation;public static bool gyroOff;private Quaternion initialRotation;private readonly Quaternion landscapeLeft = Quaternion.Euler(0f, 0f, -90f);private readonly Quaternion landscapeRight = Quaternion.Euler(0f, 0f, 90f);private const float lowPassFilterFactor = 0.1f;private Quaternion offsetRotation;private Quaternion referanceRotation = Quaternion.identity;private readonly Quaternion upsideDown = Quaternion.Euler(0f, 0f, 180f);// Methodsprivate void AttachGyro(){Enabled = true;this.ResetBaseOrientation();this.UpdateCalibration(true);this.UpdateCameraBaseRotation(true);this.RecalculateReferenceRotation();}private void Awake(){gyroAvaiable = SystemInfo.supportsGyroscope;}private static Quaternion ConvertRotation(Quaternion q){return new Quaternion(q.x, q.y, -q.z, -q.w);}private void DetachGyro(){Enabled = false;}private Quaternion GetRotFix(){return Quaternion.identity;}private void RecalculateReferenceRotation(){feranceRotation = Quaternion.Inverse(this.baseOrientation) * Quaternion.Inverse(this.calibration);}private void ResetBaseOrientation(){this.baseOrientationRotationFix = this.GetRotFix();this.baseOrientation = this.baseOrientationRotationFix * this.baseIdentity;}protected void Start(){abled = abled = true;this.AttachGyro();this.initialRotation = ansform.InitialRotation = attitude;}private void Update(){gyroOff = PlayerPrefs.GetInt("gyro-off") == 1;if (Enabled ){ansform.localRotation = Quaternion.ansform.localRotation, this.cameraBase * (feranceRotation * attitude) * this.GetRotFix()), 0.5f);//0.1f}}private void UpdateCalibration(bool onlyHorizontal){if (onlyHorizontal){Vector3 toDirection = (Vector3) (attitude * -Vector3.forward);toDirection.z = 0f;if (toDirection == ){this.calibration = Quaternion.identity;}else{this.calibration = Quaternion.FromToRotation((Vector3) (this.baseOrientationRotationFix * Vector3.up), toDirection);}}else{this.calibration = attitude;}}private void UpdateCameraBaseRotation(bool onlyHorizontal){if (onlyHorizontal){Vector3 forward = ansform.forward;forward.y = 0f;if (forward == ){this.cameraBase = Quaternion.identity;}else{this.cameraBase = Quaternion.FromToRotation(Vector3.forward, forward);}}else{this.cameraBase = ation;}}
    }

     

  2. 在相机MainCamera下创建一个新的Camera相机,并改变两个相机的Viewport Rect属性,以将屏幕均分,如图:
  3. 在场景中创建一个Cube,效果如图:
  4. 保存场景,打包成apk即可。即可使用手机陀螺仪控制相机旋转了

本文发布于:2024-01-28 12:14:41,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064152857347.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:陀螺仪   相机   功能   Unity3D   VR
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23