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

Unity中如何获取未知层级下UI相对另一UI的位置?

Unity跨父物体UI相对位置计算与移动方案

核心结论

不用逐层遍历父物体计算位置,Unity已经帮你处理了所有层级变换,直接利用RectTransform的世界坐标属性和转换API即可解决问题。

获取第二个UI相对于第一个UI的局部位置

如果需要得到UI B在UI A局部空间中的位置(比如将A作为父物体时对齐B,或让A的子物体匹配B的位置),可以用以下函数:

using UnityEngine;

public static class UIUtility
{
    // 返回target在reference局部空间下的位置
    public static Vector3 GetRelativePosition(RectTransform target, RectTransform reference)
    {
        // 将target的世界位置转换为reference的局部空间坐标
        return reference.InverseTransformPoint(target.position);
    }
}

直接移动UI到目标位置(平滑插值)

如果你的需求是把装备内部图像平滑移动到货币UI的位置,直接对两者的世界坐标做插值即可,完全不受父物体和锚点差异的影响:

RectTransform innerImage = ...; // 装备内部图像的RectTransform
RectTransform currencyUI = ...; // 货币UI的RectTransform

// 平滑移动,5f为移动速度系数
innerImage.position = Vector3.Lerp(innerImage.position, currencyUI.position, Time.deltaTime * 5f);

关键知识点

  • RectTransform的position属性是世界空间坐标,Unity自动计算了所有父物体的变换、锚点等影响,无需手动遍历层级。
  • 锚点仅影响anchoredPosition(相对于锚点的位置),不会改变position的世界坐标含义。
  • InverseTransformPoint用于将世界坐标转换为当前物体的局部坐标,TransformPoint则相反(局部转世界)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:37:02