Mobile phone gyro control camera

1. Horizontal screen view, vertical screen never tried


using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
/// <summary>  
/// 直接挂载这个脚本即可通过陀螺仪来控制摄像机的旋转  
/// </summary>  
public class CameraRotate : MonoBehaviour 
{ 
	//陀螺仪  
	private Gyroscope gyro;  
 
	private Quaternion quatMult;  
	//设备的状态(即,空间方向)。  
	private Quaternion quatMap;  
	//移动速度   
	private float speed = 0.2f;   
	//摄像机的父对象  
	public GameObject camParent; 
 
	protected void Start()  
	{
		//获取陀螺仪  
		gyro = Input.gyro;  
		//启用陀螺仪  
		gyro.enabled = true;  
		//启用陀螺仪钱需要翻转一下摄像机,否则角度不对,大家可以删除这段代码实验一下  
		camParent.transform.eulerAngles = new Vector3(90, 90, 0);  
		//用来和  
		quatMult = new Quaternion(0, 0, 1, 0);  
 
 
	}  
 
 
	protected void Gyro()  
	{  
		//获取设备的空间方向  
		quatMap = new Quaternion(gyro.attitude.x, gyro.attitude.y, gyro.attitude.z, gyro.attitude.w);  
		Quaternion qt = quatMap * quatMult;  
		//在localRotation和qt之间的插值  
		transform.localRotation = Quaternion.Slerp(transform.localRotation, qt, speed);  
 
 
		transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z);  
	}  
 
 
	protected void Update()  
	{ 
		Gyro();  
	}  
} 

-------------------------------------------- Update ----- ---- Code Simplification -------------------------------------------- ------

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraRotate : MonoBehaviour 
{
	private Quaternion quatMult = new Quaternion(0, 0, 1, 0);
	// Use this for initialization
	void Start () 
	{
		Input.gyro.enabled=true;

		//相机需要一个父物体,脚本直接挂在相机上
		transform.parent.eulerAngles = new Vector3(90, 90, -90); 
	}
	
	// Update is called once per frame
	void Update () 
	{
		transform.localRotation = Input.gyro.attitude*quatMult;
	}
}

 

Released eight original articles · won praise 3 · Views 9859

Guess you like

Origin blog.csdn.net/feigebabata/article/details/83062067