unity陀螺仪默认位置

Unity gyroscope default position

我有一个关于陀螺仪默认位置的问题。我在 中创建了一个游戏,你通过移动 phone(使用陀螺仪)向前、向后、向左和向右移动 space 船。我的问题是我必须像图 1 一样水平握住 phone。如果我像图 2 一样像往常一样握住 phone(与地面约 60 度),船就会沉没。任何人都知道如何改变陀螺仪的默认位置,这样我就可以正常握住 phone 并驾驶船只?如果我的 phone 保持在 60 度,我希望船静止不动。否则,它向标题方向移动。

我的代码:

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);

    }   
}

如果有人知道如何做到这一点,请帮忙! :)

刚刚解决了一个类似的问题,虽然我希望你现在已经解决了这个问题我想我会分享我的解决方案以防其他人偶然发现这个问题...

在您开始游戏时,您只需要记录一个参考点。然后对于涉及当前加速度的每个计算,减去初始参考加速度值。这将为您提供调整后的加速度值,同时考虑到玩家手持设备的方式。

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;

        ...
    }   
}