public sealed class StaticBatcherListener : WorldGroupingListener
A World Grouping Listener that performs runtime static batching on World Cell Asset
Chunks (and children).
The batching is very rudimentary. Basically, for each World Cell, the
batcher collects all Game Objects (which can be the Asset Chunk itself or a descendant
of the Asset Chunk)
with a MeshRenderer component, for each Asset Chunk attached to the World Cell.
It then batches together these renderers using StaticBatchingUtility.Combine, with
the first Asset Chunk game object
set as the parent.
Only renderers that are associated with the same World Cell are batched together.
This is most useful for situations where
each World Cell may contain one or more chunks with a lot of children that are batchable.
In order for batching to work, each game object to be batched must adhere to the following
guidelines:
1) The GameObject is active. You should either ensure the Grouping has Auto Activation
enabled or you should activate the Asset Chunks
manually in a Grouping Listener set before this one in the array.
2) The GameObject has a Mesh Filter component, and that component is enabled.
3) The Mesh Filter component has a reference to a Mesh.
4) The mesh has a vertex count greater than 0.
5) The mesh has not already been combined with another Mesh (this component uses GetComponentsInChildren
to gather
the game objects to be batched, and checks to make sure the first child in the collected
children is not already
batched using its isPartOfStaticBatch property).
6) The GameObject has a Mesh Renderer component, and that component is enabled.
7) The Mesh Renderer component does not use any Material with a shader that has the
DisableBatching tag set to true.
8) All game objects to be batched use the same Material.
9) Meshes you want to batch together use the same vertex attributes. For example Unity
can batch meshes that use vertex position, vertex normal, and one UV with one another,
but not with meshes that use vertex position, vertex normal, UV0, UV1, and vertex
tangent.
10) Meshes must have read/write enabled.
Because of requirement 8, all Asset Chunks and children of those Asset Chunks on the
World Grouping (associated with the same
LOD Group), must use the same material. This may require you to create more World
Groupings than you would normally use, and
the drawbacks of that must be balanced again the performance gains of using static
batching.
Name | Type | Description |
---|---|---|
IgnoreLODTransitions | bool |
Returns false. |
YieldBehaviorAfterMethodExecution | ListenerYieldBehaviour |
Returns ListenerYieldBehaviour.YieldOrContinue. |
public sealed override IEnumerator<YieldInstruction> OnAfterCellsInBatchActivated(ReadOnlyList<WorldCell> cells, int batchNumber, int totalBatchesToExpect, bool cellsArePartOfLODTransition, bool immediateMode)
Called after a batch of cells are activated. The batching process occurs here, as Unity requires the game objects to be active in order for batching to work.
Name | Type | Description |
---|---|---|
cells | ReadOnlyList<WorldCell> |
The batch of cells that were just Activated. |
batchNumber | int |
The batch of cells that were just Activated. |
totalBatchesToExpect | int |
The total batches of cells that will be passed to this method for the current grouping update. |
cellsArePartOfLODTransition | bool |
Whether the batch of cells are part of an LOD transition. |
immediateMode | bool |
Whether the method is being executed in immediate mode. |
IEnumerator<YieldInstruction>
An IEnumerator<YieldInstruction> that can be iterated over or used as a coroutine.
See the
YieldInstruction page for more info.