Jump to content
Unity Insider Forum

if Abfrage oder Variable ständig setzen?


Jomnitech

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...