Unity UI RectTransform 位置对我来说没有意义
Unity UI RectTransform position does not make sense to me
所以,我在 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——并且对象正好位于屏幕中间。这造成了一个相当令人沮丧的情况,我也遇到过 talked about here。这很令人沮丧,因为它说它正在获得正确的位置,但是当我将这个正确的位置分配给对象时,它会转到我认为不正确的位置。这是对局部位置在 RectTransforms 中的工作方式的误解吗?我的对象是一些对象的子对象,但所有对象都归零到屏幕中心,并且比例值为“1”。
据我所知,您应该使用 anchoredPosition
。有关可能的属性,请参阅文档:
http://docs.unity3d.com/ScriptReference/RectTransform.html
我尽量远离继承的那些,因为如果你不完全理解 RectTransform
的工作原理,它们会产生意想不到的结果。
解决了!事实证明,我的 RectTransforms 表现得很奇怪,因为我将它们存储在我写的 class 中以保持它们的组织性,称为 EventRow。事件行甚至没有从 MonoBehavior 继承,但是将 RectTransforms 存储在该对象内的 System.Collections.Generic 列表中导致它们的位置很奇怪。因此,当我开始将它们存储为其他 Rect Transform 的子级时,而不是在我的 EventRow class 中跟踪它们时,它工作得很好!奇怪,不是吗?你见过这样的事吗?我的 EventRow class 的最初目的是让我有一个事件列表列表——一个事件网格。我的猜测是 RectTransform 不喜欢成为此类列表的列表,并且它以某种方式关心它是否在集合中。去图吧!
所以,我在 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——并且对象正好位于屏幕中间。这造成了一个相当令人沮丧的情况,我也遇到过 talked about here。这很令人沮丧,因为它说它正在获得正确的位置,但是当我将这个正确的位置分配给对象时,它会转到我认为不正确的位置。这是对局部位置在 RectTransforms 中的工作方式的误解吗?我的对象是一些对象的子对象,但所有对象都归零到屏幕中心,并且比例值为“1”。
据我所知,您应该使用 anchoredPosition
。有关可能的属性,请参阅文档:
http://docs.unity3d.com/ScriptReference/RectTransform.html
我尽量远离继承的那些,因为如果你不完全理解 RectTransform
的工作原理,它们会产生意想不到的结果。
解决了!事实证明,我的 RectTransforms 表现得很奇怪,因为我将它们存储在我写的 class 中以保持它们的组织性,称为 EventRow。事件行甚至没有从 MonoBehavior 继承,但是将 RectTransforms 存储在该对象内的 System.Collections.Generic 列表中导致它们的位置很奇怪。因此,当我开始将它们存储为其他 Rect Transform 的子级时,而不是在我的 EventRow class 中跟踪它们时,它工作得很好!奇怪,不是吗?你见过这样的事吗?我的 EventRow class 的最初目的是让我有一个事件列表列表——一个事件网格。我的猜测是 RectTransform 不喜欢成为此类列表的列表,并且它以某种方式关心它是否在集合中。去图吧!