Vor einiger Zeit habe ich angefangen, mit Unity zu arbeiten, und ich habe immer noch Probleme mit eng gekoppelten Skripten. Wie kann ich meinen Code strukturieren, um dieses Problem zu vermeiden?
Beispielsweise:
Ich möchte Gesundheits- und Todessysteme in separaten Skripten haben. Ich möchte auch verschiedene austauschbare Laufskripte haben, mit denen ich die Art und Weise ändern kann, in der der Spielercharakter bewegt wird (physikbasierte Trägheitskontrollen wie in Mario im Vergleich zu engen, zuckenden Kontrollen wie in Super Meat Boy). Das Health-Skript muss einen Verweis auf das Death-Skript enthalten, damit es die Die () -Methode auslösen kann, wenn die Gesundheit des Spielers 0 erreicht. Das Death-Skript sollte einen Verweis auf das verwendete Laufskript enthalten, um das Laufen bei Tod zu deaktivieren (I) bin müde von Zombies).
Ich würde normalerweise Schnittstellen schaffen, wie IWalking
, IHealth
und IDeath
, so dass ich , ohne zu brechen , den Rest meines Code diese Elemente in einer Laune heraus ändern kann. Ich würde sie beispielsweise durch ein separates Skript auf dem Player-Objekt einrichten lassen PlayerScriptDependancyInjector
. Vielleicht ist das Skript würde öffentlich IWalking
, IHealth
und IDeath
Attribute, so dass die Abhängigkeiten von den Level - Designern aus dem Inspektoren durch Ziehen und Ablegen entsprechende Scripts eingestellt werden können.
Das würde es mir ermöglichen, Spielobjekten einfach Verhaltensweisen hinzuzufügen und mich nicht um fest codierte Abhängigkeiten zu sorgen.
Das Problem in der Einheit
Das Problem ist, dass ich in Unity keine Schnittstellen im Inspector verfügbar machen kann. Wenn ich eigene Inspectors schreibe, werden die Referenzen nicht serialisiert, und es ist eine Menge unnötiger Arbeit. Aus diesem Grund muss ich nur noch eng gekoppelten Code schreiben. Mein Death
Skript macht einen Verweis auf ein InertiveWalking
Skript verfügbar. Aber wenn ich beschließe, dass der Spielercharakter genau kontrolliert, kann ich das TightWalking
Skript nicht einfach ziehen und ablegen, sondern muss das Death
Skript ändern . Das ist Scheiße. Ich kann damit umgehen, aber meine Seele weint jedes Mal, wenn ich so etwas tue.
Was ist die bevorzugte Alternative zu Schnittstellen in Unity? Wie behebe ich dieses Problem? Ich fand diese , aber es sagt mir , was ich schon weiß, und es tut mir nicht sagen , wie das in der Einheit zu tun! Dies beschreibt auch , was getan werden soll, nicht , wie, es ist nicht das Problem der engen Kopplung zwischen Skripten nicht ansprechen.
Alles in allem bin ich der Meinung, dass diese für Leute geschrieben wurden, die zu Unity gekommen sind, mit einem Hintergrund im Spieledesign, der nur das Codieren lernt, und für normale Entwickler gibt es nur sehr wenige Ressourcen zu Unity. Gibt es eine Standardmethode, um Ihren Code in Unity zu strukturieren, oder muss ich meine eigene Methode herausfinden?
The problem is that in Unity I can't expose interfaces in the inspector
Ich glaube nicht, dass ich verstehe, was Sie unter "Schnittstelle im Inspektor anzeigen" verstehen, weil mein erster Gedanke "Warum nicht?" War.