유니티 자이로

정선호·2024년 1월 18일
0

Unity Features

목록 보기
25/28

Gyroscope Input
Gyroscope Camera


모바일 디바이스의 입력 중 하나인 자이로는 모바일 기기의 기울임, 가속 등을 가져오는 기능이다.
이를 이용해 물체의 기울임/회전 등을 수행할 수 있다.

자이로를 이용한 AR 카메라 구현

Gyro 켜기

Unity의 Gyro는 Input.Gyro를 이용해 받아올 수 있다.
SystemInfo.supportGyroscope를 이용해 디바이스가 자이로를 사용할 수 있는 디바이스인지 확인한 후 자이로 입력을 킨다.

private Gyroscope _gyro;

if(SystemInfo.supportsGyroscope
{
    _gyro = Input.gyro;
    _gyro.enabled = true;
    
}

Gyro 입력 받아오기

Input.gyro에서는 다음과 같은 입력을 받아올 수 있다.

이들 중 움직임에 관한 인풋은 다음과 같다.

  • attitude : 장치의 기울어진 상태(rotation)에 대한 쿼터니언
  • gravity : 장치의 중력 가속도 벡터
  • rotationRate : 장치가 회전하면서 생기는 회전율
  • userAcceleration : 장치가 어딘가로 이동하면서 생기는 중력 가속도

입력을 카메라 회전에 적용

  • RotationRate 사용
public class ManageCamera : MonoBehaviour {
    GameObject camParent;


	void Start () {
        camParent = new GameObject("CamParent");
        camParent.transform.position = this.transform.position;
        this.transform.parent = camParent.transform;
        Input.gyro.enabled = true;

	}
	
	
	void Update () {
        camParent.transform.Rotate(0, -Input.gyro.rotationRateUnbiased.y, 0);
        this.transform.Rotate(-Input.gyro.rotationRateUnbiased.x, 0, 0);

	}
}
  • Attitude 사용
public class MarklessAR : MonoBehaviour
{

    public Text text;

    private bool gyroCheck;

    private Gyroscope gyro;

    private GameObject Container;

    private Quaternion rot;


    void Start()
    {
        Container = new GameObject("Container");
        Container.transform.position = transform.position;
        transform.SetParent(Container.transform);
        gyroCheck = GyroCheck();
    }

    private bool GyroCheck()
    {
        if(SystemInfo.supportsGyroscope){
            gyro = Input.gyro;
            gyro.enabled = true;

            Container.transform.rotation = Quaternion.Euler(90f, 0f, 0f);

            rot = new Quaternion(0f, 0f, 1f, 0);

            return true;
        }
        return false;
    }

    private void Update()
    {
       
        if(gyroCheck)
        {
            transform.localRotation = gyro.attitude * rot;
        }
    }

}
profile
학습한 내용을 빠르게 다시 찾기 위한 저장소

0개의 댓글