刚体组件中position和MovePosition控制移动
Rigidbody.position
将刚体从一个位置直接设置到另外一个位置用此方法。
刚体的位置。
Rigidbody。position允许您使用物理引擎获取和设置刚体的位置。如果你用刚体来改变一个刚体的位置。position转换将在下一步物理模拟步骤后更新。
这比使用Transform转换更新位置要快。因为Transform将导致所有附加的碰撞器重新计算它们相对于刚体的位置。
如果你想连续移动刚体,可以使用MovePosition,它会考虑到插值。
1
2
3
4
5
6
7
8
9public class API15RigidbodyPosition : MonoBehaviour { public Rigidbody playerRgd;//刚体 void Update() { //当前位置+前方向*1秒*10 playerRgd.position = playerRgd.transform.position + Vector3.forward * Time.deltaTime * 10; } }
Rigidbody.MovePosition
public void MovePosition(Vector3 position); //持续的移动刚体用此方法。
将刚体插值移动到指定位置。
使用Rigidbody。根据刚体的插值设置移动刚体。
如果Rigidbody上启用了Rigidbody插值,则调用Rigidbody。MovePosition在任何呈现的中间帧中都可以实现两个位置之间的平滑过渡。
如果您希望在每个FixedUpdate中连续移动一个rigidbody,那么应该使用这个方法。
设置Rigidbody。相反,如果你想要传送刚体从一个位置到另一个位置,没有中间位置被渲染。
1
2
3
4
5
6
7
8
9public class API15RigidbodyPosition : MonoBehaviour { public Rigidbody playerRgd;//刚体 void Update() { //当前位置+前方向*1秒*10 playerRgd.MovePosition(playerRgd.transform.position + Vector3.forward * Time.deltaTime * 10); } }
Rigidbody.freezeRotation
控制物理是否会改变物体的旋转。
如果启用了自由旋转,则物理模拟不会修改旋转。这对于创造第一人称射击游戏很有用,因为玩家需要完全控制鼠标的旋转。参见:Rigidbody.constraints。
锁定x和z的旋转,只让y轴进行旋转
通过刚体控制游戏物体旋转
Rigidbody.rotation
将刚体从一个角度直接旋转到另外一个角度用此方法。
刚体的旋转。
Rigidbody。rotation允许你使用物理引擎获得和设置刚体的旋转。如果你用刚体改变刚体的旋转。旋转时,变换将在下一步物理模拟步骤后更新。
这比使用Transform更新旋转要快,因为Transform将导致所有附加的碰撞体重新计算它们相对于刚体的旋转。
如果你想要连续地旋转刚体,可以使用MoveRotation,它会考虑到插值。
注意:旋转是世界空间。
Rigidbody.MoveRotation
public void MoveRotation(Quaternion rot); //持续旋转刚体用此方法。
使用Rigidbody。使用插值运算旋转刚体。
如果Rigidbody上启用了Rigidbody插值,则调用Rigidbody。在任何呈现的中间帧中,移动将导致两个旋转之间的平稳过渡。
如果你想要在每个FixedUpdate中连续旋转一个刚体,就应该使用这个方法。
设置Rigidbody。相反,如果你想要传送刚体从一个旋转到另一个旋转,没有中间位置被渲染。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public class API15RigidbodyPosition : MonoBehaviour { public Rigidbody playerRgd;//刚体 public Transform enemy;//朝向的目标 void Update() { if (Input.GetKey(KeyCode.Space)) { Vector3 dir = enemy.position - playerRgd.position;//刚体朝向目标 dir.y = 0;//只需要x和z望向敌人,不需要y轴望向敌人,否则会发生倾斜 Quaternion target = Quaternion.LookRotation(dir);//把望向敌人的向量转换为四元数 playerRgd.MoveRotation(Quaternion.Lerp(playerRgd.rotation, target, Time.deltaTime)); //使用插值运算旋转 } } }
通过AddForce控制运动
给刚体施加一个力
public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);
1
2
3
4
5
6
7
8
9
10
11
12public class API15RigidbodyPosition : MonoBehaviour { public Rigidbody playerRgd;//刚体 public int force;//力度 void Update() { //会由慢变快进行加速度一直到稳定 //力度如果太小会跑不起来 playerRgd.AddForce(Vector3.forward * force);//力的方向*力度 } }
通过AddTorque控制旋转
public void AddTorque (Vector3 torque, ForceMode mode= ForceMode.Force);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class ExampleClass : MonoBehaviour { public float torque; public Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } void FixedUpdate() { float turn = Input.GetAxis("Horizontal"); rb.AddTorque(transform.up * torque * turn);//参数是一个float } }
最后
以上就是痴情纸鹤最近收集整理的关于Unity API Rigidbody刚体的使用刚体组件中position和MovePosition控制移动通过刚体控制游戏物体旋转 通过AddForce控制运动 通过AddTorque控制旋转的全部内容,更多相关Unity内容请搜索靠谱客的其他文章。
发表评论 取消回复