Ultimate Steamworks Networking - Assets Project (Fish-Net, Mirror and Netcode)

Hello, may I ask if other abilities support synchronization? For example, A * find path ability, and my custom abilities
To adapt the integrations of Ucc I will do it later starting with the integration of Inputs.
Concerning custom Abilities you can make everything compatible with modules but you have to understand the flow of information (Method and sync Data).
Besides, I have to rework the existing modules to make them clearer so that you can more easily add your own custom Abilities.
 
Thanks everyone!
I have a new discussion thread: Ultimate Mirror Controller

So did you manage to sleep? lol
Not well, I wanted to get going with this, sadly I haven't had much time. I have created a new project and added the 3 packages and the UCC3 Demo, is running without errors. Now to get the network going. I might just wait for the documentation.
I will join the new conversation and continue there.
 
I admit that I am hesitant to migrate to netcode and only do netcode, but there are members of the community who are waiting for Mirror, I am currently looking at Netcode but I had already looked at Fishnet and Netcode before and I'm a little confused about what's next.
In the future, if you or anyone else, interested in implementing NetCode for GameObjects and UCC3, feel free to check out our GitHub repository. We're actively working on networking and have all the essential features up and running. While it's not server authoritative, the core functionalities are in place. Additionally, we're in the process of making it a fork of the parent repository. We're currently focusing on networking our voxel engine alongside UCC3 and NGO, actively searching for and addressing any bugs that may arise with networking.

MLAPI is the old branch, this is using NetCode for GameObjects
https://github.com/GreedyVox/MLAPI/tree/GreedyVox/MLAPI/UCC3

Note: Still in progress, but is a stable working branch, will be releasing a video of it in action with our voxel tech.
 
Last edited:
In the future, if you our anyone else, interested in implementing NetCode for GameObjects and UCC3, feel free to check out our GitHub repository. We're actively working on networking and have all the essential features up and running. While it's not server authoritative, the core functionalities are in place. Additionally, we're in the process of making it a fork of the parent repository. We're currently focusing on networking our voxel engine alongside UCC3 and NGO, actively searching for and addressing any bugs that may arise with networking.

MLAPI is the old branch, this is using NetCode for GameObjects
https://github.com/GreedyVox/MLAPI/tree/GreedyVox/MLAPI/UCC3

Note: Still in progress, but is a stable working branch, will be releasing a video of it in action with our voxel tech.
This is very cool @GreedyVox

Can you create a new Forum thread and we'll chat over there?
 
In the future, if you or anyone else, interested in implementing NetCode for GameObjects and UCC3, feel free to check out our GitHub repository. We're actively working on networking and have all the essential features up and running. While it's not server authoritative, the core functionalities are in place. Additionally, we're in the process of making it a fork of the parent repository. We're currently focusing on networking our voxel engine alongside UCC3 and NGO, actively searching for and addressing any bugs that may arise with networking.

MLAPI is the old branch, this is using NetCode for GameObjects
https://github.com/GreedyVox/MLAPI/tree/GreedyVox/MLAPI/UCC3

Note: Still in progress, but is a stable working branch, will be releasing a video of it in action with our voxel tech.
Sorry I just reread what you sent, I sometimes have a little trouble with English and I tend to panic over nothing, so I wanted to say thank you very much for sharing.
 
Hi, everyone!

The community gave me an idea by thinking that everything would be on the same project (Mirror, Fishnet and Netcode), and I thought about it, the only thing that blocks me is Fishnet at the NetworkManager level, but I will see to integrated Netcode in the same project but I don't promise anything. Besides, I started by renaming the Rpc in relation to Netcode because Mirror has no restrictions at this level. Subsequently, this will help me manage updates more easily, because I would not need to switch between several projects. I will keep you informed in any case.

See you soon!
 
Last edited:
Hi @GreedyVox, how are you?
How can we allow Client-Rpc only on Server?
Old Netcode was better for this!
Not 100% sure about this question, so will show how things have changed, note the new changes are pretty good, once you know how it works, cause they have made a lot of changes. I will list all the new types of Rpc, one thing to note with the new Rpc, if running as a host, some of the Rpc will be called twice, once for server and once for client, wish there was a default that will only call on a host once instead of twice, but you can roll your own if need be, or have a if statement filter.

Code:
[Rpc(SendTo.Server)]
[Rpc(SendTo.NotServer)]
[Rpc(SendTo.Authority)]
[Rpc(SendTo.NotAuthority)]
[Rpc(SendTo.Owner)]
[Rpc(SendTo.NotOwner)]
[Rpc(SendTo.Me)]
[Rpc(SendTo.NotMe)]
[Rpc(SendTo.Everyone)]
[Rpc(SendTo.ClientsAndHost)]
[Rpc(SendTo.SpecifiedInParams)]

Link to what each Rpc is used for.
https://docs-multiplayer.unity3d.com/netcode/current/advanced-topics/message-system/rpc/

Sharing an example of something cool you can do with the new system, code below is handy for a client joining a server, by notifying the server of the non owner object spawning, which the server replies with the data requests, the only network traffic is between the client object that was spawned and the server. Please note in the example below generates garbage collection(RpcTargetUse.Temp) and its only being used once, if you are creating your own Rpc targets that is used frequently, create some custom targets instead for reuse.

C#:
private readonly Dictionary<int3, NetworkObjectReference> m_ChunkManager = new(4096);
public override void OnNetworkSpawn()
{
    if (!IsOwner)
        OnSyncChunkEventRpc();
    base.OnNetworkSpawn();
}
/// <summary>
/// A player connected syncing node event sent.
/// </summary>
[Rpc(SendTo.Server, Delivery = RpcDelivery.Reliable)]
private void OnSyncChunkEventRpc(RpcParams rpc = default)
{
    foreach (var chunk in m_ChunkManager)
        OnSyncChunkEventRpc(chunk.Key.ToVector3Int(), chunk.Value, RpcTarget.Single(rpc.Receive.SenderClientId, RpcTargetUse.Temp));
}
/// <summary>
/// Sync all network objects to the player connecting.
/// </summary>
[Rpc(SendTo.SpecifiedInParams, Delivery = RpcDelivery.Reliable)]
private void OnSyncChunkEventRpc(Vector3Int loc, NetworkObjectReference obj, RpcParams rpc = default)
{
    if (m_ChunkManager.TryAdd(loc.ToInt3(), obj))
        Debug.Log($"<color=white>Added Network Chunk: [<color=black><b>{loc} | {obj}</b></color>]</color>");
}
 
Last edited:
Not 100% sure about this question, so will show how things have changed, note the new changes are pretty good, once you know how it works, cause they have made a lot of changes. I will list all the new types of Rpc, one thing to note with the new Rpc, if running as a host, some of the Rpc will be called twice, once for server and once for client, wish there was a default that will only call on a host once instead of twice, but you can roll your own if need be, or have a if statement filter.

Code:
[Rpc(SendTo.Server)]
[Rpc(SendTo.NotServer)]
[Rpc(SendTo.Authority)]
[Rpc(SendTo.NotAuthority)]
[Rpc(SendTo.Owner)]
[Rpc(SendTo.NotOwner)]
[Rpc(SendTo.Me)]
[Rpc(SendTo.NotMe)]
[Rpc(SendTo.Everyone)]
[Rpc(SendTo.ClientsAndHost)]
[Rpc(SendTo.SpecifiedInParams)]

Link to what each Rpc is used for.
https://docs-multiplayer.unity3d.com/netcode/current/advanced-topics/message-system/rpc/

Sharing an example of something cool you can do with the new system, code below is handy for a client joining a server, by notifying the server of the non owner object spawning, which the server replies with the data requests, the only network traffic is between the client object that was spawned and the server. Please note in the example below generates garbage collection(RpcTargetUse.Temp) and its only being used once, if you are creating your own Rpc targets that is used frequently, create some custom targets instead for reuse.

C#:
private readonly Dictionary<int3, NetworkObjectReference> m_ChunkManager = new(4096);
public override void OnNetworkSpawn()
{
    if (!IsOwner)
        OnSyncChunkEventRpc();
    base.OnNetworkSpawn();
}
/// <summary>
/// A player connected syncing node event sent.
/// </summary>
[Rpc(SendTo.Server, Delivery = RpcDelivery.Reliable)]
private void OnSyncChunkEventRpc(RpcParams rpc = default)
{
    foreach (var chunk in m_ChunkManager)
        OnSyncChunkEventRpc(chunk.Key.ToVector3Int(), chunk.Value, RpcTarget.Single(rpc.Receive.SenderClientId, RpcTargetUse.Temp));
}
/// <summary>
/// Sync all network objects to the player connecting.
/// </summary>
[Rpc(SendTo.SpecifiedInParams, Delivery = RpcDelivery.Reliable)]
private void OnSyncChunkEventRpc(Vector3Int loc, NetworkObjectReference obj, RpcParams rpc = default)
{
    if (m_ChunkManager.TryAdd(loc.ToInt3(), obj))
        Debug.Log($"<color=white>Added Network Chunk: [<color=black><b>{loc} | {obj}</b></color>]</color>");
}
Yes I had seen that, I always look at the official documentation, thanks anyway.
 
More advance way of networking data, which is better for a server authority model script that requires constant intensive network traffic, I would use custom messaging, on the GitHub branch check out the script NetCodeCharacterTransformMonitor for a example, link below.

https://github.com/GreedyVox/MLAPI/...Character/NetCodeCharacterTransformMonitor.cs
In fact you have to send the Client-Rpc to the server each time, and check if the sender is the server otherwise you have to disconnect the client.

I posted a Feature Request on the Official Unity Netcode Forum:
In your project, you need replace [Rpc(SendTo.Server)] by [Rpc(SendTo.Server, RequireOwnership = true)]
 
Last edited:
Top