Skip to content

feat: replace scene registration with scenes in build list #1080

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
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
e0e9ca9
Squashed commit of the following:
NoelStephensUnity Aug 23, 2021
3e1c307
refactor
NoelStephensUnity Aug 23, 2021
473ab82
fix
NoelStephensUnity Aug 23, 2021
38a6092
refactor and fix
NoelStephensUnity Aug 24, 2021
9bba5e2
style
NoelStephensUnity Aug 24, 2021
5707ea3
Merge branch 'develop' into feat/replace-scene-registration-with-scen…
NoelStephensUnity Aug 24, 2021
9a940f4
Merge branch 'develop' into feat/replace-scene-registration-with-scen…
NoelStephensUnity Aug 24, 2021
0948ff6
refactor
NoelStephensUnity Aug 24, 2021
908b547
refactor
NoelStephensUnity Aug 24, 2021
0948eb5
Merge branch 'develop' into feat/replace-scene-registration-with-scen…
NoelStephensUnity Aug 24, 2021
d766225
refactor
NoelStephensUnity Aug 24, 2021
302806a
style
NoelStephensUnity Aug 24, 2021
f9eb801
Merge branch 'develop' into feat/replace-scene-registration-with-scen…
NoelStephensUnity Aug 26, 2021
cccd5fa
Merge branch 'develop' into feat/replace-scene-registration-with-scen…
NoelStephensUnity Aug 27, 2021
797c796
Merge branch 'develop' into feat/replace-scene-registration-with-scen…
NoelStephensUnity Aug 27, 2021
7825b55
fix
NoelStephensUnity Aug 27, 2021
734d362
refactor
NoelStephensUnity Aug 27, 2021
b6cd121
Merge branch 'develop' into feat/replace-scene-registration-with-scen…
NoelStephensUnity Aug 27, 2021
556a42a
refactor
NoelStephensUnity Aug 27, 2021
b3ae163
refactor
NoelStephensUnity Aug 28, 2021
9dd19bb
Merge branch 'develop' into feat/replace-scene-registration-with-scen…
NoelStephensUnity Aug 28, 2021
0941082
Merge branch 'develop' into feat/replace-scene-registration-with-scen…
NoelStephensUnity Aug 30, 2021
acfab6e
refactor
NoelStephensUnity Aug 30, 2021
82cf538
refactor
NoelStephensUnity Aug 30, 2021
a974752
refactor
NoelStephensUnity Aug 30, 2021
0b203fd
Update com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkS…
NoelStephensUnity Aug 30, 2021
c81d05d
Update com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkS…
NoelStephensUnity Aug 30, 2021
f24c16e
refactor
NoelStephensUnity Aug 30, 2021
07d722a
Merge branch 'feat/replace-scene-registration-with-scenes-in-build-li…
NoelStephensUnity Aug 30, 2021
8c18e4b
refactor
NoelStephensUnity Aug 30, 2021
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
38 changes: 1 addition & 37 deletions com.unity.netcode.gameobjects/Editor/NetworkManagerEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ public class NetworkManagerEditor : UnityEditor.Editor
// NetworkConfig fields
private SerializedProperty m_PlayerPrefabProperty;
private SerializedProperty m_ProtocolVersionProperty;
private SerializedProperty m_AllowRuntimeSceneChangesProperty;
private SerializedProperty m_NetworkTransportProperty;
private SerializedProperty m_TickRateProperty;
private SerializedProperty m_MaxObjectUpdatesPerTickProperty;
Expand All @@ -37,7 +36,6 @@ public class NetworkManagerEditor : UnityEditor.Editor
private SerializedProperty m_LoadSceneTimeOutProperty;

private ReorderableList m_NetworkPrefabsList;
private ReorderableList m_RegisteredSceneAssetsList;

private NetworkManager m_NetworkManager;
private bool m_Initialized;
Expand Down Expand Up @@ -91,8 +89,7 @@ private void Initialize()

// NetworkConfig properties
m_PlayerPrefabProperty = m_NetworkConfigProperty.FindPropertyRelative(nameof(NetworkConfig.PlayerPrefab));
m_ProtocolVersionProperty = m_NetworkConfigProperty.FindPropertyRelative("ProtocolVersion");
m_AllowRuntimeSceneChangesProperty = m_NetworkConfigProperty.FindPropertyRelative("AllowRuntimeSceneChanges");
m_ProtocolVersionProperty = m_NetworkConfigProperty.FindPropertyRelative("ProtocolVersion");
m_NetworkTransportProperty = m_NetworkConfigProperty.FindPropertyRelative("NetworkTransport");
m_TickRateProperty = m_NetworkConfigProperty.FindPropertyRelative("TickRate");
m_ClientConnectionBufferTimeoutProperty = m_NetworkConfigProperty.FindPropertyRelative("ClientConnectionBufferTimeout");
Expand Down Expand Up @@ -121,7 +118,6 @@ private void CheckNullProperties()
// NetworkConfig properties
m_PlayerPrefabProperty = m_NetworkConfigProperty.FindPropertyRelative(nameof(NetworkConfig.PlayerPrefab));
m_ProtocolVersionProperty = m_NetworkConfigProperty.FindPropertyRelative("ProtocolVersion");
m_AllowRuntimeSceneChangesProperty = m_NetworkConfigProperty.FindPropertyRelative("AllowRuntimeSceneChanges");
m_NetworkTransportProperty = m_NetworkConfigProperty.FindPropertyRelative("NetworkTransport");
m_TickRateProperty = m_NetworkConfigProperty.FindPropertyRelative("TickRate");
m_ClientConnectionBufferTimeoutProperty = m_NetworkConfigProperty.FindPropertyRelative("ClientConnectionBufferTimeout");
Expand Down Expand Up @@ -200,30 +196,6 @@ private void OnEnable()
}
};
m_NetworkPrefabsList.drawHeaderCallback = rect => EditorGUI.LabelField(rect, "NetworkPrefabs");

m_RegisteredSceneAssetsList = new ReorderableList(serializedObject, serializedObject.FindProperty(nameof(NetworkManager.NetworkConfig)).FindPropertyRelative(nameof(NetworkConfig.RegisteredSceneAssets)), true, true, true, true);
m_RegisteredSceneAssetsList.elementHeightCallback = index =>
{
return EditorGUIUtility.singleLineHeight + 8;
};
m_RegisteredSceneAssetsList.drawElementCallback = (rect, index, isActive, isFocused) =>
{
rect.y += 5;

var sceneAsset = m_RegisteredSceneAssetsList.serializedProperty.GetArrayElementAtIndex(index);
int firstLabelWidth = 24;
int padding = 2;

EditorGUI.LabelField(new Rect(rect.x, rect.y, firstLabelWidth, EditorGUIUtility.singleLineHeight), index.ToString());
EditorGUI.PropertyField(new Rect(rect.x + firstLabelWidth, rect.y, rect.width - firstLabelWidth - padding, EditorGUIUtility.singleLineHeight), sceneAsset, GUIContent.none);
};

m_RegisteredSceneAssetsList.drawHeaderCallback = rect => EditorGUI.LabelField(rect, "NetworkScenes");

m_RegisteredSceneAssetsList.onAddCallback = (registeredList) =>
{
m_NetworkManager.NetworkConfig.RegisteredSceneAssets.Add(null);
};
}

public override void OnInspectorGUI()
Expand Down Expand Up @@ -257,13 +229,6 @@ public override void OnInspectorGUI()
m_NetworkPrefabsList.DoLayoutList();
EditorGUILayout.Space();

using (new EditorGUI.DisabledScope(!m_NetworkManager.NetworkConfig.EnableSceneManagement))
{
m_RegisteredSceneAssetsList.DoLayoutList();
EditorGUILayout.Space();
}


EditorGUILayout.LabelField("General", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(m_ProtocolVersionProperty);

Expand Down Expand Up @@ -330,7 +295,6 @@ public override void OnInspectorGUI()
using (new EditorGUI.DisabledScope(!m_NetworkManager.NetworkConfig.EnableSceneManagement))
{
EditorGUILayout.PropertyField(m_LoadSceneTimeOutProperty);
EditorGUILayout.PropertyField(m_AllowRuntimeSceneChangesProperty);
}

serializedObject.ApplyModifiedProperties();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
using System;
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
using System.Linq;

namespace Unity.Netcode
Expand All @@ -26,25 +23,6 @@ public class NetworkConfig
[Tooltip("The NetworkTransport to use")]
public NetworkTransport NetworkTransport = null;

/// <summary>
/// The list of SceneNames built from the RegisteredSceneAssets list
/// </summary>
[HideInInspector]
public List<string> RegisteredScenes = new List<string>();

#if UNITY_EDITOR
[Tooltip("The Scenes that can be switched to by the server")]
public List<SceneAsset> RegisteredSceneAssets = new List<SceneAsset>();
#endif

/// <summary>
/// Whether or not runtime scene changes should be allowed and expected.
/// If this is true, clients with different initial configurations will not work together.
/// </summary>
[Tooltip("Whether or not runtime scene changes should be allowed and expected.\n " +
"If this is true, clients with different initial configurations will not work together.")]
public bool AllowRuntimeSceneChanges = false;

/// <summary>
/// The default player prefab
/// </summary>
Expand Down Expand Up @@ -173,12 +151,6 @@ public class NetworkConfig

public const int RttAverageSamples = 5; // number of RTT to keep an average of (plus one)
public const int RttWindowSize = 64; // number of slots to use for RTT computations (max number of in-flight packets)

private void Sort()
{
RegisteredScenes.Sort(StringComparer.Ordinal);
}

/// <summary>
/// Returns a base64 encoded version of the configuration
/// </summary>
Expand All @@ -189,13 +161,6 @@ public string ToBase64()
using var buffer = PooledNetworkBuffer.Get();
using var writer = PooledNetworkWriter.Get(buffer);
writer.WriteUInt16Packed(config.ProtocolVersion);
writer.WriteUInt16Packed((ushort)config.RegisteredScenes.Count);

for (int i = 0; i < config.RegisteredScenes.Count; i++)
{
writer.WriteString(config.RegisteredScenes[i]);
}

writer.WriteInt32Packed(config.TickRate);
writer.WriteInt32Packed(config.ClientConnectionBufferTimeout);
writer.WriteBool(config.ConnectionApproval);
Expand All @@ -208,7 +173,6 @@ public string ToBase64()
writer.WriteBool(RecycleNetworkIds);
writer.WriteSinglePacked(NetworkIdRecycleDelay);
writer.WriteBool(EnableNetworkVariable);
writer.WriteBool(AllowRuntimeSceneChanges);
writer.WriteBool(EnableNetworkLogs);
buffer.PadBuffer();

Expand All @@ -225,16 +189,9 @@ public void FromBase64(string base64)
byte[] binary = Convert.FromBase64String(base64);
using var buffer = new NetworkBuffer(binary);
using var reader = PooledNetworkReader.Get(buffer);
config.ProtocolVersion = reader.ReadUInt16Packed();

config.ProtocolVersion = reader.ReadUInt16Packed();
ushort sceneCount = reader.ReadUInt16Packed();
config.RegisteredScenes.Clear();

for (int i = 0; i < sceneCount; i++)
{
config.RegisteredScenes.Add(reader.ReadString().ToString());
}

config.TickRate = reader.ReadInt32Packed();
config.ClientConnectionBufferTimeout = reader.ReadInt32Packed();
config.ConnectionApproval = reader.ReadBool();
Expand All @@ -247,7 +204,6 @@ public void FromBase64(string base64)
config.RecycleNetworkIds = reader.ReadBool();
config.NetworkIdRecycleDelay = reader.ReadSinglePacked();
config.EnableNetworkVariable = reader.ReadBool();
config.AllowRuntimeSceneChanges = reader.ReadBool();
config.EnableNetworkLogs = reader.ReadBool();
}

Expand All @@ -266,25 +222,17 @@ public ulong GetConfig(bool cache = true)
return m_ConfigHash.Value;
}

Sort();

using var buffer = PooledNetworkBuffer.Get();
using var writer = PooledNetworkWriter.Get(buffer);

writer.WriteUInt16Packed(ProtocolVersion);
writer.WriteString(NetworkConstants.PROTOCOL_VERSION);

if (EnableSceneManagement && !AllowRuntimeSceneChanges)
{
for (int i = 0; i < RegisteredScenes.Count; i++)
{
writer.WriteString(RegisteredScenes[i]);
}
}

if (ForceSamePrefabs)
{
var sortedDictionary = NetworkPrefabOverrideLinks.OrderBy(x => x.Key);
foreach (var sortedEntry in sortedDictionary)

{
writer.WriteUInt32Packed(sortedEntry.Key);
}
Expand Down
26 changes: 0 additions & 26 deletions com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -266,17 +266,6 @@ private void OnValidate()
}
}

if (NetworkConfig.EnableSceneManagement)
{
foreach (var sceneAsset in NetworkConfig.RegisteredSceneAssets)
{
if (!NetworkConfig.RegisteredScenes.Contains(sceneAsset.name))
{
NetworkConfig.RegisteredScenes.Add(sceneAsset.name);
}
}
}

var activeScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene();

// If the scene is not dirty or the asset database is currently updating then we can skip updating the NetworkPrefab information
Expand Down Expand Up @@ -453,25 +442,12 @@ private void Initialize(bool server)
// Register INetworkUpdateSystem (always register this after messageQueueContainer has been instantiated)
this.RegisterNetworkUpdate(NetworkUpdateStage.PreUpdate);

if (NetworkConfig.EnableSceneManagement)
{
NetworkConfig.RegisteredScenes.Sort(StringComparer.Ordinal);

for (int i = 0; i < NetworkConfig.RegisteredScenes.Count; i++)
{
SceneManager.RegisteredSceneNames.Add(NetworkConfig.RegisteredScenes[i]);
SceneManager.SceneIndexToString.Add((uint)i, NetworkConfig.RegisteredScenes[i]);
SceneManager.SceneNameToIndex.Add(NetworkConfig.RegisteredScenes[i], (uint)i);
}
}

// This is used to remove entries not needed or invalid
var removeEmptyPrefabs = new List<int>();

// Always clear our prefab override links before building
NetworkConfig.NetworkPrefabOverrideLinks.Clear();

// Build the NetworkPrefabOverrideLinks dictionary
// Build the NetworkPrefabOverrideLinks dictionary
for (int i = 0; i < NetworkConfig.NetworkPrefabs.Count; i++)
{
Expand Down Expand Up @@ -1536,8 +1512,6 @@ internal void HandleApproval(ulong ownerClientId, bool createPlayerObject, uint?
}
}



/// <summary>
/// Spawns the newly approved player
/// </summary>
Expand Down
Loading