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, IHealthund 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, IHealthund IDeathAttribute, 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 DeathSkript macht einen Verweis auf ein InertiveWalkingSkript verfügbar. Aber wenn ich beschließe, dass der Spielercharakter genau kontrolliert, kann ich das TightWalkingSkript nicht einfach ziehen und ablegen, sondern muss das DeathSkript ä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 inspectorIch glaube nicht, dass ich verstehe, was Sie unter "Schnittstelle im Inspektor anzeigen" verstehen, weil mein erster Gedanke "Warum nicht?" War.