统一3d根据加速度计旋转游戏对象

时间:2014-08-18 07:16:15

标签: unity3d accelerometer

我想做一个像太阳穴一样的游戏。我需要根据设备的倾斜程度旋转播放器的平台。我正在尝试使用加速计,但我无法让游戏对象倾斜。 请指导我。 感谢

这是我的代码我以前在评论中使用代码现在我试图使用评论中的代码

public class tilt : MonoBehaviour {
Vector3 dir;
float movespeed;
bool istilt;
// Use this for initialization
void Start () {
    dir=Vector3.zero;
    movespeed=10.0f;
    istilt=true;

}

// Update is called once per frame
void FixedUpdate()
{
    //dir.x=-Input.acceleration.y;
    //transform.Translate(dir.x,0,0);
    //transform.Translate(Input.acceleration.x, 0, -Input.acceleration.z);
    //Vector3 vec = Physics.gravity;
    /*vec.x = -Physics.gravity.z;
    vec.z = Physics.gravity.x;
    vec.y = 0;
    transform.rotation = Quaternion.Euler(vec);*/
    /*movespeed=-Input.acceleration.y;

    transform.Rotate(Vector3.up*movespeed*5.0f); 
*/float zmovment = Input.GetAxis("Horizontal");//-Input.acceleration.y;
    float xmovment = Input.GetAxis("Vertical");//-Input.acceleration.x;
    Vector3 dir = new Vector3(xmovment,0,zmovment);

    Vector3 tgravity =new Vector3(zmovment*2.0f,-15,xmovment*2.0f);
    Physics.gravity= tgravity;//new Vector3(zmovment*speed,gravity,xmovment*speed);
    Vector3 vec = Physics.gravity;
    vec.x = -Physics.gravity.z;
    vec.z = Physics.gravity.x;
    vec.y = 0;
    transform.rotation = Quaternion.Euler(vec);
}

}

1 个答案:

答案 0 :(得分:1)

使用重力作为平台法线的一种方法就像这样

transform.rotation = Quaternion.LookRotation(Input.acceleration, Vector3.up);

您可能需要在加速度上切换轴,以便向下移动,具体取决于平台上的前进位置。这是我的猜测

Vector3 forward = new Vector3(-Input.acceleration.y, Input.acceleration.x, Input.acceleration.z);
transform.rotation = Quaternion.LookRotation(forward, Vector3.up);

另请注意,只有在设备静止时才会出现这种情况。从一侧到另一侧的移动会导致平台旋转,这可能是不合需要的。