Wenn ich mir so manche Material Blueprints anschaue die gefühlt 1000 Befehle ausführen und trotzdem läuft es flüssig als wärs nur ne Textur scheint das kaum ins Gewicht zu fallen. Das packen moderne CPUs mit links und Frameraten Probleme kommen fast immer durch Auflösung, Polycount und Beleuchtung.
Und genau das ist das Problem, weswegen sogar viel AAA-Titel versagen. Niemand macht sich Gedanken über die Codeoptimierung. Nun mag es zwar ein sehr selten vorkommendes Beispiel gewesen sein, wo ein Programmablauf oft in eine leere Else-Verzweigung schauen muss, immerhin gibt es ja noch Events, Eventdispatcher usw., über die man vielleicht solche Situationen auch lösen könnte. Aber, stell dir mal vor, du hast ein Spiel, welches mit 120 FPS, also 120 Bildern pro Sekunde, laufen soll. Und jetzt läuft es aus irgendeinem Grund mal ganz blöd und er schaut auch 120 Mal pro Sekunde in dieses leere Else. Immerhin werden die meisten solche Abfragen hinter ein Tick-Event setzen, welches wirklich oft aufgerufen wird. Doch, dann kannst du die Performance verbessern, wenn du das vermeidest. Nur, weil heutige Rechner scheinbar enorme Rechenleistungen haben im Vergleich zu einem 80386er-Prozessor und auch mehr RAM haben, als die damaligen 640 KB, gibt es da keine Ausrede sich nicht zumindest darüber Gedanken zu machen und auch das neben hohen Polygonzahlen nach Möglichkeit zu vermeiden.
was ist dann and, or, not oder nor?
Das sind logische Operatoren.
Auch in anderen Sprachen benutzt du ja IF auch in Verbindung mit logischen Operatoren. es sieht nur unauffälliger aus.
Zum Beispiel hast du eine normale IF-Abfrage
if (i == 20)
{
tu das eine;
}
else
{
tu etwas anderes;
}
Alles anzeigen
Mit dem logischen Not-Operator sieht es dann halt so aus
if (i != 20)
{
tu das eine;
}
else
{
tu etwas anderes;
}
Im zweiten Beispiel hast du die IF- und Else-Zweige quasi umgekehrt.
Dann das Ganze mit AND
if (i == 20 && y < 20)
{
tu das eine;
}
else
{
tu etwas anderes;
}
Hier müssen beide Bedingungen erfüllt sein, sonst landet die Abfrage im Else-Zweig
Und das Ganze noch einmal mit ODER
if (i == 20 || y < 20)
{
tu das eine;
}
else
{
tu etwas anderes;
}
In diesem Fall reicht es halt, wenn einer oder beide wahr sind. Nur wenn beide nicht erfüllt sind, landest du im Else-Zweig.
Und so funktioniert es auch in der Engine.
Das normale IF

Zwei Varianten mit der Verneinung !=

Beispiel mit AND

Beispiel mit OR

Im Wiki auf dieser Seite habe ich die logischen Operatoren übrigens mal eingefügt, da kannst du dir genau anschauen, welche Wirkung diese haben.
Ich habe nochmal zwei Bilder eingefügt, die den Bereich des jeweiligen Codes darstellen und auch zeigen, dass das eigentliche IF vor dem Branch stattfindet.

