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

时间:2015-05-07 12:01:20

标签: c# user-interface unity3d transform

所以,我在团结中使用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 - 并且对象正好位于屏幕中间。这使得一个相当令人沮丧的情况,我也talked about here。令人沮丧的是因为它说它获得了正确的位置,但是当我将这个正确的位置分配给对象时,它会转到我认为不正确的位置。这是对RectTransforms中localposition如何工作的误解吗?我的对象是一些物体的孩子,但是所有物体都被归零到屏幕的中心,并且具有&#34; 1&#34;对于比例值。

2 个答案:

答案 0 :(得分:6)

据我所知,你应该使用anchoredPosition。有关可能的属性,请参阅文档: http://docs.unity3d.com/ScriptReference/RectTransform.html

我试图远离继承的,因为如果你不完全理解RectTransform是如何工作的,它们会产生意想不到的结果。

答案 1 :(得分:2)

解决了!事实证明我的RectTransforms表现得很奇怪,因为我将它们存储在我写的一个类中,以保持它们的组织,称为EventRow。事件行甚至没有从MonoBehavior继承,但是将RectTransforms存储在该对象内的System.Collections.Generic列表中会导致它们奇怪地定位。所以,当我开始将它们存储为其他Rect Transforms的子项时,而不是在我的EventRow类中跟踪它们,它工作得很好!奇怪,不是吗?你见过这样的东西吗?我的EventRow类的最初目的是让我有一个事件列表列表 - 一个事件网格。我的猜测是,RectTransform并不喜欢成为这种类型的列表列表,并且它在某种程度上关心它是否在集合中。去图!