Skip to content

Commit a9a6ec2

Browse files
authored
fix: do not override GlobalObjectIdHash in Editor (#744)
* fix: do not override GlobalObjectIdHash in Editor * squash
1 parent 9aa543c commit a9a6ec2

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,9 @@ public ulong LocalClientId
201201

202202
internal static event Action OnSingletonReady;
203203

204+
#if UNITY_EDITOR
205+
internal static bool IsTestRun = false;
206+
204207
private void OnValidate()
205208
{
206209
if (NetworkConfig == null)
@@ -226,7 +229,6 @@ private void OnValidate()
226229
}
227230

228231
NetworkConfig.RegisteredScenes.Add(activeSceneName);
229-
#if UNITY_EDITOR
230232
UnityEditor.EditorApplication.delayCall += () =>
231233
{
232234
if (!UnityEditor.EditorApplication.isPlaying)
@@ -235,7 +237,6 @@ private void OnValidate()
235237
UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(activeScene);
236238
}
237239
};
238-
#endif
239240
}
240241

241242
for (int i = 0; i < NetworkConfig.NetworkPrefabs.Count; i++)
@@ -272,6 +273,7 @@ private void OnValidate()
272273
var networkPrefab = NetworkConfig.NetworkPrefabs.FirstOrDefault(x => x.IsPlayer);
273274
NetworkConfig.PlayerPrefabHash = networkPrefab?.Hash ?? (uint)0;
274275
}
276+
#endif
275277

276278
private void Init(bool server)
277279
{

com.unity.multiplayer.mlapi/Runtime/Core/NetworkObject.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using MLAPI.Logging;
88
using MLAPI.Messaging;
99
using MLAPI.Serialization.Pooled;
10-
using MLAPI.Spawning;
1110
using MLAPI.Transports;
1211
using UnityEngine;
1312

@@ -27,6 +26,12 @@ public sealed class NetworkObject : MonoBehaviour
2726
#if UNITY_EDITOR
2827
private void OnValidate()
2928
{
29+
if (UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && !NetworkManager.IsTestRun)
30+
{
31+
// do NOT override GlobalObjectIdHash while getting into PlayMode in the Editor
32+
return;
33+
}
34+
3035
var globalObjectIdString = UnityEditor.GlobalObjectId.GetGlobalObjectIdSlow(this).ToString();
3136
GlobalObjectIdHash = XXHash.Hash32(globalObjectIdString);
3237
}
@@ -333,7 +338,7 @@ public static void NetworkHide(List<NetworkObject> networkObjects, ulong clientI
333338

334339
private void OnDestroy()
335340
{
336-
if (NetworkManager.Singleton != null && NetworkManager.Singleton.SpawnManager.SpawnedObjects.ContainsKey(NetworkObjectId))
341+
if (NetworkManager.Singleton != null && NetworkManager.Singleton.SpawnManager != null && NetworkManager.Singleton.SpawnManager.SpawnedObjects.ContainsKey(NetworkObjectId))
337342
{
338343
NetworkManager.Singleton.SpawnManager.OnDestroyObject(NetworkObjectId, false);
339344
}

com.unity.multiplayer.mlapi/Tests/Runtime/GlobalObjectIdHash/NetworkPrefabGlobalObjectIdHashTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
2525
[UnitySetUp]
2626
public IEnumerator Setup()
2727
{
28+
NetworkManager.IsTestRun = true;
29+
2830
SceneManager.sceneLoaded += OnSceneLoaded;
2931

3032
var execAssembly = Assembly.GetExecutingAssembly();
@@ -43,6 +45,8 @@ public IEnumerator Teardown()
4345
{
4446
yield return SceneManager.UnloadSceneAsync(m_TestScene);
4547
}
48+
49+
NetworkManager.IsTestRun = false;
4650
}
4751

4852
[Test]

0 commit comments

Comments
 (0)