2016-07-23 2 views
0

Ich versuche, eine 2D-UI-Statusleiste mit einer Maske zu erstellen. Ich habe ein schwarzes Hintergrundbild, ein grünes Gesundheitsbalkenbild für die vollständigen Teile des Gesundheitsbalkens und ein graues Maskenbild für den entleerten Teil des Gesundheitsbalkens. Der schwarze Hintergrund ist etwa 1 x 0,1 groß, und die grünen und grauen Bereiche sind etwas kleiner, so dass ein kleiner Teil des schwarzen Hintergrunds um die Ränder der Statusleiste sichtbar ist.Sonderbares Verhalten von UI-Maske

Wenn ich die Gesundheitsleiste zu meiner Szene hinzufüge, sehe ich nur den schwarzen Hintergrund. Wenn ich das Skript Mask ausschalte, wird der grüne Teil angezeigt. Das Seltsamste ist, dass wenn ich die Breite des grünen Teils auf eine große Zahl wie 50 vergrößere, dann wird der gesamte Balken grün (außer dem dünnen schwarzen Rand). Wenn ich dann die Fill Amount ändere, bleibt der Balken von 0,51 auf 1 voll und von 0 bis 0,49 leer. Durch Verschieben des Fill Amount zwischen 0,49 und 0,51 wird der grüne Teil des Balkens verkleinert und erweitert.

Here ist die Hierarchie der Funktionsleiste.

Here ist die Statusleiste im Inspektor. Die Render Mode ist World Space. Ich weiß nicht, ob das für dieses Problem relevant ist. Ich habe mein eigenes Skript Status Bar Canvas Script angefügt, aber ich habe den gesamten Code auskommentiert.

Here ist der Statusleistenhintergrund (der schwarze Rahmen) im Inspektor.

Here ist die Maske (der ungefüllte graue Balken) im Inspector.

Here ist die grüne Leiste im Inspector.

This ist, wie das Ergebnis aussieht.

This ist, wie das Ergebnis aussieht, wenn ich das Mask Skript deaktivieren.

Es scheint, als ob das Problem damit zusammenhängt, wie Unity mein "Content" -Objekt in der Szene skaliert, aber ich kann nicht herausfinden, was es tatsächlich macht.

Antwort

0

Sowohl der Maskenhalter als auch FillAmount Prefab müssen die UI Image-Komponente und das Sprite enthalten. MaskHolder wird das Masken-Sprite haben und Content wird das Gesundheitsbalken-Sprite enthalten. MaskHolder wird auch eine Mask Komponente enthalten und Show Mask Graphics ist ausgewählt. Ihre Hierarchie Setup sollte wie unten sein:

enter image description here

und sollte nicht eine Leinwand nur für eine Health-Bar verwenden.

+0

Was meinst du, ich sollte nicht nur eine Leinwand für eine Gesundheitsbalken verwenden. Benötige ich keine Leinwand, um UI-Elemente zu zeichnen, ohne 'OnGUI' zu benutzen (was anscheinend empfohlen wird)? Ich bin neu in Unity, vielleicht verstehe ich das falsch. –

+0

Ein Canvas kann die meisten UI-Objekte als untergeordnete Elemente haben, wie z. B. Schaltflächen, Hintergrund, Texte. Kann leere 'Rect'-Objekte in einem Canvas erstellen, die einzelne aufgabenorientierte Objekte enthalten, um sie als Gruppe zu behandeln. Also wann immer Sie Knöpfe brauchen, betätigen Sie die Knöpfe, die das Objekt halten. Multi Canvas ist zum Beispiel erforderlich, wenn Sie diesen beiden Bildschirm Platz wie Kamera und überlagert platzieren müssen. Sie können die meisten UI-Objekte in einer Zeichenfläche speichern. Benötigt keine Leinwand nur für die Gesundheitsbalken. Es kann ein Bild oder ein leeres Objekt sein, das nur den Gesundheitsbalken als Kind derselben Leinwand enthält, die für andere Vorschläge verwendet wird –