所以,我在团结中使用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;对于比例值。
答案 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并不喜欢成为这种类型的列表列表,并且它在某种程度上关心它是否在集合中。去图!