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

Unity中如何用C#编写玩家与敌人碰撞的if判断语句?

Unity中判断玩家与敌人碰撞的if语句写法

首先得明确:Unity的碰撞检测需要依赖组件,先给玩家和敌人的GameObject都加上Collider组件(比如BoxCollider、SphereCollider),并且其中至少一个要带Rigidbody组件(如果是触发碰撞,Rigidbody可以设为运动学,但普通碰撞不行)。

下面是两种常用的碰撞检测写法:

1. 普通物理碰撞(有物理交互)

用OnCollisionEnter方法,这个方法会在两个带Collider的物体发生物理碰撞时自动调用:

void OnCollisionEnter(Collision collision)
{
    // 用CompareTag判断碰撞对象是不是敌人(前提是给敌人GameObject设置了"Enemy"标签)
    if (collision.gameObject.CompareTag("Enemy"))
    {
        // 这里写碰撞后的逻辑,比如玩家扣血、播放碰撞动画
        Debug.Log("玩家和敌人撞在一起了!");
    }
}

提示:用CompareTag比直接写collision.gameObject.tag == "Enemy"更高效,还能避免空引用报错

2. 触发碰撞(无物理交互,仅检测范围)

如果不需要物理碰撞的推挤效果,可以把其中一个Collider的Is Trigger勾选上,然后用OnTriggerEnter方法:

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.CompareTag("Enemy"))
    {
        // 这里写触发后的逻辑,比如触发敌人的警戒状态
        Debug.Log("玩家进入敌人的触发范围了!");
    }
}

关键注意点

  • 一定要给敌人的GameObject设置正确的标签:在Unity编辑器中选中敌人,在Inspector面板的Tag下拉框里选择或新建"Enemy"标签
  • 脚本要挂在玩家或者敌人的GameObject上,才能触发对应的碰撞回调

内容的提问来源于stack exchange,提问作者jknnkla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:05:12