diff --git a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs index b503a425f4..65adab6d35 100644 --- a/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs +++ b/com.unity.multiplayer.mlapi/Prototyping/NetworkTransform.cs @@ -188,7 +188,7 @@ private void Awake() m_Transform = transform; } - public override void NetworkStart() + public override void OnNetworkSpawn() { void SetupVar(NetworkVariable v, T initialValue, ref T oldVal) { diff --git a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkBehaviour.cs b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkBehaviour.cs index fa6c530057..8a6c34ef17 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkBehaviour.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkBehaviour.cs @@ -295,9 +295,6 @@ protected NetworkBehaviour GetNetworkBehaviour(ushort behaviourId) /// public ulong OwnerClientId => NetworkObject.OwnerClientId; - internal bool NetworkStartInvoked = false; - internal bool InternalNetworkStartInvoked = false; - /// /// Stores the network tick at the NetworkBehaviourUpdate time /// This allows sending NetworkVariables not more often than once per network tick, regardless of the update rate @@ -307,22 +304,32 @@ protected NetworkBehaviour GetNetworkBehaviour(ushort behaviourId) /// /// Gets called when message handlers are ready to be registered and the network is setup /// - public virtual void NetworkStart() { } + public virtual void OnNetworkSpawn() { } /// - /// Gets called when message handlers are ready to be registered and the network is setup. Provides a Payload if it was provided + /// Gets called when the gets spawned, message handlers are ready to be registered and the network is setup. Provides a Payload if it was provided /// /// The stream containing the spawn payload - public virtual void NetworkStart(Stream stream) + public virtual void OnNetworkSpawn(Stream stream) { - NetworkStart(); + OnNetworkSpawn(); } - internal void InternalNetworkStart() + /// + /// Gets called when the gets de-spawned. Is called both on the server and clients. + /// + public virtual void OnNetworkDespawn() { } + + internal void InternalOnNetworkSpawn() { InitializeVariables(); } + internal void InternalOnNetworkDespawn() + { + + } + /// /// Gets called when the local client gains ownership of this object /// diff --git a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs index c2c9af165b..de2d275029 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs @@ -1478,7 +1478,7 @@ internal void OnClientDisconnectFromServer(ulong clientId) if (PrefabHandler.ContainsHandler(ConnectedClients[clientId].PlayerObject.GlobalObjectIdHash)) { PrefabHandler.HandleNetworkPrefabDestroy(ConnectedClients[clientId].PlayerObject); - SpawnManager.OnDestroyObject(ConnectedClients[clientId].PlayerObject.NetworkObjectId, false); + SpawnManager.OnDespawnObject(ConnectedClients[clientId].PlayerObject.NetworkObjectId, false); } else { @@ -1496,7 +1496,7 @@ internal void OnClientDisconnectFromServer(ulong clientId) if (PrefabHandler.ContainsHandler(ConnectedClients[clientId].OwnedObjects[i].GlobalObjectIdHash)) { PrefabHandler.HandleNetworkPrefabDestroy(ConnectedClients[clientId].OwnedObjects[i]); - SpawnManager.OnDestroyObject(ConnectedClients[clientId].OwnedObjects[i].NetworkObjectId, false); + SpawnManager.OnDespawnObject(ConnectedClients[clientId].OwnedObjects[i].NetworkObjectId, false); } else { diff --git a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkObject.cs b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkObject.cs index d1e62c92f0..4db53ee1ca 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Core/NetworkObject.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Core/NetworkObject.cs @@ -397,7 +397,7 @@ private void OnDestroy() { if (NetworkManager != null && NetworkManager.SpawnManager != null && NetworkManager.SpawnManager.SpawnedObjects.ContainsKey(NetworkObjectId)) { - NetworkManager.SpawnManager.OnDestroyObject(NetworkObjectId, false); + NetworkManager.SpawnManager.OnDespawnObject(NetworkObjectId, false); } } @@ -504,33 +504,21 @@ internal void InvokeBehaviourOnGainedOwnership() } } - internal void ResetNetworkStartInvoked() + internal void InvokeBehaviourNetworkSpawn(Stream stream) { - if (ChildNetworkBehaviours != null) + for (int i = 0; i < ChildNetworkBehaviours.Count; i++) { - for (int i = 0; i < ChildNetworkBehaviours.Count; i++) - { - ChildNetworkBehaviours[i].NetworkStartInvoked = false; - } + ChildNetworkBehaviours[i].InternalOnNetworkSpawn(); + ChildNetworkBehaviours[i].OnNetworkSpawn(stream); } } - internal void InvokeBehaviourNetworkSpawn(Stream stream) + internal void InvokeBehaviourNetworkDespawn() { for (int i = 0; i < ChildNetworkBehaviours.Count; i++) { - //We check if we are it's NetworkObject owner incase a NetworkObject exists as a child of our NetworkObject - if (!ChildNetworkBehaviours[i].NetworkStartInvoked) - { - if (!ChildNetworkBehaviours[i].InternalNetworkStartInvoked) - { - ChildNetworkBehaviours[i].InternalNetworkStart(); - ChildNetworkBehaviours[i].InternalNetworkStartInvoked = true; - } - - ChildNetworkBehaviours[i].NetworkStart(stream); - ChildNetworkBehaviours[i].NetworkStartInvoked = true; - } + ChildNetworkBehaviours[i].InternalOnNetworkDespawn(); + ChildNetworkBehaviours[i].OnNetworkDespawn(); } } @@ -698,7 +686,7 @@ internal void SerializeSceneObject(NetworkWriter writer, ulong targetClientId) // If our current buffer position is greater than our positionBeforeNetworkVariableData then we wrote NetworkVariable data // Part 1: This will include the total NetworkVariable data size, if there was NetworkVariable data written, to the stream // in order to be able to skip past this entry on the deserialization side in the event this NetworkObject fails to be - // constructed (See Part 2 below in the DeserializeSceneObject method) + // constructed (See Part 2 below in the DeserializeSceneObject method) if (buffer.Position > positionBeforeNetworkVariableData) { // Store our current stream buffer position diff --git a/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs b/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs index 4a4257343d..72de7e6bef 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs @@ -187,7 +187,7 @@ public void HandleDestroyObject(ulong clientId, Stream stream) using (var reader = PooledNetworkReader.Get(stream)) { ulong networkId = reader.ReadUInt64Packed(); - NetworkManager.SpawnManager.OnDestroyObject(networkId, true); + NetworkManager.SpawnManager.OnDespawnObject(networkId, true); } } diff --git a/com.unity.multiplayer.mlapi/Runtime/NetworkVariable/NetworkVariable.cs b/com.unity.multiplayer.mlapi/Runtime/NetworkVariable/NetworkVariable.cs index f337e018f9..e04768580a 100644 --- a/com.unity.multiplayer.mlapi/Runtime/NetworkVariable/NetworkVariable.cs +++ b/com.unity.multiplayer.mlapi/Runtime/NetworkVariable/NetworkVariable.cs @@ -210,7 +210,7 @@ public void ReadField(Stream stream) /// public void WriteField(Stream stream) { - using (var writer = PooledNetworkWriter.Get(stream)) + using (var writer = PooledNetworkWriter.Get(stream)) { writer.WriteObjectPacked(m_InternalValue); //BOX } diff --git a/com.unity.multiplayer.mlapi/Runtime/Spawning/NetworkSpawnManager.cs b/com.unity.multiplayer.mlapi/Runtime/Spawning/NetworkSpawnManager.cs index 8a19ba9e1f..466c2bc739 100644 --- a/com.unity.multiplayer.mlapi/Runtime/Spawning/NetworkSpawnManager.cs +++ b/com.unity.multiplayer.mlapi/Runtime/Spawning/NetworkSpawnManager.cs @@ -332,8 +332,6 @@ internal void SpawnNetworkObjectLocally(NetworkObject networkObject, ulong netwo } } - networkObject.ResetNetworkStartInvoked(); - if (readPayload) { using (var payloadBuffer = PooledNetworkBuffer.Get()) @@ -452,7 +450,7 @@ internal void DespawnObject(NetworkObject networkObject, bool destroyObject = fa throw new NotServerException("Only server can despawn objects"); } - OnDestroyObject(networkObject.NetworkObjectId, destroyObject); + OnDespawnObject(networkObject.NetworkObjectId, destroyObject); } // Makes scene objects ready to be reused @@ -490,7 +488,7 @@ internal void ServerDestroySpawnedSceneObjects() if (NetworkManager.PrefabHandler != null && NetworkManager.PrefabHandler.ContainsHandler(sobj)) { NetworkManager.PrefabHandler.HandleNetworkPrefabDestroy(sobj); - OnDestroyObject(sobj.NetworkObjectId, false); + OnDespawnObject(sobj.NetworkObjectId, false); } else { @@ -514,7 +512,7 @@ internal void DestroyNonSceneObjects() { NetworkManager.PrefabHandler.HandleNetworkPrefabDestroy(networkObjects[i]); - OnDestroyObject(networkObjects[i].NetworkObjectId, false); + OnDespawnObject(networkObjects[i].NetworkObjectId, false); } else { @@ -538,7 +536,7 @@ internal void DestroySceneObjects() if (NetworkManager.PrefabHandler.ContainsHandler(networkObjects[i])) { NetworkManager.PrefabHandler.HandleNetworkPrefabDestroy(networkObjects[i]); - OnDestroyObject(networkObjects[i].NetworkObjectId, false); + OnDespawnObject(networkObjects[i].NetworkObjectId, false); } else { @@ -599,7 +597,7 @@ internal void ClientCollectSoftSyncSceneObjectSweep(NetworkObject[] networkObjec } } - internal void OnDestroyObject(ulong networkId, bool destroyGameObject) + internal void OnDespawnObject(ulong networkId, bool destroyGameObject) { if (NetworkManager == null) { @@ -607,13 +605,13 @@ internal void OnDestroyObject(ulong networkId, bool destroyGameObject) } //Removal of spawned object - if (!SpawnedObjects.TryGetValue(networkId, out NetworkObject sobj)) + if (!SpawnedObjects.TryGetValue(networkId, out NetworkObject networkObject)) { Debug.LogWarning($"Trying to destroy object {networkId} but it doesn't seem to exist anymore!"); return; } - if (!sobj.IsOwnedByServer && !sobj.IsPlayerObject && NetworkManager.Singleton.ConnectedClients.TryGetValue(sobj.OwnerClientId, out NetworkClient networkClient)) + if (!networkObject.IsOwnedByServer && !networkObject.IsPlayerObject && NetworkManager.Singleton.ConnectedClients.TryGetValue(networkObject.OwnerClientId, out NetworkClient networkClient)) { //Someone owns it. for (int i = networkClient.OwnedObjects.Count - 1; i > -1; i--) @@ -625,7 +623,8 @@ internal void OnDestroyObject(ulong networkId, bool destroyGameObject) } } - sobj.IsSpawned = false; + networkObject.IsSpawned = false; + networkObject.InvokeBehaviourNetworkDespawn(); if (NetworkManager != null && NetworkManager.IsServer) { @@ -641,7 +640,7 @@ internal void OnDestroyObject(ulong networkId, bool destroyGameObject) var rpcQueueContainer = NetworkManager.RpcQueueContainer; if (rpcQueueContainer != null) { - if (sobj != null) + if (networkObject != null) { // As long as we have any remaining clients, then notify of the object being destroy. if (NetworkManager.ConnectedClientsList.Count > 0) @@ -668,14 +667,14 @@ internal void OnDestroyObject(ulong networkId, bool destroyGameObject) } } - var gobj = sobj.gameObject; + var gobj = networkObject.gameObject; if (destroyGameObject && gobj != null) { - if (NetworkManager.PrefabHandler.ContainsHandler(sobj)) + if (NetworkManager.PrefabHandler.ContainsHandler(networkObject)) { - NetworkManager.PrefabHandler.HandleNetworkPrefabDestroy(sobj); - OnDestroyObject(networkId, false); + NetworkManager.PrefabHandler.HandleNetworkPrefabDestroy(networkObject); + OnDespawnObject(networkId, false); } else { @@ -688,7 +687,7 @@ internal void OnDestroyObject(ulong networkId, bool destroyGameObject) // of the function if (SpawnedObjects.Remove(networkId)) { - SpawnedObjectsList.Remove(sobj); + SpawnedObjectsList.Remove(networkObject); } } } diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/RPCTests.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/RPCTests.cs index cb30ca511a..73493e3687 100644 --- a/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/RPCTests.cs +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/RPCTests.cs @@ -65,7 +65,6 @@ public IEnumerator TestRPCs() // Start the instances if (!MultiInstanceHelpers.Start(true, server, clients)) { - Debug.LogError("Failed to start instances"); Assert.Fail("Failed to start instances"); } diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject.meta b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject.meta new file mode 100644 index 0000000000..3b96bc20f2 --- /dev/null +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3a1f0974a98eaa1498ac39be872eeed4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject/NetworkObjectOnSpawnTests.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject/NetworkObjectOnSpawnTests.cs new file mode 100644 index 0000000000..0bf6720dad --- /dev/null +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject/NetworkObjectOnSpawnTests.cs @@ -0,0 +1,208 @@ +using System.Collections; +using System.Collections.Generic; +using MLAPI; +using MLAPI.RuntimeTests; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +namespace MLAPI.RuntimeTests +{ + public class NetworkObjectOnSpawnTests + { + private GameObject m_Prefab; + + /// + /// Tests that instantiating a and destroying without spawning it + /// does not run or . + /// + /// + [UnityTest] + public IEnumerator InstantiateDestroySpawnNotCalled() + { + var gameObject = new GameObject("InstantiateDestroySpawnNotCalled_Object"); + var networkObject = gameObject.AddComponent(); + var fail = gameObject.AddComponent(); + + yield return null; + + // instantiate + var instance = Object.Instantiate(gameObject); + yield return null; + + // destroy + Object.Destroy(instance); + yield return null; + } + + private class FailWhenSpawned : NetworkBehaviour + { + public override void OnNetworkSpawn() + { + Assert.Fail("Spawn should not be called on not spawned object"); + } + + public override void OnNetworkDespawn() + { + Assert.Fail("Depawn should not be called on not spawned object"); + } + } + + /// + /// Test that callbacks are run for playerobject spawn, despawn, regular spawn, destroy on server. + /// + /// + [UnityTest] + public IEnumerator TestOnNetworkSpawnCallbacks() + { + // Create Host and (numClients) clients + Assert.True(MultiInstanceHelpers.Create(2, out NetworkManager server, out NetworkManager[] clients)); + + // Create a default player GameObject to use + m_Prefab = new GameObject("TestObject"); + var networkObject = m_Prefab.AddComponent(); + + // add test component + m_Prefab.AddComponent(); + + // Make it a prefab + MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObject); + + // Set the player prefab + server.NetworkConfig.PlayerPrefab = m_Prefab; + + // Set all of the client's player prefab + for (int i = 0; i < clients.Length; i++) + { + clients[i].NetworkConfig.PlayerPrefab = m_Prefab; + } + + // Start the instances + if (!MultiInstanceHelpers.Start(true, server, clients)) + { + Assert.Fail("Failed to start instances"); + } + + // [Client-Side] Wait for a connection to the server + yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.WaitForClientsConnected(clients, null, 512)); + + // [Host-Side] Check to make sure all clients are connected + yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.WaitForClientsConnectedToServer(server, clients.Length + 1, null, 512)); + + // [Host-Side] Get the Host owned instance + var serverClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); + yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.GetNetworkObjectByRepresentation((x => x.IsPlayerObject && x.OwnerClientId == clients[0].LocalClientId), server, serverClientPlayerResult)); + + var serverInstance = serverClientPlayerResult.Result.GetComponent(); + + var clientInstances = new List(); + foreach (var client in clients) + { + var clientClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); + yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.GetNetworkObjectByRepresentation((x => x.IsPlayerObject && x.OwnerClientId == clients[0].LocalClientId), client, clientClientPlayerResult)); + var clientRpcTests = clientClientPlayerResult.Result.GetComponent(); + Assert.IsNotNull(clientRpcTests); + clientInstances.Add(clientRpcTests); + } + + // -------------- step 1 check player spawn despawn + + // check spawned on server + Assert.AreEqual(1, serverInstance.OnNetworkSpawnCalledCount); + + // safety check despawned + Assert.AreEqual(0, serverInstance.OnNetworkDespawnCalledCount); + + // check spawned on client + foreach (var clientInstance in clientInstances) + { + Assert.AreEqual(1, clientInstance.OnNetworkSpawnCalledCount); + + // safety check despawned + Assert.AreEqual(0, clientInstance.OnNetworkDespawnCalledCount); + } + + // despawn on server + serverInstance.GetComponent().Despawn(); + + // check despawned on server + Assert.AreEqual(1, serverInstance.OnNetworkDespawnCalledCount); + + // wait long enough for player object to be despawned + int nextFrameNumber = Time.frameCount + 2; + yield return new WaitUntil(() => Time.frameCount >= nextFrameNumber); + + // check despawned on clients + foreach (var clientInstance in clientInstances) + { + Assert.AreEqual(1, clientInstance.OnNetworkDespawnCalledCount); + } + + //----------- step 2 check spawn again and destroy + + serverInstance.GetComponent().Spawn(); + + // wait long enough for player object to be spawned + nextFrameNumber = Time.frameCount + 2; + yield return new WaitUntil(() => Time.frameCount >= nextFrameNumber); + + + // check spawned again on server this is 2 becaue we are reusing the object which was already spawned once. + Assert.AreEqual(2, serverInstance.OnNetworkSpawnCalledCount); + + // check spawned on client + foreach (var clientInstance in clientInstances) + { + Assert.AreEqual(1, clientInstance.OnNetworkSpawnCalledCount); + } + + // destroy the server object + Object.Destroy(serverInstance.gameObject); + + // wait one frame for destroy to kick in + yield return null; + + // check whether despawned was called again on server instance + Assert.AreEqual(2, serverInstance.OnNetworkDespawnCalledCount); + + // wait long enough for player object to be despawned on client + nextFrameNumber = Time.frameCount + 2; + yield return new WaitUntil(() => Time.frameCount >= nextFrameNumber); + + // check despawned on clients + foreach (var clientInstance in clientInstances) + { + Assert.AreEqual(1, clientInstance.OnNetworkDespawnCalledCount); + } + + // Shutdown and clean up both of our NetworkManager instances + MultiInstanceHelpers.Destroy(); + } + + private class TrackOnSpawnFunctions : NetworkBehaviour + { + public int OnNetworkSpawnCalledCount { get; private set; } + public int OnNetworkDespawnCalledCount { get; private set; } + + public override void OnNetworkSpawn() + { + OnNetworkSpawnCalledCount++; + } + + public override void OnNetworkDespawn() + { + OnNetworkDespawnCalledCount++; + } + } + + [TearDown] + public void TearDown() + { + if (m_Prefab != null) + { + Object.Destroy(m_Prefab); + m_Prefab = null; + } + } + } +} diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject/NetworkObjectOnSpawnTests.cs.meta b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject/NetworkObjectOnSpawnTests.cs.meta new file mode 100644 index 0000000000..407ad63b8f --- /dev/null +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject/NetworkObjectOnSpawnTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbb32425abaa21a44aeacf00f37ca4e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObjectSceneSerializationTests.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject/NetworkObjectSceneSerializationTests.cs similarity index 100% rename from com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObjectSceneSerializationTests.cs rename to com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject/NetworkObjectSceneSerializationTests.cs diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObjectSceneSerializationTests.cs.meta b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject/NetworkObjectSceneSerializationTests.cs.meta similarity index 100% rename from com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObjectSceneSerializationTests.cs.meta rename to com.unity.multiplayer.mlapi/Tests/Runtime/NetworkObject/NetworkObjectSceneSerializationTests.cs.meta diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkSpawnManagerTests.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkSpawnManagerTests.cs index e88b4c7b5a..e09b1a2084 100644 --- a/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkSpawnManagerTests.cs +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/NetworkSpawnManagerTests.cs @@ -47,7 +47,6 @@ public IEnumerator Setup() // Start the instances if (!MultiInstanceHelpers.Start(true, server, clients)) { - Debug.LogError("Failed to start instances"); Assert.Fail("Failed to start instances"); } diff --git a/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObjectComponent.cs b/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObjectComponent.cs index fe25a6632b..25671c3ef0 100644 --- a/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObjectComponent.cs +++ b/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObjectComponent.cs @@ -27,7 +27,7 @@ private void Start() } } - public override void NetworkStart() + public override void OnNetworkSpawn() { //For this example, the server controls whether the mesh is visible and can collide or not if(IsServer && IsHost) @@ -37,7 +37,7 @@ public override void NetworkStart() m_ActivateObjectButton.gameObject.SetActive(true); } } - base.NetworkStart(); + base.OnNetworkSpawn(); } public void ButtonActivateToggle() diff --git a/testproject/Assets/Scripts/PlayerMovement.cs b/testproject/Assets/Scripts/PlayerMovement.cs index 0e48e6537a..898733d2ab 100644 --- a/testproject/Assets/Scripts/PlayerMovement.cs +++ b/testproject/Assets/Scripts/PlayerMovement.cs @@ -32,9 +32,9 @@ private void Start() } } - public override void NetworkStart() + public override void OnNetworkSpawn() { - base.NetworkStart(); + base.OnNetworkSpawn(); Players[OwnerClientId] = this; // todo should really have a NetworkStop for unregistering this... } diff --git a/testproject/Assets/Tests/Manual/HybridScripts/RpcQueueManualTests.cs b/testproject/Assets/Tests/Manual/HybridScripts/RpcQueueManualTests.cs index 1f20e88408..a18bb25a5a 100644 --- a/testproject/Assets/Tests/Manual/HybridScripts/RpcQueueManualTests.cs +++ b/testproject/Assets/Tests/Manual/HybridScripts/RpcQueueManualTests.cs @@ -319,7 +319,7 @@ private void InitializeNetworkManager() /// /// Invoked upon the attached NetworkObject component being initialized by MLAPI /// - public override void NetworkStart() + public override void OnNetworkSpawn() { if (IsServer) { diff --git a/testproject/Assets/Tests/Manual/Scripts/ConnectionApprovalComponent.cs b/testproject/Assets/Tests/Manual/Scripts/ConnectionApprovalComponent.cs index 7257a3c5ed..4e0d21e8ae 100644 --- a/testproject/Assets/Tests/Manual/Scripts/ConnectionApprovalComponent.cs +++ b/testproject/Assets/Tests/Manual/Scripts/ConnectionApprovalComponent.cs @@ -60,7 +60,7 @@ private void Start() } } - public override void NetworkStart() + public override void OnNetworkSpawn() { if (m_SimulateFailure) { diff --git a/testproject/Assets/Tests/Manual/Scripts/NetworkPrefabPool.cs b/testproject/Assets/Tests/Manual/Scripts/NetworkPrefabPool.cs index ea0bcb1317..522b8c7d53 100644 --- a/testproject/Assets/Tests/Manual/Scripts/NetworkPrefabPool.cs +++ b/testproject/Assets/Tests/Manual/Scripts/NetworkPrefabPool.cs @@ -158,7 +158,7 @@ private void OnSceneSwitchBegin() /// /// Override NetworkBehaviour.NetworkStart /// - public override void NetworkStart() + public override void OnNetworkSpawn() { InitializeObjectPool(); if (IsServer) diff --git a/testproject/Assets/Tests/Manual/Scripts/NetworkSceneManagerCallbackTests.cs b/testproject/Assets/Tests/Manual/Scripts/NetworkSceneManagerCallbackTests.cs index 75911c1d4e..d3b9f05cef 100644 --- a/testproject/Assets/Tests/Manual/Scripts/NetworkSceneManagerCallbackTests.cs +++ b/testproject/Assets/Tests/Manual/Scripts/NetworkSceneManagerCallbackTests.cs @@ -11,7 +11,7 @@ public void StartHost() NetworkManager.StartHost(); } - public override void NetworkStart() + public override void OnNetworkSpawn() { if (IsServer) { diff --git a/testproject/Assets/Tests/Manual/Scripts/RandomMovement.cs b/testproject/Assets/Tests/Manual/Scripts/RandomMovement.cs index e149c7dd84..166456d1ba 100644 --- a/testproject/Assets/Tests/Manual/Scripts/RandomMovement.cs +++ b/testproject/Assets/Tests/Manual/Scripts/RandomMovement.cs @@ -12,7 +12,7 @@ public class RandomMovement : NetworkBehaviour, IPlayerMovement private Rigidbody m_Rigidbody; - public override void NetworkStart() + public override void OnNetworkSpawn() { m_Rigidbody = GetComponent(); if (NetworkObject != null && m_Rigidbody != null) diff --git a/testproject/Assets/Tests/Manual/Scripts/StatsDisplay.cs b/testproject/Assets/Tests/Manual/Scripts/StatsDisplay.cs index 86b657cb67..55236ef71a 100644 --- a/testproject/Assets/Tests/Manual/Scripts/StatsDisplay.cs +++ b/testproject/Assets/Tests/Manual/Scripts/StatsDisplay.cs @@ -40,7 +40,7 @@ private void Start() } } - public override void NetworkStart() + public override void OnNetworkSpawn() { if (NetworkManager.IsServer) { diff --git a/testproject/Assets/Tests/Manual/Scripts/SwitchSceneHandler.cs b/testproject/Assets/Tests/Manual/Scripts/SwitchSceneHandler.cs index 8e0c609ba9..a51418472f 100644 --- a/testproject/Assets/Tests/Manual/Scripts/SwitchSceneHandler.cs +++ b/testproject/Assets/Tests/Manual/Scripts/SwitchSceneHandler.cs @@ -55,7 +55,7 @@ private IEnumerator CheckForVisibility() yield return null; } - public override void NetworkStart() + public override void OnNetworkSpawn() { if (NetworkManager.Singleton && NetworkManager.Singleton.IsListening && NetworkManager.Singleton.IsServer) { @@ -68,7 +68,7 @@ public override void NetworkStart() { m_SwitchSceneButtonObject.SetActive(false); } - base.NetworkStart(); + base.OnNetworkSpawn(); } private SceneSwitchProgress m_CurrentSceneSwitchProgress; diff --git a/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs b/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs index 88f04048fd..f1f19cd0aa 100644 --- a/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs +++ b/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs @@ -115,7 +115,6 @@ private IEnumerator ConnectionApprovalHandler(int numClients, int failureTestCou // Start the instances if (!MultiInstanceHelpers.Start(true, server, clients)) { - Debug.LogError("Failed to start instances"); Assert.Fail("Failed to start instances"); } diff --git a/testproject/Assets/Tests/Runtime/RpcINetworkSerializable.cs b/testproject/Assets/Tests/Runtime/RpcINetworkSerializable.cs index e386637519..5ecc155f0b 100644 --- a/testproject/Assets/Tests/Runtime/RpcINetworkSerializable.cs +++ b/testproject/Assets/Tests/Runtime/RpcINetworkSerializable.cs @@ -56,7 +56,6 @@ public IEnumerator NetworkSerializableTest() // Start the instances if (!MultiInstanceHelpers.Start(true, server, clients)) { - Debug.LogError("Failed to start instances"); Assert.Fail("Failed to start instances"); } @@ -203,7 +202,6 @@ public IEnumerator NetworkSerializableArrayTestHandler(int arraySize, bool sendN // Start the instances if (!MultiInstanceHelpers.Start(true, server, clients)) { - Debug.LogError("Failed to start instances"); Assert.Fail("Failed to start instances"); } diff --git a/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs b/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs index 83e79db1ff..e018e5ae29 100644 --- a/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs +++ b/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs @@ -80,7 +80,6 @@ private IEnumerator AutomatedRpcTestsHandler(int numClients, bool useBatching = // Start the instances if (!MultiInstanceHelpers.Start(true, server, clients)) { - Debug.LogError("Failed to start instances"); Assert.Fail("Failed to start instances"); }