我尝试移动RectTransform,在单击UI对象时触发。当我在Update,LateUpdate或Animation中设置位置时,RectTransform按预期移动。当我尝试设置position / anchoredPosition / etc.在OnClick回调中,没有任何反应(当我查询它时,变量没有改变)。
我有以下游戏板层次结构:
屏幕空间中的画布叠加模式(全尺寸)
- Container:RectTransform对象
- MoveObj:带有RectTransforms和canvas渲染器的游戏对象
Container Rect:
MoveObj Rect:
我试图将MoveObjs移动到根画布的中心,同时将容器保持为父级。我尝试过设置position,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);
MoveObjs是从预制件实例化的:
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属性设置动画,则对象将完全按照我的要求移动。
我在代码中设置的唯一具有效果的属性是,如果我设置了枢轴,它确实会移动。现在这一切都很好,但我发现的大部分信息都表明,移动这个位置至少应该做点什么,动画的成功让我觉得这是正确的方法。在我生气之前,为什么定位没有在事件处理程序中正确设置,但在Update?
中有效答案 0 :(得分:1)
我找到了解决方法,但我不明白。
动画始终处于空闲状态,没有动作,因为我从未设置过触发器。下一个州确实有动议,改变了立场。我从动画图中删除了所有状态,现在可以通过所有常规方式设置位置。
我很困惑为什么没有动作的状态仍然会将位置重置为默认位置,但是...继续......我猜。