Jump to content
Unity Insider Forum

Animator / Variable Verständnisfrage


Recommended Posts

Hallihallo,

ich bin aktuell fleissig das Tutorial von Malzbie durchzuarbeiten. Jetzt war ich wirklich einige Stunden mit einem Problem beschäftigt. Den Grund, auch wenn er mir nicht schlüssig ist, habe ich nur durch try and Error herausgefunden.

Und zwar handelt es sich um diese schmucken Codezeilen:

    public bool schildAn;
    private Animator anim;

    // Use this for initialization
    void Awake()
    {
        anim = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        if (schildAn)
        {
            anim.SetBool("schildAn", true);
            schildAn = false;
            StartCoroutine(MachAus());
        }
    }
    IEnumerator MachAus()
    {
        yield return (new WaitForSeconds(0.5f));
        anim.SetBool("schildAn", false);
    }
}

 

Wie ihr seht, heißt der bool am oberen Ende des Codes "schildAn".  Dieser bekommt einen Zustand über eine Zuweisung. Also z.b "schildAn = false". Also wie in den Codezeilen.

Um auf die Transitions im Animator zuzugreifen, nutze ich ja "anim.SetBool("schildAn", false)".

Ich hatte im Animator anfangs einen anderen Namen als "schildAn" und da hat nichts geklappt. Jetzt heißt der "bool" im Animator genauso wie die "bool" Variable und nun geht es.

Sicherheitshalber hatte ich aus Spaß den Namen der bool Variable geändert. Und siehe da, es ging wieder nicht. Es lag also definitiv daran.

Ich verstehe nur nicht warum. Das sind doch zwei verschiedene paar Schuhe. 

Danke im Voraus und schöne Nacht noch

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hattest mich ja per Mail angeschrieben. Darauf hab ich geantwortet. Musst dann mal in deinen Posteingang schauen.

Hier will ich dir aber auch noch mal antworten. :)
Dass die boolesche Variable genau so heißt, wie der Parameter im Animator ist reiner zufall. Das hat aber nichts mit der Funktion zu tun.

Die boolesche Variable, hier im Script, kann heißen wie sie will. Aber da sie ja von außen auf true gesetzt wird, muss das andere Script sie natürlich auch genauso ansprechen.
Wenn du nachträglich den Varaiblennamen in diesem Script änderst, dann weiß das andere Script ersteinmal nichts davon und kann sie auch nicht ansprechen.
Du wirst aber sofort einen Fehler in der Consosle angezeigt bekommen. Denn das andere Script will ja jetzt eine Variable beschreiben, die gar nicht vorhanden ist.
Änderst du also hier den Variablennamen, dann musst du das auch im anderen Script machen. Jedenfalls in diesem Fall, wo die Variable direkt angesprochen wird.

Beim Animator-Parameter und dem SetBool Befehl ist das genauso. Du kannst auch hier den Parameter nennen wie du willst. Aber du musst dann auch genau diesen Namen beim Befehl nutzen. Tust du das nicht, läuft der Befehl ins Leere. Nennst du den Parameter im Animator "schildan" (mit kleinem A), schreibst im Befehl aber SetBool("schildAn",true) mit großem A, dann kann der Animator damit nichts anfangen, denn er kennt schildAn mit großem A nicht!

Das ist die ganze Magie dahinter! In jeder Abfrage oder bei jedem Setzen eines Wertes in einer Variable, wird geschaut ob das Element denn überhaupt da ist.
Wenn du mir sagt, ich soll der Heidi mal 5 € geben, dann kann ich das nur machen, wenn die Heidi auch hier ist und ich sie kenne.
Komponenten sind auch nur Menschen! :)

 

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...