Bei jeder Kollision sind zwei GameObjects beteiligt, oder? Ich möchte wissen, wie ich entscheide, welches Objekt mein enthalten sollOnCollision*
?
Angenommen, ich habe ein Player-Objekt und ein Spike-Objekt. Mein erster Gedanke ist, ein Skript auf den Player zu schreiben, das folgenden Code enthält:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Spike")) {
Destroy(gameObject);
}
}
Die exakt gleiche Funktionalität kann natürlich erreicht werden, indem stattdessen ein Skript auf dem Spike-Objekt vorhanden ist, das Code wie den folgenden enthält:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Player")) {
Destroy(coll.gameObject);
}
}
Während beide gültig sind, war es für mich sinnvoller, das Skript auf dem Player zu haben, da in diesem Fall, wenn die Kollision auftritt, eine Aktion auf dem Player ausgeführt wird .
Ich bezweifle jedoch, dass Sie in Zukunft weitere Objekte hinzufügen möchten, die den Player bei einer Kollision töten, z. B. einen Feind, eine Lava, einen Laserstrahl usw. Diese Objekte haben wahrscheinlich unterschiedliche Tags. Dann würde das Skript auf dem Player folgendermaßen aussehen:
OnCollisionEnter(Collision coll) {
GameObject other = coll.gameObject;
if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) {
Destroy(gameObject);
}
}
In dem Fall, in dem sich das Skript auf dem Spike befand, müssten Sie nur dasselbe Skript zu allen anderen Objekten hinzufügen, die den Player beenden und das Skript so benennen können KillPlayerOnContact
.
Wenn Sie eine Kollision zwischen dem Spieler und einem Feind haben, möchten Sie wahrscheinlich eine Aktion auf beiden ausführen . Welches Objekt sollte in diesem Fall mit der Kollision umgehen? Oder sollten beide die Kollision bewältigen und unterschiedliche Aktionen ausführen?
Ich habe noch nie ein Spiel mit einer vernünftigen Größe gebaut und frage mich, ob der Code unübersichtlich und schwierig zu warten sein kann, wenn Sie anfangs so etwas falsch verstehen. Oder sind vielleicht alle Wege gültig und es ist nicht wirklich wichtig?
Jeder Einblick wird sehr geschätzt! Vielen Dank für Ihre Zeit :)
Tag.SPIKE
stattdessen?