Jump to content
Unity Insider Forum

Game Object zerstören


BlackDullah

Recommended Posts

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

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

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

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

  • 4 weeks later...

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...