2017-10-25 20 views
1

자이로 제어 카메라 onButtonClick 이벤트를 활성화하고 싶지만 카메라의 현재 위치에서 시작하고 싶습니다. 현재 자이로가 활성화되면 카메라는 그 위치에서 벗어나 자이로 모션을 수행하는 대신 카메라를 새로운 위치 (아마도 현재의 자이로 회전 장치)로 이동시킵니다.현재 장치 방향에서 자이로 스코프 카메라를 활성화하는 방법

희망하지만 나는 기본적으로 사용자가 게임에서보고있는 내용 (예 : 자이로가 제어하는 ​​카메라가 아니라 해당 사용자가 변경 사항을 인식 할 수 있음)을 눈치 채기를 원하지 않습니다. 여기에 내가 사용하고 코드는 다음과 같습니다

void Update() 
{ 
    Quaternion attitudeFix = new Quaternion (-gyro.attitude.x, -gyro.attitude.z, -gyro.attitude.y, gyro.attitude.w); 
    Quaternion offsetRotation = initialGyroRotation * attitudeFix; 
    rotation = initialRotation * offsetRotation; 
    transform.rotation = rotation; 
} 

public void EnableGyro() 
{ 
    initialGyroRotation = Input.gyro.attitude; 
    initialRotation = transform.rotation; 

    Debug.Log("initialRotation: " + initialRotation.ToString()); 
    Debug.Log("transform.rotation: " + transform.rotation.ToString()); 
    Debug.Log("initialGyroRotation: " + initialGyroRotation.ToString()); 
} 

**

편집 :는 여기에 사용자가 자신의 얼굴 앞에 자신의 장치를 들고으로보기 (보는 방법을 정확히의 화면입니다 초상화) 그리고 북쪽으로 향하고있다. 앱이 시작될 때 기기의 방향에 관계없이 북쪽을 휴대 전화로 세로 방향으로 향할 때 (사용자가 휴대 전화를 통해 보았을 때 다시 보입니다)

enter image description here

편집 2 : 테스트는 점점 혼란 있었다 나는 당신의 솔루션을 제안 정확히 어떻게 다시 코드를 넣습니다. 여전히 약간의 문제가 있지만이 스크립트가 매우 비슷해 보입니다. 가장 큰 문제는 이상한 각도의 기기로 앱을 시작하면서 각 테스트를 실행할 때 화면이 위 그림처럼 보이지 않는다는 것입니다. 앱이 시작될 때 기기가 어떤 각도인지는 중요하지 않습니다. 북쪽과 세로를 가리킬 때 위 화면처럼 보이게해야합니다.

더 많은 테스트를 수행해야하며 새롭고/깨끗한 프로젝트로 테스트를 수행해야합니다.

답변

1

Awake 또는 Start 함수에서 오프셋 된 카메라 위치를 가져와야합니다. Update 함수에서 오프셋 값을 자이로 센서의 값에 적용합니다.

오프셋을 사용해야한다는 것은 이미 알고 있지만 올바른 방법으로 수행하고 있지 않은 것으로 보입니다. 혼란스러운 부분은 자이로 센서 값에서 현재 카메라 회전을 빼는 데 필요한 오프셋을 얻는 것입니다.

Quaternion = Quaternion * Quaternion. 

이 무엇인지 여러분의 코드가 수행해야합니다

Quaternion = Quaternion *Quaternion.Inverse

이 (가) Quaternion 곱셈 Quaternion 추가하려면 :뿐만 아니라 Quaternion

QuaternionInverse을 곱 빼려면 모양 :

Quaternion offset; 

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

void Start() 
{ 
    //Subtract Quaternion 
    offset = transform.rotation * Quaternion.Inverse(GyroToUnity(Input.gyro.attitude)); 
} 

void Update() 
{ 
    GyroModifyCamera(); 
} 

void GyroModifyCamera() 
{ 
    //Apply offset 
    transform.rotation = offset * GyroToUnity(Input.gyro.attitude); 
} 

private static Quaternion GyroToUnity(Quaternion q) 
{ 
    return new Quaternion(q.x, q.y, -q.z, -q.w); 
} 
+0

귀하의 도움에 감사 드리며, 귀하의 코드는 정확히 수행 한 작업을 수행했습니다. 이제는 그 작업을 했으므로 카메라와 자립 게임에 자이로를 구현할 때 다른 문제가 발생했습니다. 두 축 (X/Z)에서 자이로를 수행하고 남은 1 축 (Y)을 수행하는 다른 게임 개체에서 나침반을 사용하는 카메라를 설정하는 것이 가능하다고 생각하는 경우 귀하의 생각을 알고 싶습니다. 다른 질문을 시작해야합니까? – Valerie

+0

이것은 완전히 다른 문제 및 질문입니다. 이것에 대한 새로운 질문을 만들 수 있습니다.당신이 무엇을 요구하고 있는지 분명히하고 당신이 시도한 것을 제공하십시오. – Programmer

+0

감사합니다 프로그래머, 여기 내 새로운 질문 : https://stackoverflow.com/questions/46943868/gyroscope-with-compass-help-needed – Valerie