我正在尝试移动一个 RectTransform,在单击 UI 对象时触发。当我在 Update、LateUpdate 或 Animation 中设置位置时,RectTransform 会按预期移动。当我尝试设置位置/锚定位置/等时。在 OnClick 回调中,什么都没有发生(当我查询它时变量没有改变)。
我有以下游戏板层次结构:
屏幕空间叠加模式中的画布(全尺寸)
- 容器:RectTransform 对象
- MoveObj:带有 RectTransforms 和画布渲染器的游戏对象
容器矩形:
MoveObj 矩形:
我正在尝试将 MoveObjs 移动到根画布的中心,同时将容器保持为父级。我试过设置位置、localPosition、anchoredPosition,但它们什么也没做。设置该属性后,当我查询它时,值没有改变。
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log($"{this.gameObject.name} - OnPointerClick - state:{this._state}");
(transform as RectTransform).position = offsetMaxTarget; // :(
(transform as RectTransform).localPosition = offsetMaxTarget; // :(
(transform as RectTransform).offsetMin = offsetMinTarget; // :(
(transform as RectTransform).offsetMax = offsetMaxTarget; // :(
(transform as RectTransform).anchoredPosition = targetPosition; // :(
}
SetInsetAndSizeFromParentEdge 确实改变了矩形的大小,但根本不移动位置。
(transform as RectTransform).SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 450.0f, 150.0f);
MoveObj 是从预制件中实例化的:
GameObject newMoveObj = Instantiate(MoveObjPrefab,
new Vector3(Container.transform.position.x, Container.transform.position.y, 2),
Quaternion.identity,
Container.transform);
newMoveObj.transform.localPosition = new Vector3(0, 0, 2);
如果我使用 Animator,并为 anchoredPosition 和 position 属性设置动画,对象会完全按照我的意愿移动。
我在代码中设置的唯一生效的属性是,如果我设置了枢轴,它确实会移动。现在一切都很好,但是我发现的大多数信息都说移动位置至少应该做一些事情,而动画的成功让我认为这是正确的方法。在我发疯之前,为什么在事件处理程序中定位设置不正确,但在更新中有效?