Jump to content
Unity Insider Forum

Kollisionsabfrage - wie funktioniert das?


Recommended Posts

Hallo Community,

in meinem Spiel erstelle ich ein PowerUp. Zur Auswahl stehen 3 Möglichkeiten seine Chancen im Spiel zu verbessern. Drei Kugel drehen sich um ein Zentrum. Kollidiert der Spieler mit einer der Kugeln, dann bekommt er das jeweilige PowerUp und die anderen zwei verschwinden. So der Plan. 

Es gibt noch eine Möglichkeit. Wenn der Spieler für eine bestimmte Zeit im Zentrum der sich rotierenden PowerUp steht, dann drehen sich diese schneller und der Spieler erhält alle drei PowerUps (Bild 1).

Das wollte ich gerade implementieren. Dazu habe ich eine Hierarchie erstellt wie in Bild 2 zu sehen.

PowerUp

  • - Bomb
  • - Power
  • - Shield

Dem GameObject PowerUp habe ich einen Circle Collider gegeben und ein Rigidbody und so prüfe ich auf Kollision. Wenn es kollidiert ist die Variable onTriggerTay = true, wenn nicht dann false und so lange es true ist beschleunigen die Kugel auf maximale Geschwindigkeit. Der Collider ist in Bild3 zu sehen. Der grüne Kreis in der Mitte.

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Player"))
        {
            onTriggerStay = true;
        }
    }

    private void OnTriggerExit2D(Collider2D collision)
    {
        if (collision.CompareTag("Player"))
        {
            onTriggerStay = false;
        }
    }

Manchmal setzt Unity die Variable nicht auf auf false zurück. Obwohl der Spieler aus dem Collider raus ist.

Dann habe ich noch ein Problem. Wenn das PowerUp eine weile rotiert...so 10-15 Minuten (was im Spiel nie der Fall sein wird) warum verschiebt sich die Rotation der Kugeln? Das sieht das so aus wie in Bild 5

So rotiere ich die Kugel im das Zentrum:

    void Update()
    {
        transform.Rotate(0f, 0f, rotateSpeed * Time.deltaTime);
    }

 

 

Frage 1: Warum wird nicht erkannt, dass es keine Kollision mehr gibt. Ist mein Vorgehen so richtig (siehe Code)

Antwort: Es scheint so, dass der Script für die Kollision auch Auswirkungen auf die Child-GameObjekte hat bzw. diese auch in der Kollision betrachtet. Was u.U. zu falschen Auswertungen führt.

Frage 2: Warum verschieben sich die Objekte nach einer gewissen Zeit oder wenn ich zu schnell rotiere? 


Danke für Eure Mühe und einen schönen Abend :)

 

 

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 54 Minuten schrieb gombolo:

Warum lösen die Kugeln eine Kollision aus? Obwohl diese gar keinen Collider habe und auch kein Rigidbody? Liegt es an der Hierarchie? 

Ein Ding kollidiert nur mit einem anderen Ding, wenn beide Collider haben. Die einzige andere Möglichkeit wäre ein Script, das raycastet oder so. Wenn du kein solches Script drin hast und die Dinger keine Collider haben, dann ist eine Kollision (oder... "kollisionsähnliches Verhalten") ausgeschlossen. Da ist also irgendwas im Busch. Wobei Bild 4 eigentlich genau danach aussieht, dass die Spitze des Raumschiffs genau den PowerUp-Collider berührt. Ich weiß ja aber nicht, wie der Collider des Schiffs aussieht... und auf Bild 3 meine ich auch, Collider-Gizmos auf den Kugeln erkennen zu können 🤔

vor 54 Minuten schrieb gombolo:

Warum verschieben sich die Objekte nach einer gewissen Zeit oder wenn ich zu schnell rotiere? 

Hat das Ding einen Rigidbody? Oder einen Rigidbody2D? Sieht etwas aus, als würde es sich um eine andere Achse als die Z-Achse drehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...