checkalord3 Geschrieben 17. Juni 2017 Melden Share Geschrieben 17. Juni 2017 Heyho, Ich möchte, mit zwei collidierenden Gameobjects, einen Kampf starten lassen. Dazu benutze ich OnCollisionEnter (Collision collision){}. Ich möchte jetzt, dass wenn sie aufeinandertreffen sich angreifen, also Schaden abgezogen bekommen. Jedoch gibt es unterschiedliche Klassen, also kann ich nicht genau im Skript festlegen wie viel Schaden die Figuren bekommen. Nehmen wir an: Figur_1 macht 5 Schaden und hat 15 Leben, Figur_2 macht 3 Schaden hat 30 Leben Die beiden collidieren: void OnCollisionEnter (Collision collision){ if ((collision.gameObject.tag == "enemy" && this.gameObject.tag == "friendly") || (collision.gameObject.tag == "friendly" && this.gameObject.tag == "enemy")){ //Hier findet der Kampf statt // Irgendwie müssen die Variablen von dem berührenden Gegner jetzt hier herausgefunden werden. Nur wie? } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 17. Juni 2017 Melden Share Geschrieben 17. Juni 2017 Du gibst deinem Script entsprechende Variablen: public int lives = 20; public int damage = 5; public int team; Die Werte, die da stehen, sind nur Defaultwerte. Sobald das Script kompiliert und auf ein GameObject gezogen ist, kannst du die Werte für dieses GameObject frei einstellen. Man beachte auch die team-Variable, die die Tags für dich ersetzt. Trage da einfach auf den GameObjects 0 für friendly ein und 1 für enemy. Wenn du irgendwann ein drittes Team hast, einfach eine 2 einsetzen. Dann brauchst du in deinem Code nur noch var otherFighter = collision.gameObject.GetComponent<NameDesScripts>(); if(otherFighter) // Nur wenn wir auch einen Kämpfer gefunden haben, also ein GO mit diesem Script { if(otherFighter.team != team) { lives -= otherFighter.damage; if(lives <= 0) { Die(); } } } Bemerke, wie viel kompakter und weniger fehleranfällig die if-Abfrage jetzt ist. Man kann das mit dem Team auch über ein enum regeln, dann trägt man das nicht über so eine abstrakte Zahl ein. Wenn das hier erstmal sitzt, sag bescheid, wenn dich das interessiert. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
checkalord3 Geschrieben 17. Juni 2017 Autor Melden Share Geschrieben 17. Juni 2017 Interessieren tut mich das auf jeden fall! Nur durch Übung lernt man, darum bin ich froh, dass ich hier so viel Hilfe von euch bekomme! Lob an euch für eure ganze Mühe Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 17. Juni 2017 Melden Share Geschrieben 17. Juni 2017 Alles klar! Ich konnte nicht so ganz einschätzen, wie viel auf einmal ich dir entgegen schmeißen kann. Du definierst erst dein enum direkt in der Klasse: { // Öffnende Klammer der Klasse public enum Team { Friendly, Enemy } public Team team; // Anstatt "public int team;" // Dann die ganzen anderen Variablen und die Methoden Jetzt hast du im Editor eine Auswahlbox zwischen den beiden Begriffen im enum-Block. Der Rest des Codes kann so bleiben, da ja nur mit != geprüft wird, und Team.Friendly ist ungleich Team.Enemy. Erweitern geht sehr einfach, indem du mehr Begriffe in die Liste packst: public enum Team { GDI, Nod, Scrin } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
checkalord3 Geschrieben 17. Juni 2017 Autor Melden Share Geschrieben 17. Juni 2017 Das hat ja super gut funktioniert ;D Danke schön! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.