You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:36:06