Rigidbody.position/rotation主要提供在下一个物理步之前更新物理位置,一般用于SweepTest这样的接口
那么测试一下会不会修改掉transform.position的值
测试结果:并不会立即改变transform.position,而会在下一个物理步执行时改变。如果手动改变transform.position/rotation不受影响
测试脚本:
using UnityEngine; public class RigidbodyStepTest : MonoBehaviour { public Rigidbody rigidbodyComponent; void OnEnable() { rigidbodyComponent.position = Vector3.zero; Debug.Log("OnEnable: " + transform.position + " frame count: " + Time.frameCount); } void FixedUpdate() { Debug.Log("FixedUpdate: " + transform.position + " frame count: " + Time.frameCount); } void Update() { Debug.Log("Update: " + transform.position + " frame count: " + Time.frameCount); } }
结果:
由于Unity物理的更新在FixedUpdate之后,而FixedUpdate调用在Update之前,故Update时值归0了