由加速度计旋转的物体不会在统一中正确碰撞
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."
中运行
首先,我想澄清一下,这不是这个问题的重复: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."