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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:00:03