实例化后Unity3D C#面板定位

Csh*_*est 4 c# transform panel rect unity-game-engine

我正在实例化一个GO,它有一个面板组件(RectTransform)作为场景中存在的画布的子代:

_heroSelectUI = (GameObject)Instantiate (_heroSelectUIPrefab, GameObject.Find ("Canvas").GetComponent<Transform>());
Run Code Online (Sandbox Code Playgroud)

创建它时,它获得以下值:

面板值

"左","上","右"和"下"得到一些不需要的值(可能是由于现有的画布似乎具有相同的值).

面板预制值为0,如何在实例化后将它们设置为0?我找不到RectTransform的正确变量.

Hel*_*ium 6

根据文件

对于拉伸Rect变换,使用offsetMin和offsetMax属性设置位置可能更简单.该offsetMin属性指定相对于左下角锚矩形的左下角的角落.该offsetMax属性指定相对于右上角锚矩形的右上角的角落.

尝试做如下:

RectTransform rt = _heroSelectUI.GetComponent<RectTransform>();
rt.offsetMin = rt.offsetMax = Vector2.zero ;
Run Code Online (Sandbox Code Playgroud)

另外,根据文档,您可以在设置父级时尝试执行此操作:

使用Instantiate方法将UI元素的预制件正常实例化.设置实例化UI元素的父元素时,建议使用Transform.SetParent方法并将worldPositionStays参数设置为false.

_heroSelectUI = (GameObject)Instantiate (_heroSelectUIPrefab, GameObject.Find ("Canvas").GetComponent<RectTransform>(), false);
Run Code Online (Sandbox Code Playgroud)

要么 :

_heroSelectUI = (GameObject)Instantiate (_heroSelectUIPrefab );
_heroSelectUI.GetComponent<Transform>().SetParent( GameObject.Find ("Canvas").GetComponent<RectTransform>(), false ) ;
Run Code Online (Sandbox Code Playgroud)