Unity C#使用transform.position无法正确获取敌人位置且移动方向切换异常
问题根源分析
- 帧执行逻辑冲突:当前代码每帧会优先执行向左移动的逻辑,再判断是否追加向右移动。当x坐标大于-29时,每帧向左的3m/s位移和向右的3m/s位移完全抵消,敌人会卡在原地不动。
- 反向判断逻辑错误:当敌人x坐标掉到小于等于-29时,只会执行向左移动的逻辑,x值会越来越小,永远不可能再满足
x > -29的判断条件,自然不可能向右移动。 - 没有方向状态标记:你需要实现的是「到达指定位置后切换移动方向」,但当前代码是「叠加两个相反方向的位移」,逻辑完全不匹配。
修正方案
新增移动方向标记变量,根据位置判断切换方向,每帧只按照当前方向计算一次位移:
using UnityEngine; public class enem : MonoBehaviour { // 移动速度可在Inspector面板调整 public float moveSpeed = 3f; // 反向阈值位置 public float reversePosX = -29f; // 当前移动方向,默认向左为-1 private float _currentDir = -1f; void Update() { // 每帧只按照当前方向计算一次位移 transform.Translate(_currentDir * moveSpeed * Time.deltaTime, 0, 0); // 判断是否到达反向位置,切换方向 if (_currentDir == -1f && transform.position.x <= reversePosX) { _currentDir = 1f; } // 如果需要走到另一侧再反向可以添加对应判断逻辑 // else if (_currentDir == 1f && transform.position.x >= 右侧阈值) // { // _currentDir = -1f; // } } }
如果需要更高的位置精度,可以把位置判断改成差值判断,避免帧间隔导致的位置偏移:
if (_currentDir == -1f && Mathf.Abs(transform.position.x - reversePosX) < 0.05f)
内容的提问来源于stack exchange,提问作者lemons and giggles
相关产品推荐
相关产品推荐

