RectTransform不会定位

时间:2018-01-14 16:06:40

标签: c# unity3d unity-ui

我尝试移动RectTransform,在单击UI对象时触发。当我在Update,LateUpdate或Animation中设置位置时,RectTransform按预期移动。当我尝试设置position / anchoredPosition / etc.在OnClick回调中,没有任何反应(当我查询它时,变量没有改变)。

我有以下游戏板层次结构:

  

屏幕空间中的画布叠加模式(全尺寸)

     
      
  • Container:RectTransform对象
  •   
    •   
    • MoveObj:带有RectTransforms和canvas渲染器的游戏对象
    •   
  •   

Layout

Container Rect:

Container Rect

MoveObj 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?

中有效

1 个答案:

答案 0 :(得分:1)

我找到了解决方法,但我不明白。

动画始终处于空闲状态,没有动作,因为我从未设置过触发器。下一个州确实有动议,改变了立场。我从动画图中删除了所有状态,现在可以通过所有常规方式设置位置。

我很困惑为什么没有动作的状态仍然会将位置重置为默认位置,但是...继续......我猜。