Unity陀螺仪默认位置

时间:2015-04-27 14:43:26

标签: c# unity3d gyroscope accelerator

我对陀螺仪的发现位置有疑问。我创造了一个女巫游戏,你可以通过移动手机(使用陀螺仪)向太空飞船前进,后退,左右移动。我的问题是我必须像图片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);

    }   
}

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

1 个答案:

答案 0 :(得分: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;

        ...
    }   
}