Jump to content
Unity Insider Forum

Trigger System für Slide Puzzle


Recommended Posts

Mein Ziel ist es ein Spiel ähnlich zu dieser Vorlage zu erstellen 

Das Spiel ist zwar ein Voxel Game, aber für den Code kann man es ja als 2D Grid betrachten. Wie im Video zu sehen ist das Spiel rundenbasiert. Ich gebe also Input rein, der Spieler bewegt sich und bis zum Ende der Runde ist weiterer Input deaktiviert.

Zunächst gibt es Obstacles und Trigger, die auf bestimmte Dinge reagieren. Obstacles wären also Wände, Bäume, Tische, ... Diese kann ich mir in einer Liste merken oder einzeln betrachten, zumindest reicht es aus, wenn alle 4 Außenseiten ein Obstacle haben, um die Zelle vollständig zu blockieren.

public class Obstacle : MonoBehaviour
{
    [SerializeField]
    Vector2Int relativePosition;
 
    public Vector2Int RelativePosition { get { return relativePosition; } }
}

NPCs müssten aber auch Obstacles haben, damit der Spieler nicht in diese reinlaufen kann.

Die Trigger sind etwas komplexer. Bei einem Loch oder Feuer, das die Bewegung der Figur stoppt und diese tötet reicht es aus, dieses optisch im Zentrum zu platzieren und wieder an alle 4 Seiten einen "Death-Trigger" anzubringen. Ein Lichtschalter kann an einer Seite angebracht sein und nur ausgelöst werden, wenn sich der Spieler auf das Feld bewegt und diesen "anschaut". Wenn also der Lichtschalter relativ zur Zellenposition "nördlich" steht, also (0|1) dann muss der Spieler diese Bewegungsrichtung haben, um ihn auszulösen. Wenn rot ein Lichtschalter ist und grün der Spieler mit einer Bewegung nach links

unknown.png

, dann würde der Spieler den Lichtschalter nicht auslösen, da er sich ja nicht zum Schalter bewegt. Blau würde diesen auslösen

unknown.png

Eine Druckplatte würde den Spieler nicht stoppen, dennoch eine Aktion auslösen.

Steht der Spieler vor einem NPC, wird er diesen töten. Steht der Spieler neben einem NPC, wird dieser NPC von ihm weglaufen. Das gilt natürlich nur, wenn sich zwischen den beiden keine Wand befindet. Der NPC könnte natürlich auch eine Waffe haben und den Spieler töten, falls der Spieler vor dem NPC stehen bleibt.

Wenn man die Obstacles nun auch einfach als Trigger betrachtet, die andere Objekte stoppen, könnte erstmal alles ein Trigger sein. Ich würde erstmal so vorgehen, dass jede Position an jeder Seite 0 - n Trigger haben kann. Je nachdem, wie eine Figur am Ende ihrer Bewegung steht, reagieren dann die umliegenden Trigger. Die Position selbst würde also erstmal so etwas speichern `Dictionary<RelativePosition, List<Trigger>>`

Das einzige Problem, dass ich noch nicht gelöst habe ist: Wenn sich ein NPC bewegt, dann müsste man wissen, welche Trigger er zur neuen Zelle mitnimmt (töten, weglaufen, ...) und welche Trigger bei der Position bleiben (Wand als Obstacle, Lichtschalter an einer Seite, ...).

Vielleicht hat ja jemand eine Idee oder hat vielleicht einen viel besseren Ansatz :)

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...