Jump to content
Unity Insider Forum

Recttransforms richtig platzieren ?


Kasse

Recommended Posts

Hey leute.

 

Ich versuche seit einer ganzen Weile ein Inventar mit dem neuen Interface zu bauen, bin aber ganz offensichtlich dazu im Stande mit diesen dämlichen recttransforms umzugehen.

 

Wie zum Teufel platziert man diese Dinger richtig ?

 

Ich will ein Fenster (in code) erstellen und dort die Slots für das Inventar ablegen. Blöderweise kriege ich es nicht auf die Reihe das recttransform dieses Fensters korrekt zu platzieren, Höhe und Breite richtig einzustellen und die Anker richtig zu platzieren.

 

Es hilft natürlich auch wenig, dass es bisher keine wirklich Doku gibt (zumindest keine die ich gefunden hätte). Und die Tatsache, dass Unity-Klassen gerne allen möglichen anderen Blödsinn enthalten (leere referenzen auf alles mögliche) macht es natürlich auch nicht wirklich einfacher heraus zu finden was eigentlich Teil der neuen Klassen ist und was nicht.

 

Wie auch immer, ich hab nicht die Zeit noch länger blind zu testen wie das alles funktioniert und wäre daher sehr dankbar falls jemand ein Tutorial/Artikel/Blogpost/Kühlschrank kennt, bei dem es speziell um GUI erstellung in code geht.

 

Oder wenn mir einfach jemand verraten könnte wie diese dämlichen recttransforms funktionieren, wäre ich auch zufrieden :P

Link zu diesem Kommentar
Auf anderen Seiten teilen

Diese Links helfen dir sicherlich weiter. Habe alle Video-Tutorials angesehen, damit bekommst du einen schönen Überblick.

 

http://unity3d.com/unity/beta/4.6 -> oben rechts auf Overview klicken. Dort findest du einige nützliche Tuts ;)

 

Ich bin mir ziemlich sicher, dass ich schon alles offizielle zum Thema durchgesehen habe. Das blöde ist, dass die nie von Code reden. Wenn ich mir im Editor etwas zusammen klicke, funktioniert das ganze anders als wenn ich es selber code. Zumindest sofern meine Tests sich nicht täuschen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich mir im Editor etwas zusammen klicke, funktioniert das ganze anders als wenn ich es selber code. Zumindest sofern meine Tests sich nicht täuschen.

 

1. Die ganze uGUI ist OpenSource, wenn du dich tiefer in die Materie begeben möchtest. Gibt einen Blog Eintrag auf der unity Webseite

2. Es gibt bei der Beta-Version einen Link ins Beta-Forum. Dort wird auch teils auf das Coden eingegangen. Gibt auch schon ein paar nützliche Scripts.

3. Wenn du es nicht 100% dynamisch brauchst, dann würde ich es im Editor erstellen und evtl. nur ein- und ausblenden. Oder ein Prefab daraus machen. So wird das auch in einem Live Training Tutorial, das auf dem Nightmare Tutorial aufsetzt.

4. Du könntest Code posten, und beschreiben was genau daran nicht funktioniert.

5. Habe bis jetzt noch keine Tutorials gesehen, die sich auf das Coden der uGUI beziehen.

6. Wenn du in C# schreibst, dann kann du schauen ob man evtl. auf ein "IRectTranform" casten kann. Dann siehst du nur noch die Methoden/Porperties die in dem Interface sind.

 

 

Edit: Das hilft vlt auch ein wenig VS ->F12 über RectTransform

 

namespace UnityEngine
{
public sealed class RectTransform : Transform
{
	public RectTransform();
	public Vector2 anchoredPosition { get; set; }
	public Vector2 anchorMax { get; set; }
	public Vector2 anchorMin { get; set; }
	public Vector2 offsetMax { get; set; }
	public Vector2 offsetMin { get; set; }
	public Vector2 pivot { get; set; }
	public Rect rect { get; }
	public Vector2 sizeDelta { get; set; }
	public void GetLocalCorners(Vector3[] fourCornersArray);
	public void GetWorldCorners(Vector3[] fourCornersArray);
}
}

 

 

Edit2:

Habe doch etwas gefunden. Video-Tutorial + Code

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Video ist leider auch nicht allzu hilfreich :/

Trotzdem danke dafür.

 

Derzeit platziere ich das Fenster einfach nur in der mitte des Screens. Das funktioniert einwandfrei. Dann skaliere ich das ganze so, dass alle Slots rein passen, was auch funktioniert. Aber ich weiß immer noch nicht wie ich nun die Anker an den jeweiligen Ecken platzieren kann...

 

Gibt es übrigens eine eingebaute Dragfunktion für die Panels ? Oder muss ich die selber schreiben ?

 

 

Edit:

 

Na schön, ich hab's hinbekommen:

 

	window.sizeDelta = new Vector2(horizontalSlots * slotPrefab.sizeDelta.x, verticalSlots * slotPrefab.sizeDelta.y);
	window.position = new Vector2(Screen.width * 0.5f, Screen.height * 0.5f);
	window.anchorMin = new Vector2(((window.position.x / Screen.width) - (window.sizeDelta.x * 0.5f) / Screen.width), ((window.position.y / Screen.height) - (window.sizeDelta.y * 0.5f) / Screen.height));
	window.anchorMax = new Vector2(((window.position.x / Screen.width) + (window.sizeDelta.x * 0.5f) / Screen.width), ((window.position.y / Screen.height) + (window.sizeDelta.y * 0.5f) / Screen.height));

 

Das erscheint mir aber absurd kompliziert. Da muss es doch wohl eine einfachere Methode geben ?!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das erscheint mir aber absurd kompliziert. Da muss es doch wohl eine einfachere Methode geben ?!

 

Per Code das ganze zu positionieren ist sicher immer mehr Aufwand, aber dafür eben dynamisch anpassbar.

 

Im Beta Forum gibt es eine Sammlung an nützlichen Scripts. Vlt. ist ja etwas für dich dabei.

http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/

 

Auch gibt es im UI Demo Projekt eine Drag&Drop Scene. Da kannst dir sicher das nötige rauspicken

http://forum.unity3d.com/threads/ui-example-project.263418/

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...