Unity2D hohes Gras

8

Ich verwende Unity, um ein 2D-Top-Down-Spiel zu erstellen. Bisher war alles großartig, aber ich bin auf ein Problem gestoßen, das ich nicht richtig lösen kann.

Ich möchte "hohe Grasflächen" implementieren, in denen ein Teil des Charakters verdeckt wird.

Ein visuelles Beispiel:

Ich dachte darüber nach, das hohe Gras in Schichten zu machen, aber das würde eine Menge Spielobjekte erzeugen, und der Übergang, wenn sich der Charakter nach oben bewegt, wird nicht glatt genug sein.

Irgendeine Idee, wie ich das angehen könnte? Ich dachte, dass ich mit Shadern vielleicht so etwas erreichen könnte, aber mein Wissen über Shader ist sehr, sehr begrenzt, deshalb weiß ich nicht einmal, ob so etwas möglich ist.

Löwe
quelle
6
Manchmal muss man mit vielen Spielobjekten arbeiten, weißt du?
Eine Art von Hack , um mehr Spielobjekte zu vermeiden wäre, den Spieler Sprit mit einem benutzerdefinierten „isInGrass“ -Version des Sprites (sehr groben Beispiels zu ersetzen hier ) , während es im Gras ist und es nur an der Spitze zu ziehen. Mit ein paar schönen Kunstwerken und ein bisschen Transparenz am unteren Rand (damit es sich besser in das eigentliche Gras einfügt) sieht es vielleicht gut genug aus.
Christian
Ich dachte über diesen Ansatz nach, aber neben all der Arbeit, die erforderlich wäre (wir würden mindestens zweimal als Animationen für jeden Schauspieler benötigen), den Übergang von außerhalb des Grases nach innen vom lateralen Szenario (im Beispielbild: Obere Reihe , dritte Spalte), wenn sich die Hälfte des Körpers innen und die andere Hälfte außen befindet, wäre das Ergebnis ziemlich chaotisch.
Leo
2
Klingt wie eine Maske oder Schablone ist das, was Sie brauchen. Dieser Thread enthält einige nützliche Informationen. Diese Erweiterung zeigt, wovon ich spreche, obwohl ich nicht weiß, ob sie genau das tut, was Sie brauchen.
1
Das klingt so, als hätte ich gesucht! Ich muss etwas recherchieren und damit experimentieren. Wenn es mir gelingt, etwas zum Laufen zu bringen, werde ich es als Antwort veröffentlichen.
Leo

Antworten:

1

Ich stimme @Christian zu (obwohl ich es nicht als Hack bezeichnen würde). Erkennen Sie den Zustand, in dem das Objekt anders aussehen soll, und zeichnen Sie es dann einfach anders. Jedes einzelne Ding im Spiel muss kein "Modell" dafür sein, wie es in der "Natur" funktioniert. Das ist ein Fehler, den ich oft gemacht habe und der für mich zu einem Mantra geworden ist. Fragen Sie sich Folgendes: Was würden Sie gewinnen, wenn der Busch den Spieler "realistisch" verschließen würde, anstatt den Spieler nur so zu zeichnen, wie er aussehen sollte? Ich habe dies in Anführungszeichen gesetzt, weil ich beim Versuch, mir vorzustellen, wie dies aussehen würde, denke, dass der Ansatz der geschichteten Okklusion tatsächlich minderwertig aussehen könnte.

Wenn Sie sich mit dem Ansatz von @ Christian befassen, die "potenziell unbegrenzte" Liste der kleinen Dinge zu verwalten, die Sie für jeden Frame überprüfen müssen, ist dies ein weiterer Fehler, den ich oft gemacht habe. Ich würde Ihnen empfehlen, vorerst "einfach mitzumachen" und regelmäßig zu überprüfen, wie lange die Liste tatsächlich gedauert hat - und ob sie tatsächlich zu einem Problem geworden ist . Eines von zwei Dingen wird passieren. Entweder ist es kein Problem geworden. In diesem Fall - warum versuchen Sie es zu lösen? Oder es hat und Sie müssen eine (minimale) Lösung entwickeln, um es zu lösen. Versuchen Sie nicht , es durch Simulation zu lösen .

Allen
quelle
0

Ich habe endlich eine zufriedenstellende Lösung gefunden! @ Thebluefish Kommentar zeigte mir mit Masken die richtige Richtung.

Die Idee ist, einen Shader zu verwenden, der den Charakter in zwei Durchgängen zeichnet:

  • Im ersten Durchgang wird das Zeichen normal gerendert, ABER vollständig hinter den Büschen.
  • Im zweiten Durchgang zeichne ich es erneut mit einer Maske, mit der olny den oberen Teil des Charakters über die Büsche zeichnet.

Dies geschieht auch dann, wenn sich der Chat-Charakter nicht in den Büschen befindet. Auf diese Weise muss ich keine Kollisionen gegen die Büsche erkennen und es macht auch den Übergang innerhalb der Buchse in Grenzfällen wie diesem reibungslos:

Die Hälfte des Zeichens, die sich außerhalb des Busches befindet, wird im ersten Durchgang gerendert. Die andere Hälfte wird vollständig vom Busch verdeckt.

Im zweiten Durchgang wird das maskierte Zeichen erneut gerendert. Der Teil außerhalb des Busches bleibt derselbe, aber der Teil innerhalb des Busches wird oben mit der Maske oben auf dem Busch gerendert, sodass er wie im Inneren des Busches aussieht.

Löwe
quelle
-1

Sie können erkennen, ob sich ein Charakter im Gras befindet oder nicht. Zeichnen Sie dann nur die obere Hälfte des Charakters.

JojololomenPL
quelle
Ich glaube, diese Antwort wurde bereits vorgeschlagen. Haben Sie zusätzliche Details, die Sie Ihrer Antwort hinzufügen können?
MichaelHouse