在我的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类的强大功能呢?
答案 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
变量帆布。您还可以使用btnExit
将AddComponent
附加到该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)中进行了测试。