由加速度计旋转的物体不会在统一中正确碰撞

Object Rotated by accelerometer doesn't collide properly in unity

首先,我想澄清一下,这不是这个问题的重复:unity 3d rotate the gameobject according to accelerometer

所以,我成功地使用加速度计和指南针统一旋转了一个物体。这在正常情况下工作正常,但是,当另一个物体与其碰撞时,它会穿过物体,导致物体随机移动。

我意识到这是因为我直接改变了对象的变换。我知道我不应该直接修改变换,我应该改用刚体,但是,我不知道如何将它更改为不直接改变变换的位置。

这是我目前旋转对象的方式:

float norm=0f;
Rigidbody rb;
// Use this for initialization
void Start () {
    rb = GetComponent<Rigidbody> ();


}

// Update is called once per frame
void Update () {
    Input.compass.enabled = true;
    if (norm == 0) {
        norm = Input.compass.trueHeading;
    }
    float val=Input.compass.trueHeading-norm;


    transform.rotation=Quaternion.Euler( new Vector3 ( (Input.acceleration.y-1)*90,val ,0));
    transform.Rotate (Input.acceleration.x*90*transform.forward);

}

那么我怎样才能改变这个,这样我就不会直接改变转换?

提前致谢!

检查 Documentation for Rigidbody.MoveRotation。它会将你的RigidBody旋转到给定的旋转方向,同时“符合刚体的插值设置。

注意:当您直接使用物理对象时,您应该使用 FixedUpdate(),而不是 Update()。如果您不确定原因,它们涵盖了 Unity Tutorials 中的差异。 TL;DR 它在模拟 "fixed framerate frame."

中运行