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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:22:15