Ich habe mehrmals über dieses Muster gelesen (aus der Perspektive der Best Practices):
Speicherzuweisung : Anstatt das neue Objekt sofort zu instanziieren, sollten Sie immer in Betracht ziehen, Objektpools zu erstellen und zu verwenden. Dies verringert die Fragmentierung des Arbeitsspeichers und verringert die Belastung des Garbage Collectors.
Ich weiß jedoch nicht, was es eigentlich bedeutet. Wie kann ich das umsetzen?
Zum Beispiel kann ich eine Instanz GameObject
mit der Instantiate
Methode von Unity?
Instantiate(prefab, new Vector3(2.0F, 0, 0), Quaternion.identity);
Wird von dieser Verwendung abgeraten? Was kann es sonst noch bedeuten?
unity
c#
design-patterns
memory-efficiency
Muhammad Faizan Khan
quelle
quelle
Antworten:
Wenn Sie vorhaben, viele Instanzen desselben Fertighauses zu instanziieren, sollten Sie auf jeden Fall über die Verwendung von Objektpooling nachdenken. Das Aufrufen der Instantiate-Funktion von Unity ist eine der anstrengendsten Methoden, die Sie durchführen können.
Objekt-Pooling ist, wenn Sie Fertigteile instanziieren, bevor sie verwendet werden. Sie werden sofort nach der Instantiierung deaktiviert und erst dann wieder aktiviert, wenn sie benötigt werden. Dies erhöht zwar die Speichernutzung, vermeidet jedoch den CPU-Overhead beim Instanziieren während des Spiels.
Zum Beispiel arbeite ich gerade an einem Bullet-Hell-Spiel, bei dem Hunderte von Kugeln zur Laufzeit erzeugt werden müssen. Ich habe anfangs versucht, das Spiel ohne Objekt-Pooling zu machen, aber das endete mit einer Katastrophe (weniger als 2 fps). Jetzt sammle ich 500 Kugeln, bevor das Spiel beginnt und das Spiel läuft erstaunlich schnell (200 fps).
Es gibt Situationen, in denen Objektpooling nicht verwendet werden kann. Wenn Sie beispielsweise ein Spiel haben, in dem die Eingaben des Spielers bestimmen, welche Fertigteile erzeugt werden, haben Sie möglicherweise keine andere Wahl, als den normalen Instantiate-Aufruf zu verwenden. Objekt-Pooling ist nur möglich, wenn Sie im Voraus wissen, welche Objekte benötigt werden.
Das YouTube-Tutorial von Sebastian Lague ist eine großartige Ressource, um mehr über das Pooling von Objekten zu erfahren: https://youtu.be/LhqP3EghQ-Q
quelle