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