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

Unity触发器未检测物体进入/退出问题求助

解决Unity触发器OnTriggerEnter2D/Exit2D不触发问题

针对你的场景(挂载脚本的物体已将Circle Collider设为Trigger,目标物体带BoxCollider2D),以下是排查和修复步骤:

  • 必须添加Rigidbody2D组件:Unity 2D触发器事件要求至少一方带有Rigidbody2D组件:

    • 若给敌方物体添加,需将Rigidbody2D的Body Type设为Dynamic(不能是Kinematic,除非手动控制运动并启用Use Full Kinematic Contacts)
    • 若给塔(挂载脚本的物体)添加,可设为Kinematic,但必须勾选Rigidbody2D的Use Full Kinematic Contacts选项
  • 检查Layer碰撞矩阵:打开Edit > Project Settings > Physics2D,确认塔所在Layer与敌方物体的Layer在碰撞矩阵中是相互勾选允许碰撞的,禁用的Layer组合不会触发触发器事件

  • 确认碰撞体设置:

    • 塔的Circle Collider2D确实勾选Is Trigger,且大小、位置覆盖有效触发区域
    • 敌方的BoxCollider2D不要勾选Is Trigger(两个Trigger之间不会触发OnTrigger事件),同时确保碰撞体大小、位置正确包裹敌方物体
  • 验证脚本挂载与方法签名:

    • 确认脚本正确挂载在带有Circle Collider2D的塔物体上
    • 检查OnTriggerEnter2D和OnTriggerExit2D方法签名:必须为private void OnTriggerEnter2D(Collider2D col),大小写正确,参数类型为Collider2D(而非Collider)

代码优化建议(可选)

当前Update方法中重复执行颜色设置会造成不必要的性能消耗,且目标移除后不会恢复颜色,可修改为仅在目标列表变化时处理高亮:

using System.Collections.Generic;
using UnityEngine;

public class TowerTargeting : MonoBehaviour
{
    public List<GameObject> targets = new List<GameObject>();
    private GameObject lastHighlightedTarget;

    private void OnTriggerEnter2D(Collider2D col)
    {
        Debug.Log("Enemy Found");
        targets.Add(col.gameObject);
        UpdateTargetHighlight();
    }

    private void OnTriggerExit2D(Collider2D col)
    {
        Debug.Log("Enemy Lost");
        targets.Remove(col.gameObject);
        
        if (col.gameObject == lastHighlightedTarget)
        {
            col.gameObject.GetComponent<SpriteRenderer>().color = Color.white;
            lastHighlightedTarget = null;
        }
        UpdateTargetHighlight();
    }

    private void UpdateTargetHighlight()
    {
        if (lastHighlightedTarget != null)
        {
            lastHighlightedTarget.GetComponent<SpriteRenderer>().color = Color.white;
        }

        if (targets.Count > 0)
        {
            lastHighlightedTarget = targets[0];
            lastHighlightedTarget.GetComponent<SpriteRenderer>().color = Color.blue;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:12:18