Unity中如何让移动的GameObject碰撞到collider时自动旋转180度
要实现碰撞后自动180度转向反向移动,首先需要确保你的动物GameObject满足碰撞检测的基础条件:
- 物体自身挂载了非Kinematic状态的Rigidbody组件
- 物体和被碰撞的对象都带有Collider组件
修改后完整代码
using UnityEngine; using System.Collections; public class Locomotion : MonoBehaviour { // 移动速度,可直接在Inspector面板调整 public float moveSpeed = 5f; // 转向冷却,避免碰撞后短时间内反复触发转向 private bool canRotate = true; public float rotateCd = 0.2f; void Update() { // 沿物体自身正前方持续移动 transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed); } // 普通碰撞器触发逻辑 private void OnCollisionEnter(Collision collisionInfo) { if (!canRotate) return; // 绕Y轴旋转180度,直接反转前进方向 transform.Rotate(Vector3.up, 180f); StartCoroutine(RotateCoolDown()); } // 如果用Trigger触发型碰撞器,注释上面的OnCollisionEnter,取消注释下方方法即可 // private void OnTriggerEnter(Collider other) // { // if (!canRotate) return; // transform.Rotate(Vector3.up, 180f); // StartCoroutine(RotateCoolDown()); // } IEnumerator RotateCoolDown() { canRotate = false; yield return new WaitForSeconds(rotateCd); canRotate = true; } }
注意事项
- 如果不需要重力效果,可以在Rigidbody组件中取消勾选
Use Gravity,避免动物自动下落 - 如果使用Trigger模式,只需在动物或者被碰撞的边界其中一方的Collider上勾选
Is Trigger即可 - 代码中的移动速度、转向冷却时间都可以根据实际需求在Inspector面板自行调整
内容的提问来源于stack exchange,提问作者PassionateCoder257
相关产品推荐
相关产品推荐

