Unity C#实现敌人AI往返移动代码无法正常运行如何解决
问题定位
你这段巡逻代码跑不通是几个基础语法、逻辑错误叠在一起导致的,逐个列:
- 笔误:折返判断里写的
transform.postion拼写错误,正确写法是transform.position,这个错误会直接让脚本编译失败,连运行都做不到。 - 语法不合法:Unity的
Vector3是三维向量类型,没有重载>、<这类大小比较运算符,你写的transform.position > end || transform.position < start本身就是无效代码,编译阶段就会报错。 - 变量用混了+移动计算完全错误:你把存移动方向的
startOrientation直接赋值给了transform.localScale(这是控制物体缩放的参数),后续移动时写的new Vector3(startOrientation * speed, 0)逻辑完全不对——startOrientation本身是Vector3,和speed相乘后还是三维向量,你把整个向量塞到Vector3构造函数的x参数位,y、z强制设为0,移动方向从根上就错了。 - 速度没做帧率适配:
Update是每帧调用一次,你直接拿speed乘方向算位移,没乘Time.deltaTime,会导致移动速度完全跟着设备帧率走,高帧率设备上AI移速飞起来,低帧率设备上AI挪得慢。 - 折返判断逻辑太脆:就算修好了前面的语法错误,直接拿坐标值和起止点比大小的写法,很容易因为单帧移动的步长跨过端点,导致AI在端点附近反复横跳、卡着不动。
修复后可直接用的代码
我把混乱的变量逻辑理清楚了,用距离检测做折返触发,修了所有上面的问题,还加了方便调试的路径绘制:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyMoveAround : MonoBehaviour { [Header("巡逻端点")] public Vector3 start; public Vector3 end; [Header("移动参数")] public float speed = 3f; public int moveMode; // 预留字段,后续扩展巡逻模式用 private Vector3 _currentMoveDir; // 端点判定阈值,避免单帧步长跨过端点导致的抖动 private const float ReachThreshold = 0.1f; void Start() { // 初始位置放到起点 transform.position = start; // 初始移动方向指向终点,归一化保证速度不受两点距离影响 _currentMoveDir = (end - start).normalized; } void Update() { // 帧率无关的匀速移动 transform.position += _currentMoveDir * speed * Time.deltaTime; // 抵达终点就往起点走 if (Vector3.Distance(transform.position, end) < ReachThreshold) { _currentMoveDir = (start - end).normalized; } // 抵达起点就往终点走 if (Vector3.Distance(transform.position, start) < ReachThreshold) { _currentMoveDir = (end - start).normalized; } } // 调试用:选中物体时在Scene视图画巡逻路径 private void OnDrawGizmosSelected() { Gizmos.color = Color.red; Gizmos.DrawLine(start, end); Gizmos.DrawWireSphere(start, 0.2f); Gizmos.DrawWireSphere(end, 0.2f); } }
使用注意
- 脚本挂到敌人预制体/场景物体上后,直接在Inspector面板赋值
start、end两个世界坐标点即可,不需要手动配置方向。 speed参数改成了浮点型,支持小数配置,比原来的int类型更灵活,按需调整数值就行。- 如果你需要控制物体朝向缩放,单独加一个public的Vector3字段在Start里赋值给
transform.localScale就行,别和移动方向的变量混着用。 - 加的Gizmos绘制逻辑不会打包进正式版本,只在编辑器里生效,方便你调整巡逻点位置。
内容的提问来源于stack exchange,提问作者RaptoRR
相关产品推荐
相关产品推荐

