Jump to content
Unity Insider Forum

Skript funktioniert nur einmal


STU

Recommended Posts

Hi zusammen,

ich würde gerne einen Spieler durch einen anderen Spieler ersetzen. Dazu habe ich einen Collider, wenn dieser aktiviert wird verschwindet der erste und der zweite taucht auf. Das funktioniert auch soweit. Da ich das aber in beide Richtungen machen möchte, habe ich das GameObject mit nur dem Collider und dem Skript kopiert. Jetzt ist es aber so, dass der erste nicht mehr funktioniert sonder nur noch der zweite Collider. Kann mir jemand sagen woran das liegt? 

Danke

  private GameObject myHero;
    private GameObject myHeroVampire;
    private EdgeCollider2D myEdgeCollider2D;

    private void Start()
    {
        myHero = GameObject.Find("Hero");
        myHeroVampire = GameObject.Find("HeroVampire");
        myHeroVampire.gameObject.SetActive(false);
        myEdgeCollider2D = gameObject.GetComponent<EdgeCollider2D>();
    }   



    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject == myHero)
        {
            myEdgeCollider2D.enabled = false;
            myHero.gameObject.SetActive(false);
            myHeroVampire.transform.position = myHero.transform.position;
            myHeroVampire.gameObject.SetActive(true);

        }


        else if (collision.gameObject == myHeroVampire)
        {
            myEdgeCollider2D.enabled = false;
            myHeroVampire.gameObject.SetActive(false);
            myHero.transform.position = myHeroVampire.transform.position;
            myHero.gameObject.SetActive(true);
        }
    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 weeks later...

Ich schließe gerade mal aus deinem Script, dass du dich in einen Vampir verwandeln möchtest an einem bestimmten Punkt. Wenn der Held diesen Punkt erreicht, soll er die Vampirform annehmen und als Vampir soll er sich wieder in einen Menschen (oder was auch immer) verwandeln.

Das ganze kann nur einmal funktionieren, weil du den Collider nach einer Verwandlung ausschaltest.

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject == myHero)
        {
            myEdgeCollider2D.enabled = false;      <-- Hier

Dann kann das ganze kein zweites Mal funktionieren.

Ich gehe davon aus, deine Intention dahinter war, dass der Spieler, auf der der Position des Triggers nicht jeden Frame hin und her verwandelt wird.

Am besten setzt du noch einen "bool heroTransfomed" den du stattdessen auf true setzt. Anschließend setzt du eine "OnTriggerExit2D" Methode, die den bool heroTransformed wieder auf false setzt. Jetzt noch eine if-Abfrage in die "OnTriggerEnter2D" Methode setzen die abfragt ob der Spieler sich wieder verwandeln kann.

Ich hoffe das war der Fehler und ich konnte dir helfen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

danke für deine Antwort. Ne eigentlich war es so gedacht, dass er sich an einer bestimmten Stelle verwandelt und sich erstmal nicht zurück verwandeln kann. Deswegen habe ich den Collider ausgeschalten. An einer anderen Stelle habe ich jetzt ein weiteres Objekt mit dem selben Skript und neuem Collider um mich zurück zu verwandeln. Dies funktioniert jetzt aber nicht mehr. Ich habe das Objekt einfach mit Strg +D kopiert. Das komische ist, dass nun nur noch das zweite funktioniert beim ersten Collider tut sich nichts.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie sehen denn die Einstellungen im Inspektor aus? Normalerweise kannst du ohne Probleme Objekte Dublizieren und sie agieren eigenständig. Schau mal nach ob du versehentlich etwas im Inspektor geändert hast.

Andere Frage. Funktioniert es nur bei dem einen nicht? Also du hast gebiet 1 und gehst als Mensch rein und es geht und du hast Gebiet 2  wo du als Mensch reingehst und es geht nicht oder wie darf ich das verstehen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...