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

Unity中如何根据父对象旋转计算子对象的全局世界坐标

问题根因

你之前的所有方案偏差都来自接口误用和基础概念错误:

  • 直接读取planet.transform.localPosition只能拿到父物体本地坐标系下的偏移值,本身不包含父物体旋转带来的全局坐标映射,只取X值自然算不对全局Y坐标。
  • 手动三角函数计算的错误有两点:一是transform.rotation是四元数类型,直接访问.z拿到的是四元数分量,不是你以为的Z轴旋转角度;二是没有做角度到弧度的转换,旋转轴基准也没对齐,误差必然很大。
  • TransformPoint接口调用错误:该接口的入参需要传入当前物体本地坐标系下的点坐标,你传入的planet.transform.position是行星的全局坐标,相当于把全局坐标二次转换,结果完全偏离是正常的。
  • 沿transform.up移动的方案错在坐标轴映射:你设置的是X轴本地偏移,默认对应的是父物体的transform.right方向,不是up方向。
正确实现方案

方案1:原生API(推荐,零计算误差)

直接用父物体ring的TransformPoint接口,传入行星相对于ring的本地偏移即可,不需要自己处理旋转、父物体全局位置的叠加逻辑:

// 替换成你实际给行星设置的本地X轴偏移值,也就是轨道半径
float localOffsetX = 10f;
// 直接得到行星全局坐标:父物体旋转0度时行星在(10,0,0)(朝右)
Vector3 planetWorldPos = ring.transform.TransformPoint(new Vector3(localOffsetX, 0, 0));

如果需要匹配你说的「父物体旋转为0时子对象坐标为(0,10,0)」的效果,只需要把本地偏移改成new Vector3(0, localOffsetX, 0)即可,对应沿父物体本地Y轴偏移。

方案2:手动三角函数计算

如果需要脱离Unity组件自行计算,注意三个规则:取旋转值要用eulerAngles、角度要转弧度、2D场景下旋转正方向为顺时针,代码如下:

// 父物体ring的全局位置
Vector2 ringPos = ring.transform.position;
// 轨道半径,即行星本地X轴偏移值
float orbitRadius = 10f;
// 取父物体Z轴旋转角度转弧度
float rotateRad = ring.transform.eulerAngles.z * Mathf.Deg2Rad;

// --- 两种初始朝向二选一 ---
// 1. 默认情况:父物体旋转0度时行星在(10,0,0)(朝右,对应本地X轴正方向)
float posX = ringPos.x + orbitRadius * Mathf.Cos(rotateRad);
float posY = ringPos.y + orbitRadius * Mathf.Sin(rotateRad);

// 2. 匹配你的需求:父物体旋转0度时行星在(0,10,0)(朝上)
// float posX = ringPos.x + orbitRadius * Mathf.Sin(rotateRad);
// float posY = ringPos.y + orbitRadius * Mathf.Cos(rotateRad);

Vector2 planetWorldPos = new Vector2(posX, posY);

按你给出的示例验证:父物体在原点、轨道半径10、旋转45度时,选择第二种朝向计算得到的坐标约为(7.07, 7.07),符合预期。

方案3:方向向量叠加

和你之前尝试的移动物体逻辑一致,只要对齐坐标轴方向即可:

float localOffsetX = 10f;
// 本地X轴偏移对应父物体的right方向,叠加父物体全局位置就是全局坐标:0度朝右
Vector3 planetWorldPos = ring.transform.position + ring.transform.right * localOffsetX;
// 要0度朝上的话替换为up方向即可
// Vector3 planetWorldPos = ring.transform.position + ring.transform.up * localOffsetX;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:03:16