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
相关产品推荐
相关产品推荐

