Struct RpcCollection
The RpcCollection is the set of all available RPCs. It is created by the RpcSystem. It is used to register RPCs and to get queues for sending RPCs. In most cases you do not need to use it directly, the generated code will use it to setup the RPC components.
Implements
Inherited Members
Namespace: Unity.NetCode
Assembly: Unity.NetCode.dll
Syntax
public struct RpcCollection : IComponentData, IQueryTypeParameter
Properties
DynamicAssemblyList
Treat the set of assemblies loaded on the client / server as dynamic or different. This is only required if assemblies containing ghost component serializers or RPC serializers are removed when building standalone. This property is read in OnUpdate, so it must be set before then. Defaults to false, which saves 6 bytes per header, and allows RPC version errors to trigger immediately upon connecting to the server (rather than needing to wait for an invalid RPC to be received).
Declaration
public bool DynamicAssemblyList { get; set; }
Property Value
Type | Description |
---|---|
bool |
Methods
GetRpcHeaderLength(bool)
The RPC "common header" format is 9 bytes:
- Message Type: byte
- LocalTime: int (a.k.a.
remoteTime
on the receiver)
And then, for each RPC, the header is:
- RpcHash: [short|long] (based on DynamicAssemblyList)
- Size: ushort
- Payload : x bytes
So for a single message we have:
- 9 (common header) + 4 => 13 bytes (no DynamicAssemblyList)
- 9 (common header) + 10 => 19 bytes (with DynamicAssemblyList)
Declaration
public static int GetRpcHeaderLength(bool dynamicAssemblyList)
Parameters
Type | Name | Description |
---|---|---|
bool | dynamicAssemblyList | Whether or not your project is using DynamicAssemblyList. |
Returns
Type | Description |
---|---|
int | If DynamicAssemblyList, 15 bytes, otherwise 9 bytes. |
GetRpcQueue<TActionRequestAndSerializer>()
Get an RpcQueue which can be used to send RPCs.
Declaration
public RpcQueue<TActionRequestAndSerializer, TActionRequestAndSerializer> GetRpcQueue<TActionRequestAndSerializer>() where TActionRequestAndSerializer : struct, IComponentData, IRpcCommandSerializer<TActionRequestAndSerializer>
Returns
Type | Description |
---|---|
RpcQueue<TActionRequestAndSerializer, TActionRequestAndSerializer> | RpcQueue<TActionSerializer, TActionRequest> to be used to send RPCs. |
Type Parameters
Name | Description |
---|---|
TActionRequestAndSerializer | Struct of type TActionRequestAndSerializer implementing IRpcCommandSerializer<T>. |
GetRpcQueue<TActionSerializer, TActionRequest>()
Get an RpcQueue which can be used to send RPCs.
Declaration
public RpcQueue<TActionSerializer, TActionRequest> GetRpcQueue<TActionSerializer, TActionRequest>() where TActionSerializer : struct, IRpcCommandSerializer<TActionRequest> where TActionRequest : struct, IComponentData
Returns
Type | Description |
---|---|
RpcQueue<TActionSerializer, TActionRequest> | RpcQueue<TActionSerializer, TActionRequest> to be used to send RPCs. |
Type Parameters
Name | Description |
---|---|
TActionSerializer | Struct of type IRpcCommandSerializer<T> |
TActionRequest | Struct of type Unity.Entities.IComponentData |
RegisterRpc(ComponentType, PortableFunctionPointer<ExecuteDelegate>)
Register a new RPC type which can be sent over the network. This must be called before any connections are established.
Declaration
public void RegisterRpc(ComponentType type, PortableFunctionPointer<RpcExecutor.ExecuteDelegate> exec)
Parameters
Type | Name | Description |
---|---|---|
ComponentType | type | Type to register. |
PortableFunctionPointer<RpcExecutor.ExecuteDelegate> | exec | Callback for RPC to execute. |
RegisterRpc<TActionRequestAndSerializer>()
Register a new RPC type which can be sent over the network. This must be called before any connections are established.
Declaration
public void RegisterRpc<TActionRequestAndSerializer>() where TActionRequestAndSerializer : struct, IComponentData, IRpcCommandSerializer<TActionRequestAndSerializer>
Type Parameters
Name | Description |
---|---|
TActionRequestAndSerializer | A struct of type IComponentData, with IRpcCommandSerializer too. |
RegisterRpc<TActionSerializer, TActionRequest>()
Register a new RPC type which can be sent over the network. This must be called before any connections are established.
Declaration
public void RegisterRpc<TActionSerializer, TActionRequest>() where TActionSerializer : struct, IRpcCommandSerializer<TActionRequest> where TActionRequest : struct, IComponentData
Type Parameters
Name | Description |
---|---|
TActionSerializer | A struct of type IRpcCommandSerializer. |
TActionRequest | A struct of type IComponent. |