首先,我想说清楚这不是这个问题的重复: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);
}
那么我怎么能改变这个以便我不直接改变变换?
提前致谢!
答案 0 :(得分:1)
结帐Version support for VS 2015。当&#34; 符合Rigidbody的插值设置时,它会将RigidBody
朝向给定的旋转旋转。&#34;
作为备注:当您直接使用物理对象时,您应该使用FixedUpdate()
,而不是Update()
。如果您不确定原因,则会涵盖Documentation for Rigidbody.MoveRotation
中的差异。 TL; DR它在模拟的#34;固定帧率帧中运行。&#34;