BlackDullah Geschrieben 18. Januar 2022 Melden Share Geschrieben 18. Januar 2022 Hallo, ich hab da mal wieder eine Frage an euch. Ich habe in meinem 2D-Spiel einen Gegner. Dieser Gegner soll nach 5 mal auf ihn springen eliminiert werden. Hier der Code: using System.Collections; using System.Collections.Generic; using UnityEngine; public class WolfEnemy : MonoBehaviour { public float Hitpoints; public float MaxHitpoints = 5; public GameObject spikes; private void OnCollisionEnter2D (Collision2D other) { if (other.gameObject.tag == "Player") //&& other.GetType() == typeof(CircleCollider2D)) { TakeHit(1); } } public void TakeHit(float damage) { Hitpoints = Hitpoints + damage; if(Hitpoints == 5) { Destroy(gameObject); //Destroy(gameObject.spikes) Debug.Log("Wolf eliminiert"); } } void Spikes() { } } Das funktioniert soweit auch. Nun habe ich 2 Fragen zugleich. 1) Ich möchte, dass dem Gegner Schaden zugefügt wird, wenn ich auf ihn springe und nicht nur mit ihm kollidiere. Deshalb dachte ich an diese Zeile: if (other.gameObject.tag == "Player" && other.GetType() == typeof(CircleCollider2D)) Da mein Charakter aus 2 Collidern besteht (BoxCollider2D oben - CircleCollider2D unten) Dieser Code ist zu Hälfte auskommentiert, da er nicht funktioniert (siehe Code oben). Warum funktioniert der nicht? 2) Ich habe ein Public GameObject spikes. Ich möchte, dass wenn der Gegner zerstört wird, auch dieses GameObject zerstört wird. Ich finde keinen passenden Code dazu, da ich nicht weiß, wie ich im Script auf darauf zugreifen soll. Ich hoffe es ist verständlich erklärt und mir kann jemand den ein oder anderen Tipp geben. Viele Grüße, BlackDullah Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
chrische5 Geschrieben 19. Januar 2022 Melden Share Geschrieben 19. Januar 2022 Hallo Warum der Code nicht funktioniert kann ich nicht genau sagen, weil ich ja gar nicht weiß, wo deine Collider und so weiter sind. Wenn man die Richtung der Kollision bekommen will, arbeitet man meist Collision.Contacts, wenn ich das recht in Erinnerung habe. Zu 2.) Warum machst du nicht eine Variable bei deinem Gegner in die du Spikes im Editor reinziehst? Dann hast du Zugriff darauf. Christoph Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
BlackDullah Geschrieben 19. Januar 2022 Autor Melden Share Geschrieben 19. Januar 2022 Hi, vor 2 Stunden schrieb chrische5: Wenn man die Richtung der Kollision bekommen will, arbeitet man meist Collision.Contacts, wenn ich das recht in Erinnerung habe. Das ist schon mal eine Hilfe, das werde ich mir mal genauer anschauen. vor 2 Stunden schrieb chrische5: Warum machst du nicht eine Variable bei deinem Gegner in die du Spikes im Editor reinziehst? Dann hast du Zugriff darauf. Habe ich schon mit "public GameObject spikes" oder meinst du was anderes? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Lewo Geschrieben 19. Januar 2022 Melden Share Geschrieben 19. Januar 2022 Also wenn ich das richtig sehe, dann deklarierst Du ein GameObject "spikes", mehr passiert aber nicht. Es ist also nicht wirklich ein GameObject da, welches zerstört werden könnte. Ich denke, du müsstest entweder ein GameObject instanzieren, welches du dann später zerstören kannst, oder eine Klasse "Spikes" schaffen, die Du in die public Spikes Variable ziehst. Diese Klasse kann dann wiedem eine Destroy Methode haben, die du aufrufen kannst. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
chrische5 Geschrieben 19. Januar 2022 Melden Share Geschrieben 19. Januar 2022 Hallo Na, du musst spikes jetzt auch noch etwas zuweisen. Dann kannst du es auch per destroy zerstören. Christoph Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Peanut Geschrieben 11. Februar 2022 Melden Share Geschrieben 11. Februar 2022 Als kleiner TIpp ich würde das nicht über Collider lösen . Das ist viel zu Fehleranfällig. Wenn der Spieler mit dem Wolf kollidiert erzeuge einfach einen Richtungsvektor vom Wolf zum Spieler . Dann überprüfst du den Winkel zwischen diesem Richtungsvektor und Vektor3.up . Ist der Winkel z.B unter 20 Grad dann weißt du das die Kollision von Oben stattgefunden hat. Probiers einfach mal aus Gruß von der Nuss Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
BlackDullah Geschrieben 14. Februar 2022 Autor Melden Share Geschrieben 14. Februar 2022 Danke für den Tipp. Ich muss mir mal ein Beispielcode für dieses Szenario anschauen. Diese Lösung klingt interessant. Ich habe das Wolfproblem leider nicht so lösen können wie ich es wollte, deshalb hab ich mir für den Gegner etwas anderes ausgedacht. Vielleicht kann ich es mit dieser Methode beim nächsten Gegner umsetzen. Gruß, BackDullah 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.