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.
Antworten:
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 .
quelle
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:
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.
quelle
Sie können erkennen, ob sich ein Charakter im Gras befindet oder nicht. Zeichnen Sie dann nur die obere Hälfte des Charakters.
quelle