Jump to content
Unity Insider Forum
Jomnitech

if Abfrage oder Variable ständig setzen?

Recommended Posts

Hallo Zusammen

Weiss nicht genau wie ich das nun betiteln soll, deswegen mal ein Beispiel:

Variante A:

    private void FixedUpdate()
    {
        if (Input.GetAxis("Horizontal") > .1f)
        {
            transform.localScale = new Vector3(1, transform.localScale.y, transform.localScale.z);
        }

        if (Input.GetAxis("Horizontal") < -.1f)
        {
            transform.localScale = new Vector3(-1, transform.localScale.y, transform.localScale.z);
        }
    }

Variante B:

private void FixedUpdate()
    {
        if (Input.GetAxis("Horizontal") > .1f)
        {
            if(transform.localScale.x != 1)
            {
                transform.localScale = new Vector3(1, transform.localScale.y, transform.localScale.z);
            }
            
        }

        if (Input.GetAxis("Horizontal") < -.1f)
        {
            if(transform.localScale.x != -1)
            {
                transform.localScale = new Vector3(-1, transform.localScale.y, transform.localScale.z);
            }
            
        }
    }

Was macht nun mehr Sinn, den transform ständig neu zu setzen, oder eine zusätzliche Anfrage ob es nicht bereits dem gewünschten Wert entspricht?

Share this post


Link to post
Share on other sites

Darauf gibt es leider keine eindeutige Antwort. In C# gibt es ja, im Gegensatz zum nahen Verwandten Java, Properties. Das bedeutet in diesem Kontext, dass eine Zuweisung wie deine beliebig viele Seiteneffekte haben kann. Beim Setzen von transform.localScale könnten z.B. irgendwelche Hintergrund-Datenstrukturen der Szene neu berechnet werden - was genau passiert, könnte dann wiederum davon abhängen, ob du einen Renderer und/oder einen Collider auf dem GameObject hast. Kann natürlich auch sein, dass die Property schlau genug ist, gar nichts neu zu berechnen, wenn der neue Wert sowieso dem alten entspricht - so, wie du es oben vorschlägst. Nur eben in der Property anstatt außenherum.

Leider gibt es keinen Weg, da einfach mal hineinzuschauen, wenn du keinen Source Code-Zugriff hast. Unity hat da in den letzten Jahren verstärkt optimiert, aber was genau da passiert... keine Ahnung. Es gilt also wie immer: Mach dir keinen Kopf um Performance, lass einfach ohne großen Drumherum den Code laufen und kümmer dich um Framerate, wenn sie anfängt, ein Problem darzustellen.

In Sachen Code-Qualität würde ich sagen: Die beiden Varianten geben sich nicht sonderlich viel.

  • Thanks 1

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...

×
×
  • Create New...