Unity 2D中如何实现NPC在玩家靠近时停止移动?
NPC靠近停止移动问题修复指南
核心问题:触发函数拼写错误
你代码里的OnTirggerEnter2D和OnTirggerExit2D存在拼写错误,正确函数名是OnTriggerEnter2D和OnTriggerExit2D(注意是Trigger,不是Tirgger)。Unity的消息回调函数对名称匹配要求严格,拼写错误会导致函数完全不执行,这就是NPC检测不到玩家的根本原因。
必要设置检查
- Rigidbody2D组件:NPC和玩家对象必须至少有一方挂载
Rigidbody2D,且Body Type不能设为Static。建议玩家设为Dynamic,NPC若需移动也设为Dynamic,静止NPC可设为Kinematic。 - 触发器与碰撞器:确认NPC的2D碰撞器已勾选
Is Trigger,玩家的碰撞器无需勾选(除非有其他需求)。 - 图层碰撞矩阵:在
Edit > Project Settings > Physics 2D中,检查NPC与玩家所在图层的碰撞规则是否启用,触发器检测受此矩阵限制。
修正后的代码示例
建议用标签代替物体名称判断(避免改名后逻辑失效),同时优化移动控制逻辑:
public bool playerIsClose; public bool isWalking; // 假设你已定义此变量控制移动 void Update() { // 仅在玩家不在附近且处于行走状态时执行移动 if (!playerIsClose && isWalking) { // 写入你的NPC移动逻辑 } } private void OnTriggerEnter2D(Collider2D collider) { if (collider.CompareTag("Player")) { playerIsClose = true; isWalking = false; // 直接停止移动 } } private void OnTriggerExit2D(Collider2D collider) { if (collider.CompareTag("Player")) { playerIsClose = false; isWalking = true; // 恢复移动 } }
内容的提问来源于stack exchange,提问作者Henzio
相关产品推荐
相关产品推荐

