Unity UI RectTransform 位置对我来说没有意义

5

所以,我在Unity中使用C#来使用Unity UI放置一些对象,我有一个对象,在脚本中的位置与场景中的位置不同。我在一个函数中有以下代码:

using UnityEngine;
using System.Collections;

public class SeedChecker : MonoBehaviour {

    Vector3 lockedPos;
    RectTransform tran;

    // Use this for initialization
    void Awake () {
        tran = GetComponent<RectTransform>();
    }

    public void LockPos(Vector3 pos) {
        tran.localPosition = pos;
        lockedPos = pos;
        print (tran.localPosition);
    }

}

作为一个例子,这段代码打印出它的x位置是-60——这正是我要找的正确数字——屏幕中央左侧60个像素。但是,当我在检查器和场景中查看时,x位置是0——对象恰好位于屏幕中央。这造成了一种相当令人沮丧的情况,我也在这里谈到过。这很令人沮丧,因为它说它正在获取正确的位置,但是当我将这个正确的位置分配给对象时,它会去到我认为是错误的位置。这是对RectTransforms中localpositions工作方式的误解吗?我的对象是一些对象的子级,但它们都被归零到屏幕中心,并且缩放值为“1”。

1
这段代码运行良好,我尝试了一下并获得了我发送的锁定位置。 你是否已经附加了一个带有锚点的画布? - joreldraw
2个回答

8

我找到问题了!我之前使用了anchoredposition,但问题仍然存在。不过,这个想法不错! - Catlard

2
解决了!原来我的RectTransforms行为异常,因为我将它们存储在一个我编写的用于组织它们的类EventRow中。EventRow甚至没有从MonoBehavior继承,但是将RectTransforms存储在该对象内部的System.Collections.Generic列表中会导致它们定位异常。所以,当我开始将它们存储为其他Rect Transforms的子级而不是在我的EventRow类中跟踪它们时,它就正常工作了!奇怪,不是吗?你见过这样的情况吗?我的EventRow类的原始目的是允许我拥有事件列表的列表 - 事件网格。我猜测RectTransform并不喜欢成为这种类型的列表列表,并且它在某种程度上关心它是否在集合中。去理解吧!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接