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

Cat*_*ard 4 c# user-interface transform unity-game-engine

所以,我在团结中使用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);
    }

}
Run Code Online (Sandbox Code Playgroud)

例如,此代码打印其x位置为-60 - 这是我正在寻找的正确数字 - 屏幕中间左侧60个像素.但是,当我查看检查器和场景时,x位置为0 - 并且对象正好位于屏幕中间.这是一个相当令人沮丧的情况,我在这里谈过这个问题.这令人沮丧,因为它说它正在获得正确的位置,但是当我将这个正确的位置分配给对象时,它会转到我认为不正确的位置.这是对RectTransforms中localposition如何工作的误解吗?我的对象是一些对象的子对象,但是它们全部归零到屏幕的中心,并且对于缩放值具有"1".

小智 6

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

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


Cat*_*ard 2

解决了!事实证明,我的 RectTransform 表现得很奇怪,因为我将它们存储在一个名为 EventRow 的类中,这个类是我为了保持它们的组织性而编写的。事件行甚至没有继承自 MonoBehavior,但将 RectTransforms 存储在该对象内的 System.Collections.Generic 列表中导致它们的位置奇怪。因此,当我开始将它们存储为其他矩形变换的子级,而不是在我的 EventRow 类中跟踪它们时,它工作得很好!奇怪,不是吗?你见过这样的事情吗?我的 EventRow 类的最初目的是让我拥有一个事件列表列表——一个事件网格。我的猜测是 RectTransform 不喜欢成为这种类型的列表的列表,并且它以某种方式关心它是否在集合中。去搞清楚!