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

时间:2017-03-22 17:43:19

标签: c# unity3d accelerometer collision rigid-bodies

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

所以,我设法通过使用加速度计和放大器来旋转一个物体。罗盘。这通常很好,但是当另一个物体与它碰撞时,它会剪切通过物体,导致物体随机移动。

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

以下是我目前如何旋转对象:

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

}

那么我怎么能改变这个以便我不直接改变变换?

提前致谢!

1 个答案:

答案 0 :(得分:1)

结帐Version support for VS 2015。当&#34; 符合Rigidbody的插值设置时,它会将RigidBody朝向给定的旋转旋转。&#34;

作为备注:当您直接使用物理对象时,您应该使用FixedUpdate(),而不是Update()。如果您不确定原因,则会涵盖Documentation for Rigidbody.MoveRotation中的差异。 TL; DR它在模拟的#34;固定帧率帧中运行。&#34;