Struct GhostSendSystemData
Singleton entity that contains all the tweakable settings for the Ghost
Implements
Inherited Members
Namespace: Unity.NetCode
Assembly: Unity.NetCode.dll
Syntax
[Serializable]
public struct GhostSendSystemData : IComponentData, IQueryTypeParameter
Fields
CleanupConnectionStatePerTick
The number of connections to cleanup unused serialization data for in a single tick. Setting this higher can recover memory faster, but uses more CPU time.
Declaration
public int CleanupConnectionStatePerTick
Field Value
Type | Description |
---|---|
int |
DefaultSnapshotPacketSize
If not 0, denotes the desired size of an individual snapshot (unless clobbered by Network
Declaration
public int DefaultSnapshotPacketSize
Field Value
Type | Description |
---|---|
int |
MaxSendChunks
The maximum number of chunks the system will try to send to a single connection in a single frame. A chunk will count as sent even if it does not contain any ghosts which needed to be sent (because of relevancy or static optimization). If there are more chunks than this the least important chunks will not be sent even if there is space in the packet. This can be used to control CPU time on the server.
Declaration
public int MaxSendChunks
Field Value
Type | Description |
---|---|
int |
MaxSendEntities
The maximum number of entities the system will try to send to a single connection in a single frame. An entity will count even if it is not actually sent (because of relevancy or static optimization). If there are more chunks than this the least important chunks will not be sent even if there is space in the packet. This can be used to control CPU time on the server.
Declaration
public int MaxSendEntities
Field Value
Type | Description |
---|---|
int |
MinDistanceScaledSendImportance
The minimum importance considered for inclusion in a snapshot after applying distance based priority scaling. Any ghost importance lower than this value will not be send every frame even if there is enough space in the packet.
Declaration
public int MinDistanceScaledSendImportance
Field Value
Type | Description |
---|---|
int |
MinSendImportance
The minimum importance considered for inclusion in a snapshot. Any ghost importance lower than this value will not be send every frame even if there is enough space in the packet. E.g. Value=60, tick-rate=60, ghost.importance=1 implies a ghost will be replicated roughly once per second.
Declaration
public int MinSendImportance
Field Value
Type | Description |
---|---|
int |
Properties
EnablePerComponentProfiling
Enable profiling scopes for each component in a ghost. They can help tracking down why a ghost is expensive to serialize - but they come with a performance cost so they are not enabled by default.
Declaration
public bool EnablePerComponentProfiling { get; set; }
Property Value
Type | Description |
---|---|
bool |
FirstSendImportanceMultiplier
Non-zero values for Min
Declaration
public uint FirstSendImportanceMultiplier { get; set; }
Property Value
Type | Description |
---|---|
uint |
ForcePreSerialize
Force all ghosts to use pre serialization. This means part of the serialization will be done once for all connection instead of once per connection. This can increase CPU time for simple ghosts and ghosts which are rarely sent. This switch is meant as a way of measuring which ghosts would benefit from using pre-serialization.
Declaration
public bool ForcePreSerialize { get; set; }
Property Value
Type | Description |
---|---|
bool |
ForceSingleBaseline
Force all ghosts to use a single baseline. This will reduce CPU usage at the expense of increased bandwidth usage. This is mostly meant as a way of measuring which ghosts should use static optimization instead of dynamic. If the bits / ghost does not significantly increase when enabling this the ghost can use static optimization to save CPU.
Declaration
public bool ForceSingleBaseline { get; set; }
Property Value
Type | Description |
---|---|
bool |
IrrelevantImportanceDownScale
Value used to scale down the importance of chunks where all entities were irrelevant last time it was sent. The importance is divided by this value. It can be used together with MinSendImportance to make sure relevancy is not updated every frame for things with low importance.
Declaration
public int IrrelevantImportanceDownScale { get; set; }
Property Value
Type | Description |
---|---|
int |
KeepSnapshotHistoryOnStructuralChange
Try to keep the snapshot history buffer for an entity when there is a structucal change. Doing this will require a lookup and copy of data whenever a ghost has a structucal change which will add additional CPU cost on the server. Keeping the snapshot history will not always be possible so this flag does no give a 100% guarantee, you are expected to measure CPU and bandwidth when changing this.
Declaration
public bool KeepSnapshotHistoryOnStructuralChange { get; set; }
Property Value
Type | Description |
---|---|
bool |
TempStreamInitialSize
Value used to set the initial size of the internal temporary stream in which ghost data is serialized. The default value is 8kb;
Using a small size will incur in extra serialization costs (because of multiple round of serialization), while using a larger size provide better performance (overall). The initial size of the temporary stream is set to be equals to the capacity of the outgoing data stream (usually an MTU or larger for fragmented payloads). The suggested default (8kb), while extremely large in respect to the packet size, would allow in general to be able to to write a large range of mid/small ghost entities type, with varying size (up to hundreds of bytes each) without incurring in extra serialization overhead.
Declaration
public int TempStreamInitialSize { get; set; }
Property Value
Type | Description |
---|---|
int |
UseCustomSerializer
When set, enable using any registered Ghost
Declaration
public int UseCustomSerializer { get; set; }
Property Value
Type | Description |
---|---|
int |