在我的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,而是普通变换。所以我不能强制转换它来使用我需要的那些属性。
RectTransform myRectTransform = (RectTransform)btnExit.transform;那么,如何在通过脚本而不是在场景编辑器中初始化的对象上正确使用RectTransform类的功能呢?
发布于 2017-06-13 06:31:40
不能将Transform转换为RectTransform。这就是GetComponent的用途。在btnExit变量上使用GetComponent,您将能够从按钮获得RectTransform。
RectTransform myRectTransform = btnExit.GetComponent<RectTransform>();备注
您应该仅在调用SetParent之后执行此操作,因为如果父对象是UI对象(如画布),SetParent将使Unity自动将RectTransform附加到btnExit变量。您还可以使用AddComponent将RectTransform附加到该GameObject。
如果你不这样做,你会得到null,因为RectTransform没有连接到Button。
发布于 2018-07-21 02:11:20
RectTransform rectTransform = transform.GetComponent<RectTransform>();
RectTransform rectTransform = (transform as RectTransform);
RectTransform rectTransform = (RectTransform)transform;只要您的对象有一个RectTransform,这些都是从内置transform引用中获取RectTransform的有效方法。
发布于 2018-09-28 17:28:19
您可以直接在游戏对象中添加RectTransform组件,Transform组件将变为Rect Transform。
例如:
var btnExit = new GameObject("Player " + ID + "'s Exit Button");
btnExit.AddComponent<RectTransform>();然后演员们就可以工作了:
RectTransform myRectTransform = (RectTransform)btnExit.transform;附注:
如果不添加组件,上面的强制转换将抛出错误
InvalidCastException: Cannot cast from source type to destination type.但是添加了组件后,造型就可以正常工作了。以上代码在Unity 2018.2.5f1 (64位)中进行了测试。
https://stackoverflow.com/questions/44509636
复制相似问题