Jump to content
Unity Insider Forum

Kollision von Collidern


dhht

Recommended Posts

Hallo Leute,

 

Ich programmiere gerade anhand von Tutorial-Videos eine Spiel, wo auch erwähnt wird wie man Herzen hat und auch wie man Schaden bekommt (Ich bin also noch ein Anfänger; Das ganze Spiel was ich dort programmiere ist in 2D). Ich habe jetzt nun aber eine Frage zu einem Problem was bei mir aufgetaucht ist. Mein Charakter (also Figur mit der man spielt) hat insgesamt drei Collider, 1 Boxcollider und 2 Circlecollider. Das Problem besteht jetzt darin, dass wenn ich auf einen Gegner treffe, anstatt 1 Leben gleich 3 abgezogen werden. Ich vermute das liegt einfach daran, dass ich 3 Collider auf dem Charakter habe und der Boxcollider vom Gegner ganz einfach mit allen drei Collidern getriggert wird und deswegen auch 3 Leben abzieht (Wenn ihr denkt dass es an etwas anderem liegt dann sagt mir bitte bescheit). Nun habe ich die Frage wie man das beheben kann und ob es jetzt überhaupt behoben werden kann?

 

Unity_Spieler_Collider.PNG.8bf80e1e7b04f82f6350813179773215.PNGUnity_Adler_Falle_Collider.PNG.303be0d22271ed33e1ff06f2572da36a.PNG     Das sind die Collider vom Charakter(links) und vom Adler (rechts) der als Falle dient.

 

 

- Soll man da etwas im Code vom Charakter oder vom Gegner ändern oder nur beim Gegner/Charakter etwas hinzufügen und dort den Box- bzw. den Circlecollider hinziehen. Oder soll man ganz einfach nur mehr Leben dem Charakter geben damit er auch länger überlebt. -

 

 

Die allgemeine Frage ist aber jetzt aber immer noch wie man das Problem, generell, lösen könnte?

Schon mal im Voraus Vielen Dank für die Antwort!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin moin!

Eigentlich vereinigt ein Rigidbody(2D), den du vermutlich benutzt, alle Collider unter sich, und es wird im Falle einer Kollision nur einmal ein Event ausgelöst. Müsste ich aber nochmal genauer testen. Bevor du dich aber ans große Debuggen machst, stellst sich für mich die Frage, ob du nicht vielleicht sowieso eine kurze Zeit der Unverwundbarkeit für deinen Spieler haben willst, wie das ja nicht unüblich ist. Wenn ja, würde das erste Kollisionsevent den Spieler direkt unverwundbar machen und alles, was direkt danach kommt, wird dann ignoriert. Dein Problem würde damit einfach verpuffen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Im Prinzip kannst du das so machen. (code nicht geprüft)

    float saveTime = 1.0f; // 1 Sekunde unverwundbar (anpassen)
    float saveTimer; // Der zählt die Zeit
    int live = 3;  // Deine Leben
    bool isDead = false; // kommst du von selbst drauf


    // wo auch immer du das machst (gern mal code zeigen wenn du nicht weiter kommst) 
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (saveTimer > 0) // geschützt ?
        {
            saveTimer -= Time.deltaTime; // dann Zeit runterzählen
            return;
        }
        else
        {
            live -= 1; // sonnst Leben abziehen
            if (live <= 0) // schon tot ?
            {
                isDead = true;
                return;
            }
            else // Timer neu setzen
            {
                saveTimer = saveTime;
            }
        }

    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja, der Zählt jetzt immer nur die Zeit runter, wenn eine Kollision passiert. Ist vielleicht etwas ungünstig.

Eher sowas:

private const float INVULNERABILITY_TIME = 0.6f;
private bool vulnerable = true;

private void OnCollisionEnter2D(Collision2D collision)
{
  if (vulnerable)
  {
    ApplyDamage();
    StartCoroutine(ApplyInvulnerability());
  }
}

private IEnumerator ApplyInvulnerability()
{
  vulerable = false;
  yield return new WaitForSeconds(INVULNERABILITY_TIME);
  vulerable = true;
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Leute,

Schon mal vielen Dank, dass ihr mir helft. Ich habe nun beide Codes ausprobiert und bin jedoch noch auf ein paar Probleme gestoßen. Nämlich haben beide Codes vorerst nicht funktioniert. Liegt es jetzt daran, dass man im voraus etwas von diesen Codes neu definieren musste, damit dieser Code funktioniert oder soll man eher etwas an den Unity Player-Settings etwas ändern?

Jedenfalls sind hier einige der relevanten Scripts, die ich verwende (Wie gesagt ich habe diese Scripts von yt da ich noch Anfänger bin):

CharacterController2D_1.thumb.PNG.ffabf3b88fa680c237b208df707294f7.PNGCharacterController2D_2.thumb.PNG.6415ffc69edc6b7e14272627084d28da.PNGCharacterController2D_3.PNG.f97537d91b1040f2050304e7ae0867f8.PNG

 

Das ist jetzt der CharacterController Script gewesen

 

Hier ist dann der PlayerMovement Script:

PlayerMovement.thumb.PNG.7ed87bd4f93ec8e9b586b6329b6a9d68.PNG

 

 

Und der Life TexScript:

LifeTextScript.PNG.c39455e92dcfc0f21fdb421278103734.PNG

 

 

 

Falls es von Bedeutung ist, ich verwende auch noch einen ScoreTextScript der die Gems (also die Coins die man im Game hat) zuständig ist (Das ist aber glaube ich nicht so ganz von Bedeutung); und einen TrapScript der dann bei den Fallen die ganzen Collisionen macht und ja, generell für die Falle zuständig ist.

Hier jedenfalls der TrapScript:

TrapScript.PNG.e4e0bee7e7975449f47523a28c8205a8.PNG

 

und der ScoreTextScript:

ScoreTextScript.PNG.940f1fff76d999e45b2f5999bcfcc84c.PNG

 

 

 

Ja was noch ich erwähnen sollte ist, dass zum Beispiel sowas wie OnCollisionEnter2D oder saveTime(r) von Unity nicht erkannt worden sind. Liegt vielleicht einfach daran, dass ich es früher in diesem Spiel und in den Scripts noch nicht verwendet habe:

Vielen Dank nochmal im voraus schonmal für die Hilfe!

Weiß ich sehr zu schätzen xD.

LifeTextScript.PNG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Au weia... bitte lade deinen Code nicht in Bildern hoch. Benutze stattdessen den Code-Tag (<> neben dem Unity-Icon).

vor 7 Stunden schrieb dhht:

Liegt es jetzt daran, dass man im voraus etwas von diesen Codes neu definieren musste, damit dieser Code funktioniert oder soll man eher etwas an den Unity Player-Settings etwas ändern?

Ich weiß nicht so genau, was du mit diesen beiden Dingen meinst.

Ich sehe auch nirgendwo, dass du irgendwo etwas von dem benutzt hast, was wir dir gegeben haben. Vielleicht übersehe ich es auch einfach nur, hast ja echt Unmengen gepostet, was überhaupt nicht relevant ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...