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

Unity中多NPC触发目标更新仅生效于单个NPC的问题求助

解决方案

问题的核心是你在DestinationsManager的Start()方法中,通过GameObject.FindGameObjectWithTag("npc")只获取到了第一个带有npc标签的NPC实例,导致所有触发事件都只会修改这个NPC的状态。要让每个触发的NPC更新自身的npcAtDest,只需要在触发时直接从碰撞对象上获取对应的NPCNav组件即可。

修改后的DestinationsManager代码

public class DestinationsManager : MonoBehaviour
{
    public int destID;

    void OnTriggerEnter(Collider hit)
    {
        if(hit.CompareTag("npc"))
        {
            // 直接从触发的碰撞体上获取对应的NPCNav组件
            NPCNav currentNPC = hit.GetComponent<NPCNav>();
            if(currentNPC != null)
            {
                currentNPC.SetDestNPC(destID);
            }
        }
    }
}

关键改动说明

  • 移除了全局的navInstance变量和Start()方法中的初始化逻辑,避免固定绑定单个NPC
  • 在OnTriggerEnter中,通过hit.GetComponent<NPCNav>()获取当前触发碰撞的NPC的导航组件
  • 增加了空值判断,防止没有挂载NPCNav组件的对象触发时出现空引用错误

额外检查事项

  • 确保每个NPC对象都正确挂载了NPCNav组件,并且在编辑器中设置了唯一的npcID
  • 每个目标对象的DestinationsManager组件都正确设置了对应的destID
  • 确认所有NPC对象都添加了Collider组件(并勾选Is Trigger),且NavMeshAgent配置正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:36:25