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

如何在2D精灵中用AI实现敌人追踪玩家?求简易BP方案

敌人向玩家移动的简易蓝图解决方案

以下是针对你场景的UE蓝图实现方案,适配方形玩家、圆形/三角形敌人的移动需求:

核心组件准备

  • 敌人蓝图建议使用Character类(自带CharacterMovement组件,简化移动逻辑);若用普通Actor,需手动添加Collision Component和Movement Component
  • 确保敌人和玩家的碰撞预设正确设置(比如敌人能检测到玩家,避免碰撞穿透)

具体蓝图步骤

1. 存储玩家引用(避免重复调用)

在敌人蓝图的事件图表中:

  • 拖入BeginPlay节点
  • 连接Get Player Character节点,将输出赋值给一个自定义变量PlayerRef(类型设为Character,勾选"Editable"方便调试)

2. 实现持续追踪移动

将移动逻辑放在Tick事件中,确保敌人实时向玩家移动:

  • 拖入Tick节点,添加分支判断PlayerRef是否有效(避免空引用报错)
  • 若有效,依次拖入以下节点:
    • Get Actor Location(敌人自身位置)
    • Get Actor Location(从PlayerRef调用,获取玩家位置)
    • Vector Subtract:将玩家位置作为输入A,敌人位置作为输入B,得到指向玩家的向量
    • Normalize:对上述向量做归一化处理(确保移动速度稳定)
    • Add Movement Input:将归一化后的向量作为输入,Scale Value设为1.0,勾选Force Sub Delta让移动更平滑

3. 可选优化:范围触发移动

如果需要敌人仅在玩家进入感知范围时才移动:

  • 添加Vector Length节点,计算敌人与玩家的距离
  • 在分支判断中增加条件:距离小于你设定的感知半径(比如500.0),再执行后续移动逻辑

普通Actor类敌人的替代方案

如果敌人是普通Actor而非Character:

  • 添加ProjectileMovement组件,在BeginPlay时设置Initial Speed和Max Speed
  • 在Tick中用Find Look At Rotation获取朝向玩家的旋转,调用Set Actor Rotation同步朝向
  • 或者用VInterp To节点实现平滑移动:将敌人当前位置、玩家位置、Delta Time、移动速度作为输入,输出结果连接到Set Actor Location

简化蓝图流程示例

BeginPlay → Get Player Character → 赋值给PlayerRef
Tick → 分支(PlayerRef有效)→ 玩家位置-敌人位置 → 归一化向量 → Add Movement Input

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:45:36