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

C# 由加速度计旋转的物体在整体中不会正确碰撞,c#,unity3d,accelerometer,collision,rigid-bodies,C#,Unity3d,Accelerometer,Collision,Rigid Bodies,首先,我想表明,这不是这个问题的重复: 所以,我通过使用加速计和指南针,使一个物体整体旋转。这正常工作正常,但当另一个对象与它碰撞时,它会通过对象进行剪辑,从而导致对象随机移动 我意识到这是因为我直接改变了对象的变换。我知道我不应该直接修改变换,我应该使用刚体,但是,我不知道如何才能将它更改为不直接改变变换的位置 以下是我当前旋转对象的方式: float norm=0f; Rigidbody rb; // Use this for initialization void Start () {

首先,我想表明,这不是这个问题的重复:

所以,我通过使用加速计和指南针,使一个物体整体旋转。这正常工作正常,但当另一个对象与它碰撞时,它会通过对象进行剪辑,从而导致对象随机移动

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

以下是我当前旋转对象的方式:

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

}
那么我怎样才能改变它,不直接改变变换呢

提前谢谢

签出该文件。它将按照刚体的插值设置朝给定的旋转方向旋转刚体

请注意:当您直接使用物理对象时,应该使用FixeUpdate,而不是Update。如果您不确定原因,它们会涵盖不同的内容。TL;DR它在模拟的固定帧速率帧中运行