2015-04-27 220 views
1

我有一個關於陀螺儀失去位置的問題。我創造了一個遊戲,通過移動手機(使用陀螺儀)移動太空飛船向前,向後,向左和向右移動。我的問題是,我必須像圖片1一樣水平握住手機。如果我像往常一樣(大約60度地面)握住手機,就像在圖片2上一樣,那麼船就會掉下來。任何人都知道如何改變陀螺儀的默認位置,所以我通常可以握住手機並轉向船舶?如果我的手機保持在60度,我希望這艘船靜止不動。否則,它將轉到標題方向。統一陀螺儀的默認位置

enter image description here

我的代碼:

using UnityEngine; 
using System.Collections; 

[System.Serializable] 
public class Boundaryy 
{ 
    public float xMin, xMax, zMin, zMax; 
} 

public class PlayerControll1 : MonoBehaviour { 
    public float speed; 
    public float tilt; 
    public Boundaryy boundary; 

    // Use this for initialization 
    void Start() { 
     Input.gyro.enabled = true; 
     Screen.sleepTimeout = SleepTimeout.NeverSleep; 
     } 

    void FixedUpdate() { 

     float xi = Input.gyro.userAcceleration.x; 
     float yi = Input.gyro.userAcceleration.y; 


     Vector3 movement = new Vector3 (xi, 0.0f, yi); 
     rigidbody.velocity = movement * speed; 

     rigidbody.position = new Vector3 
      (
       Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax), 0.0f, 
       Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax) 
       ); 

     rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt); 

    } 
} 

如果有人有線索如何做到這一點,請大家幫忙! :)

回答

0

只是解決了類似的問題,但我希望你現在已經解決了這個問題,我想我會分享我的解決方案的情況下,其他人碰到這個問題絆倒......

在你點開始遊戲只需要記錄一個參考點。然後對於涉及當前加速度的每個計算,減去初始參考加速度值。這將爲您提供調整後的加速度值,同時考慮到玩家如何握住他們的設備。

public class PlayerControll1 : MonoBehaviour { 
    .... 
    public Vector3 baseAcceleration; 

    // Use this for initialization 
    void Start() { 
     ... 
     baseAcceleration = Input.gyro.userAcceleration; 
    } 

    void FixedUpdate() { 

     float xi = Input.gyro.userAcceleration.x - baseAcceleration.x; 
     float yi = Input.gyro.userAcceleration.y - baseAcceleration.y; 

     ... 
    } 
}