2017-02-14 1 views
3

ich ein GO bin Instanziierung, die eine Panel-Komponente (RectTransform) als Kind einer Leinwand in der Szene vorhandenen hat:Unity3D C# Positionierung der Platte nach der Instanzierung

_heroSelectUI = (GameObject)Instantiate (_heroSelectUIPrefab, GameObject.Find ("Canvas").GetComponent<Transform>()); 

Wenn es erstellt er die bekommt folgende Werte:

Panel Values

„links“, „oben“, „Rechts“ und „unten“ einige unerwünschte Werte (wahrscheinlich aufgrund der vorhandenen Leinwand bekommen w hich scheint identische Werte zu haben).

Die Platten prefabs Werte sind 0, wie man sie nach der Instanzierung zurück auf 0 gesetzt? Ich kann die richtigen Variablen für die RectTransform nicht finden.

Antwort

5

Nach dem documentation

Für eine Dehnung Rect-Transformation, kann es einfacher sein, die Position einzustellen, die offsetMin und offsetMax Eigenschaften verwenden. Die offsetMin Eigenschaft gibt die Ecke der unteren linken Ecke des Rect relativ zum unteren linken Anker an. Die Eigenschaft offsetMax gibt die Ecke der oberen rechten Ecke des Rechtecks ​​relativ zum oberen rechten Anker an. Auch

RectTransform rt = _heroSelectUI.GetComponent<RectTransform>(); 
rt.offsetMin = rt.offsetMax = Vector2.zero ; 

Else, entsprechend der Dokumentation, können Sie versuchen, es zu tun, wenn die übergeordnete Einstellung:

Versuchen wie folgt zu tun

Prefabs von UI Elemente werden wie gewohnt mit der Instantiate-Methode instanziiert. Beim Festlegen des übergeordneten Elements des instanziierten Oberflächenelements wird empfohlen, dies mit der Transform.SetParent-Methode zu tun, wobei der Parameter worldPositionStays auf false festgelegt ist.

_heroSelectUI = (GameObject)Instantiate (_heroSelectUIPrefab, GameObject.Find ("Canvas").GetComponent<RectTransform>(), false); 

OR:

_heroSelectUI = (GameObject)Instantiate (_heroSelectUIPrefab); 
_heroSelectUI.GetComponent<Transform>().SetParent(GameObject.Find ("Canvas").GetComponent<RectTransform>(), false) ; 
+0

Vielen Dank es funktioniert hat, in der Tat! – Csharpest

+0

Oh yeah, ich habe mich für meine Buttons auf false eingestellt, aber ich habe nicht darüber nachgedacht, dies auch mit dem Panel zu tun! Es hat den Job getan und WorldPositionStays auf false gesetzt. – Csharpest

+2

@Chaspest Wenn die Antwort korrekt ist, markieren Sie sie als akzeptiert. – Smartis

Verwandte Themen