Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父级

Unity3D - Move UI object to center of screen while maintaining its parenting

我有一个 UI 图像,它是 RectTransform 容器的父级,它是 UI 面板的父级,它是 Canvas.

的父级

我希望能够在离开父级层次结构的同时将此 UI 图像移动到屏幕中央(即 canvas)。我的目标是将 UI 图像从中心移动到现在的位置。你能告诉我这段代码是什么样子吗?

要回答您原来的问题,您可以使用以下方法将 UICell 置于屏幕中央:

private RectTransform rect;

void Start() 
{
    rect = GetComponent<RectTransform>();
    rect.position = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, 10));
}

然后有几种方法可以将单元格移动到所需的目的地。一种方法是使用 Vector2.Lerp。然而,由于矩形变换父级层次结构的性质,定位会变得有点复杂 - 下面是您如何可以完成移动的示例。

float t;

void Update()
{
    t += Time.deltaTime;
    rect.localPosition = Vector2.Lerp(rect.localPosition, new Vector2(0, 0), t/3f);
}

最终起作用的是将 UI 图像的父级更改为 canvas,将 UI 图像移动到 canvas 的中间(即。屏幕),并恢复原来的 UI 图片父关系。从那里,我只需要动画到原来的本地位置。

var rectTransform = gameObject.GetComponent<RectTransform>();
var canvasRendererRectTransform = gameObject.transform.parent.parent.parent.GetComponent<RectTransform>();

rectTransform.SetParent(canvasRendererRectTransform);
rectTransform.localPosition = Camera.main.ScreenToViewportPoint(Vector3.one * 0.5f);
rectTransform.SetParent(gridRendererRectTransform);