Skip to content

chore: remove UNET [MTT-3435] #638

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
May 12, 2022
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ For Unity Relay based multiplayer sessions, some setup is required. Please see o
Please see [Multiplayer over internet](README.md) section of our Readme for more information on using either one.

To allow for any of these options to be chosen at runtime we created `TransportPicker`. It allows one to choose between an IP-based and a Relay-based transport and will hook up the game UI to use those transports. The transport field in the `NetworkManager` will be ignored. Currently we support the following transports:
- **UNET(IP):** UNET is the default Netcode transport. However, it is not the default IP transport for Boss Room.
- **UTP (IP):** Unity Transport Package is a network transport layer, packaged with network simulation tools which are useful for spotting networking issues early during development. This IP based protocol is the default IP transport for Boss Room. See the documentation on [Unity Transport Package](https://docs-multiplayer.unity3d.com/docs/transport-utp/about-transport-utp/#unity-transport-package-utp).
- **Unity (Relay):** Unity Relay is a relay service provided by Unity services, supported by Unity Transport. Read more about [Unity Relay](https://docs-multiplayer.unity3d.com/docs/relay/relay).

Expand Down
163 changes: 14 additions & 149 deletions Assets/BossRoom/Prefabs/NetworkingManager.prefab
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5436007408952557925}
m_RootOrder: 1
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &5486862276979889515
MonoBehaviour:
Expand Down Expand Up @@ -59,65 +60,6 @@ MonoBehaviour:
PacketDelayMS: 0
PacketJitterMS: 0
PacketDropRate: 0
--- !u!1 &503411707
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 503411708}
- component: {fileID: 503411709}
m_Layer: 0
m_Name: Relay UTP
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &503411708
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 503411707}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 5436007408952557925}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &503411709
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 503411707}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 6960e84d07fb87f47956e7a81d71c4e6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ProtocolType: 1
m_MaxPacketQueueSize: 512
m_MaxPayloadSize: 32000
m_MaxSendQueueSize: 50000000
m_HeartbeatTimeoutMS: 500
m_ConnectTimeoutMS: 1000
m_MaxConnectAttempts: 60
m_DisconnectTimeoutMS: 10000
ConnectionData:
Address: 127.0.0.1
Port: 7777
ServerListenAddress:
DebugSimulator:
PacketDelayMS: 0
PacketJitterMS: 0
PacketDropRate: 0
--- !u!1 &5436007408952557947
GameObject:
m_ObjectHideFlags: 0
Expand All @@ -127,7 +69,6 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 5436007408952557925}
- component: {fileID: 1359040526}
- component: {fileID: 5436007408952557924}
m_Layer: 0
m_Name: NetworkingManager
Expand All @@ -146,27 +87,12 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1861090270400447367}
- {fileID: 347284043}
- {fileID: 503411708}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1359040526
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5436007408952557947}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0c0e18361257a9f409d6064bac74e732, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IpHostTransport: {fileID: 5486862276979889515}
m_UnityRelayTransport: {fileID: 503411709}
--- !u!114 &5436007408952557924
MonoBehaviour:
m_ObjectHideFlags: 0
Expand All @@ -184,66 +110,55 @@ MonoBehaviour:
NetworkConfig:
ProtocolVersion: 0
NetworkTransport: {fileID: 5486862276979889515}
PlayerPrefab: {fileID: 4927145850774787080, guid: 1d3f5528d25661949890bcd7f47fe81a,
type: 3}
PlayerPrefab: {fileID: 4927145850774787080, guid: 1d3f5528d25661949890bcd7f47fe81a, type: 3}
NetworkPrefabs:
- Override: 0
Prefab: {fileID: 6009713983291384756, guid: 8237adf32a9b6de4892e6febe6b4bdef,
type: 3}
Prefab: {fileID: 6009713983291384756, guid: 8237adf32a9b6de4892e6febe6b4bdef, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 3713729372785093424, guid: 6cdd52f1fa2ed34469a487ae6477eded,
type: 3}
Prefab: {fileID: 3713729372785093424, guid: 6cdd52f1fa2ed34469a487ae6477eded, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 3688950541947916333, guid: 365e94337fd10fe4ebde1906df413ac7,
type: 3}
Prefab: {fileID: 3688950541947916333, guid: 365e94337fd10fe4ebde1906df413ac7, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 2842198241268549130, guid: 30c420f004b8f6445ad2bdb2addb234a,
type: 3}
Prefab: {fileID: 2842198241268549130, guid: 30c420f004b8f6445ad2bdb2addb234a, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 2842198241268549130, guid: 7e3b8103f5622f64fa677352730f295c,
type: 3}
Prefab: {fileID: 2842198241268549130, guid: 7e3b8103f5622f64fa677352730f295c, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 2842198241268549130, guid: 411974b75a8b43d4e9b3c9069a5067fb,
type: 3}
Prefab: {fileID: 2842198241268549130, guid: 411974b75a8b43d4e9b3c9069a5067fb, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 2842198241268549130, guid: 0251e08eeed89e844a8527b3a7874cc2,
type: 3}
Prefab: {fileID: 2842198241268549130, guid: 0251e08eeed89e844a8527b3a7874cc2, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 576565557002701866, guid: 3af96a32a84bcf74d9538fa7af973c97,
type: 3}
Prefab: {fileID: 576565557002701866, guid: 3af96a32a84bcf74d9538fa7af973c97, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 3597354879354517420, guid: c8513d3df780cb34a9576da3772d512b,
type: 3}
Prefab: {fileID: 3597354879354517420, guid: c8513d3df780cb34a9576da3772d512b, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 3106828016798330210, guid: 5c107a985e30aa2469a62ecf015d43a8,
type: 3}
Prefab: {fileID: 3106828016798330210, guid: 5c107a985e30aa2469a62ecf015d43a8, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
Expand All @@ -262,53 +177,3 @@ MonoBehaviour:
LoadSceneTimeOut: 120
SpawnTimeout: 1
EnableNetworkLogs: 1
--- !u!1 &7311172147761373013
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1861090270400447367}
- component: {fileID: 7738483995325753316}
m_Layer: 0
m_Name: UnetTransport2
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1861090270400447367
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7311172147761373013}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 5436007408952557925}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7738483995325753316
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7311172147761373013}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b84c2d8dfe509a34fb59e2b81f8e1319, type: 3}
m_Name:
m_EditorClassIdentifier:
MessageBufferSize: 5120
MaxConnections: 100
MaxSentMessageQueueSize: 128
ConnectAddress: 127.0.0.1
ConnectPort: 7777
ServerListenPort: 7777
MessageSendMode: 0
28 changes: 4 additions & 24 deletions Assets/BossRoom/Scripts/Game/Client/UI/IPConnectionWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using TMPro;
using Unity.Multiplayer.Samples.BossRoom.Shared.Infrastructure;
using Unity.Netcode;
using Unity.Netcode.Transports.UNET;
using Unity.Netcode.Transports.UTP;
using UnityEngine;

Expand Down Expand Up @@ -47,29 +46,17 @@ void Hide()

public void ShowConnectingWindow()
{
var chosenTransport = NetworkManager.Singleton.gameObject.GetComponent<TransportPicker>().IpHostTransport;
NetworkManager.Singleton.NetworkConfig.NetworkTransport = chosenTransport;

void OnTimeElapsed()
{
m_ConnectStatusPublisher.Publish(ConnectStatus.StartClientFailed);
Hide();
m_IPUIMediator.DisableSignInSpinner();
}

switch (chosenTransport)
{
case UNetTransport unetTransport:
StartCoroutine(WaitUntilUNETDisconnected(OnTimeElapsed));
break;
case UnityTransport unityTransport:
var maxConnectAttempts= unityTransport.MaxConnectAttempts;
var connectTimeoutMS= unityTransport.ConnectTimeoutMS;
StartCoroutine(DisplayUTPConnectionDuration(maxConnectAttempts, connectTimeoutMS, OnTimeElapsed));
break;
default:
throw new ArgumentOutOfRangeException(nameof(chosenTransport));
}
var utp = (UnityTransport) NetworkManager.Singleton.NetworkConfig.NetworkTransport;
var maxConnectAttempts = utp.MaxConnectAttempts;
var connectTimeoutMS = utp.ConnectTimeoutMS;
StartCoroutine(DisplayUTPConnectionDuration(maxConnectAttempts, connectTimeoutMS, OnTimeElapsed));

Show();
}
Expand All @@ -80,13 +67,6 @@ public void CancelConnectionWindow()
StopAllCoroutines();
}

IEnumerator WaitUntilUNETDisconnected(Action endAction)
{
yield return new WaitUntil(() => !NetworkManager.Singleton.IsListening);

endAction();
}

IEnumerator DisplayUTPConnectionDuration(int maxReconnectAttempts, int connectTimeoutMS, Action endAction)
{
var connectionDuration = maxReconnectAttempts * connectTimeoutMS / 1000f;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,13 +205,13 @@ public async void QuickJoinRequest()
}
}

void OnJoinedLobby(Lobby remoteLobby)
async void OnJoinedLobby(Lobby remoteLobby)
{
m_LobbyServiceFacade.SetRemoteLobby(remoteLobby);
m_GameNetPortal.PlayerName = m_LocalUser.DisplayName;

Debug.Log($"Joined lobby with code: {m_LocalLobby.LobbyCode}, Internal Relay Join Code{m_LocalLobby.RelayJoinCode}");
m_ClientNetPortal.StartClientUnityRelayModeAsync(OnRelayJoinFailed);
await m_ClientNetPortal.StartClientUnityRelayModeAsync(OnRelayJoinFailed);

void OnRelayJoinFailed(string message)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
using UnityEngine.SceneManagement;
using Unity.Multiplayer.Samples.Utilities;
using Unity.Netcode;
using Unity.Netcode.Transports.UNET;
using Unity.Netcode.Transports.UTP;

namespace Unity.Multiplayer.Samples.BossRoom.Client
Expand Down Expand Up @@ -205,7 +204,7 @@ private IEnumerator TryToReconnect(string lobbyCode)
if (joiningLobby.Result.Success)
{
m_LobbyServiceFacade.SetRemoteLobby(joiningLobby.Result.Lobby);
var joiningRelay = JoinRelayAsync();
var joiningRelay = StartClientUnityRelayModeAsync(null);
yield return new WaitUntil(() => joiningRelay.IsCompleted);
}
else
Expand Down Expand Up @@ -244,35 +243,13 @@ private IEnumerator TryToReconnect(string lobbyCode)
/// <param name="port">The port of the host to connect to. </param>
public void StartClient(string ipaddress, int port)
{
var chosenTransport = NetworkManager.Singleton.gameObject.GetComponent<TransportPicker>().IpHostTransport;
NetworkManager.Singleton.NetworkConfig.NetworkTransport = chosenTransport;

switch (chosenTransport)
{
case UNetTransport unetTransport:
unetTransport.ConnectAddress = ipaddress;
unetTransport.ConnectPort = port;
break;
case UnityTransport unityTransport:
// TODO: once this is exposed in the adapter we will be able to change it
unityTransport.SetConnectionData(ipaddress, (ushort)port);
break;
default:
throw new ArgumentOutOfRangeException(nameof(chosenTransport));
}
var utp = (UnityTransport)NetworkManager.Singleton.NetworkConfig.NetworkTransport;
utp.SetConnectionData(ipaddress, (ushort)port);

ConnectClient();
}

public async void StartClientUnityRelayModeAsync(Action<string> onFailure)
{
var utp = (UnityTransport)NetworkManager.Singleton.gameObject.GetComponent<TransportPicker>().UnityRelayTransport;
NetworkManager.Singleton.NetworkConfig.NetworkTransport = utp;

await JoinRelayAsync(onFailure);
}

async Task JoinRelayAsync(Action<string> onFailure = null)
public async Task StartClientUnityRelayModeAsync(Action<string> onFailure)
{
Debug.Log($"Setting Unity Relay client with join code {m_LocalLobby.RelayJoinCode}");

Expand All @@ -282,7 +259,7 @@ async Task JoinRelayAsync(Action<string> onFailure = null)
await UnityRelayUtilities.JoinRelayServerFromJoinCode(m_LocalLobby.RelayJoinCode);

await m_LobbyServiceFacade.UpdatePlayerRelayInfoAsync(allocationIdBytes.ToString(), m_LocalLobby.RelayJoinCode);
var utp = (UnityTransport) NetworkManager.Singleton.NetworkConfig.NetworkTransport;
var utp = (UnityTransport)NetworkManager.Singleton.NetworkConfig.NetworkTransport;
utp.SetClientRelayData(ipv4Address, port, allocationIdBytes, key, connectionData, hostConnectionData, isSecure: true);
}
catch (Exception e)
Expand Down
Loading