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

Unity中僵尸GameObject朝向塔嵌套攻击点的实现问题求助

解决Unity中僵尸朝向塔嵌套攻击点的方向偏差问题

看起来你踩了一个很容易忽略的坐标计算坑——这正是方向出现莫名偏差的核心原因!先帮你拆解问题,再给出完整的修正方案:

你的代码问题根源

你之前的方向计算逻辑是:

Vector2 direction = centralTower.transform.position + centralTower.transform.parent.transform.position - gameObject.transform.position;

这里的关键错误是:centralTower.transform.position本身已经是世界空间下的坐标,它自动包含了父物体(塔)的位置偏移。你额外叠加一次父物体的位置,等于把目标位置错误计算成了「塔的世界位置 + 攻击点的世界位置」,完全偏离了实际的攻击点坐标,自然会出现无规律的方向偏差。

修正后的完整实现

下面是正确的朝向+移动逻辑,包含所有细节处理:

// 拖拽赋值:瞄准的塔内嵌套攻击点
public Transform centralTower;
// 僵尸移动速度,可在Inspector面板调整
public float moveSpeed = 2f;

void Update()
{
    if (centralTower == null) return;

    // 1. 获取攻击点的真实世界位置(直接用子物体的position即可,无需叠加父物体)
    Vector2 targetWorldPos = centralTower.transform.position;
    // 2. 计算僵尸到攻击点的方向向量
    Vector2 direction = targetWorldPos - (Vector2)transform.position;
    // 3. 归一化方向向量,避免距离远近影响移动速度
    direction.Normalize();

    // 4. 让僵尸朝向攻击点(根据Sprite默认朝向调整:若默认朝右则用transform.right,朝上则用transform.up)
    transform.up = direction;

    // 5. 平滑移动僵尸(必须乘以Time.deltaTime,保证帧率无关的稳定移动)
    transform.position += (Vector3)direction * moveSpeed * Time.deltaTime;
}

额外调试技巧

如果还是存在细微偏差,可以添加Gizmos可视化,在Scene视图中直观排查坐标问题:

void OnDrawGizmos()
{
    if (centralTower != null)
    {
        // 用红色球体标记攻击点的真实位置
        Gizmos.color = Color.red;
        Gizmos.DrawSphere(centralTower.transform.position, 0.1f);
        // 用蓝色线条绘制僵尸到攻击点的方向线
        Gizmos.color = Color.blue;
        Gizmos.DrawLine(transform.position, centralTower.transform.position);
    }
}

可能的其他偏差诱因

  • 检查僵尸Sprite的默认朝向:如果你的Sprite默认是朝右的,要把transform.up改成transform.right;
  • 确认攻击点的坐标属性:在Inspector中查看攻击点的Position,确保你没有误把本地坐标(Local Position)当成世界坐标来使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:47:16