将变换转换为RectTransform

时间:2017-06-12 22:27:02

标签: c# unity3d transform

在我的Unity项目中,我通过脚本动态创建对象。

var btnExit = new GameObject("Player " + ID + "'s Exit Button");
btnExit.transform.SetParent(UI.transform);

我需要设置对象的锚点和枢轴。我应该能够使用它的RectTransform组件,就像我在场景编辑器中创建对象时那样。

myRectTransform.anchorMin = new Vector2(1, 0);
myRectTransform.anchorMax = new Vector2(0, 1);
myRectTransform.pivot = new Vector2(0.5f, 0.5f);

但是对象的变换组件不是RectTransform,只是普通的Transform。所以我无法使用它来使用我需要的属性。

RectTransform myRectTransform = (RectTransform)btnExit.transform;

那么如何在我通过脚本而不是在场景编辑器中初始化的对象上正确使用RectTransform类的强大功能呢?

3 个答案:

答案 0 :(得分:3)

您无法将myArray[0].sort { $0.compare($1, options: .numeric) == .orderedAscending } myArray[1].sort { $0.compare($1, options: .numeric) == .orderedDescending } 投射到Transform。这是GetComponent的用途。在btnExit变量上使用GetComponent,您就可以从Button获取RectTransform

RectTransform

注意

您应该在调用RectTransform myRectTransform = btnExit.GetComponent<RectTransform>(); 之后执行此操作,因为如果父对象是UI对象,则SetParent将使Unity自动将SetParent附加到RectTransform变量帆布。您还可以使用btnExitAddComponent附加到该GameObject。

如果您不执行上述任何操作,由于RectTransform未附加到null,您将获得RectTransform

答案 1 :(得分:2)

RectTransform rectTransform = transform.GetComponent<RectTransform>();

RectTransform rectTransform = (transform as RectTransform);

RectTransform rectTransform = (RectTransform)transform;

只要您的对象具有RectTransform,这些都是从内置transform引用中获取RectTransform的有效方法。

答案 2 :(得分:0)

您可以将RectTransform组件直接添加到游戏对象,然后Transform组件将更改为Rect Transform

例如:

var btnExit = new GameObject("Player " + ID + "'s Exit Button");
btnExit.AddComponent<RectTransform>();

然后投射将起作用:

RectTransform myRectTransform = (RectTransform)btnExit.transform;

P.S。

不添加组件,上面的转换将引发错误

InvalidCastException: Cannot cast from source type to destination type.

但是添加了组件之后,强制转换工作正常。上面的代码在Unity 2018.2.5f1(64bit)中进行了测试。