'gyro'에 해당되는 글 2건

  1. 2015/01/19 글뻥 unity3D Gyro Camera
  2. 2014/04/07 글뻥 유니티3D 자이로 예제
유니티3D에서 자이로 효과를 카메라에 적용하는 스크립트입니다.
(Marker 없이 자이로로만 캐릭터를 바닥에 닫게 한다던가... 그럴때 사용하는...)

using UnityEngine;
using System.Collections;

public class CameraPivot : MonoBehaviour
{
 float _BaseAngle = -90f;

 void Start()
 {
 Input.gyro.enabled = true;
 }

 void Update()
 {
 Quaternion q1 = Input.gyro.attitude;
 Quaternion q2 = new Quaternion(q1.y, -q1.z, -q1.x, q1.w);

 transform.rotation = Quaternion.Euler(new Vector3(q2.eulerAngles.x, _BaseAngle, q2.eulerAngles.z));
 if (transform.rotation.eulerAngles.z <= 275f && transform.rotation.eulerAngles.z > 180f)
 transform.rotation = Quaternion.Euler(new Vector3(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 275f));
 if (transform.rotation.eulerAngles.z >= 355f || transform.rotation.eulerAngles.z <= 180f)
 transform.rotation = Quaternion.Euler(new Vector3(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 355f));
 }
}


1. 빈 게임오브젝트 만들어서 이름 바꾼뒤에 아래와 같이 스크립트 포함시킵니다.
사용자 삽입 이미지
2. Pivot 해줄 오브젝트 만들어서 다음과 같이 Rotation값을 (90, -90, 0)으로 설정합니다.
사용자 삽입 이미지
3. 마지막으로 Gyro camera를 설정한다.
사용자 삽입 이미지
4. Main Camera에서 다음과 같이 설정해주면 끝!
사용자 삽입 이미지

* Marker기반 AR과의 차이점.
1. Zoom in-out이 수동임.
2. 화면 Center를 중앙으로 인식함.
3. 회전이 수동임. (축이 고정되어 자동으로 먹히게 하는것 처럼 보이는 건 https://github.com/keijiro/GyroCam 참고)

2015/01/19 17:20 2015/01/19 17:20
1인칭 시점으로 마구잡이 돌릴때...

* 오큘러스 카메라 앵글에 사용

using UnityEngine; 
using System.Collections; 
public class Behavior_Cam_Tilt : MonoBehaviour { 
     private Quaternion cameraBase = Quaternion.Euler(new Vector3(3f, 180f, 0f)); 
     private Quaternion referanceRotation = Quaternion.identity; 
     private const float lowPassFilterFactor = 0.2f; 
     void Start() { Input.gyro.enabled = true; } 
     void Update() {
           //transform.rotation = ConvertRotation(Input.gyro.attitude);
           transform.rotation = Quaternion.Slerp(transform.rotation, cameraBase * (ConvertRotation(referanceRotation * Input.gyro.attitude) * GetRotFix()), lowPassFilterFactor); 
      } 

     private static Quaternion ConvertRotation(Quaternion q) { 
           return new Quaternion(q.x, q.y, -q.z, -q.w); 
     } 
     private Quaternion GetRotFix() { 
            if (Screen.orientation == ScreenOrientation.Portrait) return Quaternion.identity; 
            if (Screen.orientation == ScreenOrientation.LandscapeLeft || Screen.orientation == ScreenOrientation.Landscape) return Quaternion.Euler(0, 0, -90); 
            if (Screen.orientation == ScreenOrientation.LandscapeRight) return Quaternion.Euler(0, 0, 90); 
            if (Screen.orientation == ScreenOrientation.PortraitUpsideDown) return Quaternion.Euler(0, 0, 180); 
            return Quaternion.identity; 
      } 
}
2014/04/07 17:27 2014/04/07 17:27