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);
我有一个 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);