diff --git a/com.unity.netcode.gameobjects/Editor/NetworkAnimatorParameterEntryDrawer.cs b/com.unity.netcode.gameobjects/Editor/NetworkAnimatorParameterEntryDrawer.cs new file mode 100644 index 0000000000..9060b8993c --- /dev/null +++ b/com.unity.netcode.gameobjects/Editor/NetworkAnimatorParameterEntryDrawer.cs @@ -0,0 +1,96 @@ + +#if COM_UNITY_MODULES_ANIMATION +using Unity.Netcode.Components; +using UnityEditor; +using UnityEngine; + +namespace Unity.Netcode.Editor +{ + [CustomPropertyDrawer(typeof(NetworkAnimator.AnimatorParametersListContainer))] + internal class NetworkAnimatorParameterEntryDrawer : PropertyDrawer + { + // Draw the property inside the given rect + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + + // Draw the foldout for the list + SerializedProperty items = property.FindPropertyRelative(nameof(NetworkAnimator.AnimatorParameterEntries.ParameterEntries)); + position.height = EditorGUIUtility.singleLineHeight; + property.isExpanded = EditorGUI.Foldout(position, property.isExpanded, label); + + if (property.isExpanded) + { + // Set the indention level down + EditorGUI.indentLevel++; + for (int i = 0; i < items.arraySize; i++) + { + position.y += EditorGUIUtility.singleLineHeight + 2; + SerializedProperty element = items.GetArrayElementAtIndex(i); + var nameField = element.FindPropertyRelative(nameof(NetworkAnimator.AnimatorParameterEntry.name)); + // Draw the foldout for the item + element.isExpanded = EditorGUI.Foldout(position, element.isExpanded, nameField.stringValue); + if (!element.isExpanded) + { + continue; + } + // Draw the contents of the item + position.y += EditorGUIUtility.singleLineHeight + 2; + // Set the indention level down + EditorGUI.indentLevel++; + // Calculate rects + var nameHashRect = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight); + position.y += EditorGUIUtility.singleLineHeight + 2; + var paramRect = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight); + position.y += EditorGUIUtility.singleLineHeight + 2; + var syncRect = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight); + + // Get the three properties we want to visualize in the inspector view + var synchronizeField = element.FindPropertyRelative(nameof(NetworkAnimator.AnimatorParameterEntry.Synchronize)); + var nameHashField = element.FindPropertyRelative(nameof(NetworkAnimator.AnimatorParameterEntry.NameHash)); + var parameterTypeField = element.FindPropertyRelative(nameof(NetworkAnimator.AnimatorParameterEntry.ParameterType)); + + // Draw the read only fields + GUI.enabled = false; + EditorGUI.PropertyField(nameHashRect, nameHashField); + EditorGUI.PropertyField(paramRect, parameterTypeField); + GUI.enabled = true; + // Draw the read/write fields + EditorGUI.PropertyField(syncRect, synchronizeField); + // Set the indention level up + EditorGUI.indentLevel--; + } + // Set the indention level up + EditorGUI.indentLevel--; + } + EditorGUI.EndProperty(); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + var totalHeight = EditorGUIUtility.singleLineHeight; + if (!property.isExpanded) + { + return totalHeight; + } + var singleLineWithSpace = EditorGUIUtility.singleLineHeight + 2; + SerializedProperty items = property.FindPropertyRelative(nameof(NetworkAnimator.AnimatorParameterEntries.ParameterEntries)); + + totalHeight += singleLineWithSpace; + for (int i = 0; i < items.arraySize; i++) + { + SerializedProperty element = items.GetArrayElementAtIndex(i); + if (element.isExpanded) + { + totalHeight += (singleLineWithSpace * 4); + } + else + { + totalHeight += EditorGUIUtility.singleLineHeight; + } + } + return totalHeight; + } + } +} +#endif diff --git a/com.unity.netcode.gameobjects/Editor/NetworkAnimatorParameterEntryDrawer.cs.meta b/com.unity.netcode.gameobjects/Editor/NetworkAnimatorParameterEntryDrawer.cs.meta new file mode 100644 index 0000000000..f3adbfd688 --- /dev/null +++ b/com.unity.netcode.gameobjects/Editor/NetworkAnimatorParameterEntryDrawer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3ab75768bda56e545a8ebd0324eecbaf \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Runtime/Components/NetworkAnimator.cs b/com.unity.netcode.gameobjects/Runtime/Components/NetworkAnimator.cs index 583e7bda4a..547ed44c94 100644 --- a/com.unity.netcode.gameobjects/Runtime/Components/NetworkAnimator.cs +++ b/com.unity.netcode.gameobjects/Runtime/Components/NetworkAnimator.cs @@ -1,6 +1,7 @@ #if COM_UNITY_MODULES_ANIMATION using System; using System.Collections.Generic; +using System.Runtime.CompilerServices; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using UnityEngine; @@ -72,6 +73,13 @@ private void FlushMessages() m_SendTriggerUpdates.Clear(); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private bool HasAuthority() + { + var isServerAuthority = m_NetworkAnimator.IsServerAuthoritative(); + return (!isServerAuthority && m_NetworkAnimator.IsOwner) || (isServerAuthority && m_NetworkAnimator.IsServer); + } + /// public void NetworkUpdate(NetworkUpdateStage updateStage) { @@ -79,25 +87,32 @@ public void NetworkUpdate(NetworkUpdateStage updateStage) { case NetworkUpdateStage.PreUpdate: { - // Only the owner or the server send messages - if (m_NetworkAnimator.IsOwner || m_IsServer) + // NOTE: This script has an order of operations requirement where + // the authority and/or server will flush messages first, parameter updates are applied + // for all instances, and then only the authority will check for animator changes. Changing + // the order could cause timing related issues. + + var hasAuthority = HasAuthority(); + // Only the authority or the server will send messages + if (hasAuthority || m_IsServer) { // Flush any pending messages FlushMessages(); } // Everyone applies any parameters updated - for (int i = 0; i < m_ProcessParameterUpdates.Count; i++) + if (m_ProcessParameterUpdates.Count > 0) { - var parameterUpdate = m_ProcessParameterUpdates[i]; - m_NetworkAnimator.UpdateParameters(ref parameterUpdate); + for (int i = 0; i < m_ProcessParameterUpdates.Count; i++) + { + var parameterUpdate = m_ProcessParameterUpdates[i]; + m_NetworkAnimator.UpdateParameters(ref parameterUpdate); + } + m_ProcessParameterUpdates.Clear(); } - m_ProcessParameterUpdates.Clear(); - var isServerAuthority = m_NetworkAnimator.IsServerAuthoritative(); - // owners when owner authoritative or the server when server authoritative are the only instances that - // checks for Animator changes - if ((!isServerAuthority && m_NetworkAnimator.IsOwner) || (isServerAuthority && m_NetworkAnimator.IsServer)) + // Only the authority checks for Animator changes + if (hasAuthority) { m_NetworkAnimator.CheckForAnimatorChanges(); } @@ -188,6 +203,12 @@ internal NetworkAnimatorStateChangeHandler(NetworkAnimator networkAnimator) [AddComponentMenu("Netcode/Network Animator")] public class NetworkAnimator : NetworkBehaviour, ISerializationCallbackReceiver { +#if UNITY_EDITOR + [HideInInspector] + [SerializeField] + internal bool NetworkAnimatorExpanded; +#endif + [Serializable] internal class TransitionStateinfo { @@ -200,6 +221,49 @@ internal class TransitionStateinfo public int TransitionIndex; } + /// + /// Determines if the server or client owner pushes animation state updates. + /// + public enum AuthorityModes + { + /// + /// Server pushes animator state updates. + /// + Server, + /// + /// Client owner pushes animator state updates. + /// + Owner, + } + + /// + /// Determines whether this instance will have state updates pushed by the server or the client owner. + /// + /// +#if MULTIPLAYER_SERVICES_SDK_INSTALLED + [Tooltip("Selects who has authority(sends state updates) over the instance.When the network topology is set to distributed authority, this always defaults to owner authority.If server (the default), then only server-side adjustments to the " + + " instance will be synchronized with clients. If owner (or client), then only the owner-side adjustments to the instance will be synchronized with both the server and other clients.")] +#else + [Tooltip("Selects who has authority (sends state updates) over the instance. If server (the default), then only server-side adjustments to the instance will be synchronized with clients. If owner (or client), " + + "then only the owner-side adjustments to the instance will be synchronized with both the server and other clients.")] +#endif + public AuthorityModes AuthorityMode; + + [Tooltip("The animator that this NetworkAnimator component will be synchronizing.")] + [SerializeField] private Animator m_Animator; + + /// + /// The associated with this instance. + /// + public Animator Animator + { + get { return m_Animator; } + set + { + m_Animator = value; + } + } + /// /// Used to build the destination state to transition info table /// @@ -230,8 +294,36 @@ private void BuildDestinationToTransitionInfoTable() } } + [Serializable] + internal class AnimatorParameterEntry + { +#pragma warning disable IDE1006 + [HideInInspector] + public string name; +#pragma warning restore IDE1006 + public int NameHash; + public bool Synchronize; + public AnimatorControllerParameterType ParameterType; + } + + [Serializable] + internal class AnimatorParametersListContainer + { + public List ParameterEntries = new List(); + } + + [SerializeField] + internal AnimatorParametersListContainer AnimatorParameterEntries; + + internal Dictionary AnimatorParameterEntryTable = new Dictionary(); #if UNITY_EDITOR + [HideInInspector] + [SerializeField] + internal bool AnimatorParametersExpanded; + + internal Dictionary ParameterToNameLookup = new Dictionary(); + private void ParseStateMachineStates(int layerIndex, ref AnimatorController animatorController, ref AnimatorStateMachine stateMachine) { for (int y = 0; y < stateMachine.states.Length; y++) @@ -322,6 +414,73 @@ private void BuildTransitionStateInfoList() } } + internal void ProcessParameterEntries() + { + if (!Animator) + { + if (AnimatorParameterEntries != null && AnimatorParameterEntries.ParameterEntries.Count > 0) + { + AnimatorParameterEntries.ParameterEntries.Clear(); + } + return; + } + + var parameters = Animator.parameters; + + var parametersToRemove = new List(); + ParameterToNameLookup.Clear(); + foreach (var parameter in parameters) + { + ParameterToNameLookup.Add(parameter.nameHash, parameter); + } + + // Rebuild the parameter entry table for the inspector view + AnimatorParameterEntryTable.Clear(); + foreach (var parameterEntry in AnimatorParameterEntries.ParameterEntries) + { + // Check for removed parameters. + if (!ParameterToNameLookup.ContainsKey(parameterEntry.NameHash)) + { + parametersToRemove.Add(parameterEntry); + // Skip this removed entry + continue; + } + + // Build the list of known parameters + if (!AnimatorParameterEntryTable.ContainsKey(parameterEntry.NameHash)) + { + AnimatorParameterEntryTable.Add(parameterEntry.NameHash, parameterEntry); + } + + var parameter = ParameterToNameLookup[parameterEntry.NameHash]; + parameterEntry.name = parameter.name; + parameterEntry.ParameterType = parameter.type; + } + + // Update for removed parameters + foreach (var parameterEntry in parametersToRemove) + { + AnimatorParameterEntries.ParameterEntries.Remove(parameterEntry); + } + + // Update any newly added parameters + foreach (var parameterLookUp in ParameterToNameLookup) + { + if (!AnimatorParameterEntryTable.ContainsKey(parameterLookUp.Value.nameHash)) + { + var animatorParameterEntry = new AnimatorParameterEntry() + { + name = parameterLookUp.Value.name, + NameHash = parameterLookUp.Value.nameHash, + ParameterType = parameterLookUp.Value.type, + Synchronize = true, + }; + AnimatorParameterEntries.ParameterEntries.Add(animatorParameterEntry); + AnimatorParameterEntryTable.Add(parameterLookUp.Value.nameHash, animatorParameterEntry); + } + } + } + /// /// In-Editor Only /// Virtual OnValidate method for custom derived NetworkAnimator classes. @@ -329,6 +488,7 @@ private void BuildTransitionStateInfoList() protected virtual void OnValidate() { BuildTransitionStateInfoList(); + ProcessParameterEntries(); } #endif @@ -482,24 +642,19 @@ public void NetworkSerialize(BufferSerializer serializer) where T : IReade } } - [SerializeField] private Animator m_Animator; - - public Animator Animator - { - get { return m_Animator; } - set - { - m_Animator = value; - } - } - - internal bool IsServerAuthoritative() + /// + /// Determines whether the is or based on the field. + /// Optionally, you can still derive from and override the method. + /// + /// or + public bool IsServerAuthoritative() { return OnIsServerAuthoritative(); } /// - /// Override this method and return false to switch to owner authoritative mode. + /// Override this method and return false to switch to owner authoritative mode.
+ /// Alternately, you can update the field within the inspector view to select the authority mode. ///
/// /// When using a distributed authority network topology, this will default to @@ -507,7 +662,7 @@ internal bool IsServerAuthoritative() /// protected virtual bool OnIsServerAuthoritative() { - return NetworkManager ? !NetworkManager.DistributedAuthorityMode : true; + return NetworkManager && NetworkManager.DistributedAuthorityMode ? true : AuthorityMode == AuthorityModes.Server; } private int[] m_TransitionHash; @@ -527,6 +682,7 @@ protected virtual bool OnIsServerAuthoritative() private unsafe struct AnimatorParamCache { + internal bool Exclude; internal int Hash; internal int Type; internal fixed byte Value[4]; // this is a max size of 4 bytes @@ -593,6 +749,14 @@ protected virtual void Awake() return; } + foreach (var parameterEntry in AnimatorParameterEntries.ParameterEntries) + { + if (!AnimatorParameterEntryTable.ContainsKey(parameterEntry.NameHash)) + { + AnimatorParameterEntryTable.Add(parameterEntry.NameHash, parameterEntry); + } + } + int layers = m_Animator.layerCount; // Initializing the below arrays for everyone handles an issue // when running in owner authoritative mode and the owner changes. @@ -636,11 +800,17 @@ protected virtual void Awake() for (var i = 0; i < parameters.Length; i++) { var parameter = parameters[i]; + var synchronizeParameter = true; + if (AnimatorParameterEntryTable.ContainsKey(parameter.nameHash)) + { + synchronizeParameter = AnimatorParameterEntryTable[parameter.nameHash].Synchronize; + } var cacheParam = new AnimatorParamCache { Type = UnsafeUtility.EnumToInt(parameter.type), - Hash = parameter.nameHash + Hash = parameter.nameHash, + Exclude = !synchronizeParameter }; unsafe @@ -747,6 +917,10 @@ private void WriteSynchronizationData(ref BufferSerializer serializer) whe m_ParametersToUpdate.Clear(); for (int i = 0; i < m_CachedAnimatorParameters.Length; i++) { + if (m_CachedAnimatorParameters[i].Exclude) + { + continue; + } m_ParametersToUpdate.Add(i); } // Write, apply, and serialize @@ -1074,6 +1248,11 @@ private unsafe bool CheckParametersChanged() { ref var cacheValue = ref UnsafeUtility.ArrayElementAsRef(m_CachedAnimatorParameters.GetUnsafePtr(), i); + if (cacheValue.Exclude) + { + continue; + } + // If a parameter gets controlled by a curve during runtime after initialization of NetworkAnimator // then ignore changes to this parameter. We are not removing the parameter in the event that // it no longer is controlled by a curve. @@ -1130,6 +1309,13 @@ private unsafe void WriteParameters(ref FastBufferWriter writer) foreach (var parameterIndex in m_ParametersToUpdate) { ref var cacheValue = ref UnsafeUtility.ArrayElementAsRef(m_CachedAnimatorParameters.GetUnsafePtr(), parameterIndex); + + if (cacheValue.Exclude) + { + Debug.LogWarning($"Parameter hash:{cacheValue.Hash} should be excluded but is in the parameters to update list when writing parameter values!"); + continue; + } + var hash = cacheValue.Hash; BytePacker.WriteValuePacked(writer, (uint)parameterIndex); if (cacheValue.Type == AnimationParamEnumWrapper.AnimatorControllerParameterInt) @@ -1410,6 +1596,10 @@ internal void SendAnimStateRpc(AnimationMessage animationMessage) ProcessAnimStates(animationMessage); } + /// + /// Process incoming . + /// + /// The message to process. private void ProcessAnimStates(AnimationMessage animationMessage) { if (HasAuthority) @@ -1429,8 +1619,6 @@ private void ProcessAnimStates(AnimationMessage animationMessage) } } - - /// /// Server-side trigger state update request /// The server sets its local state and then forwards the message to the remaining clients @@ -1572,6 +1760,39 @@ public void ResetTrigger(int hash) { SetTrigger(hash, false); } + + /// + /// Allows for the enabling or disabling the synchronization of a specific parameter. + /// + /// The name of the parameter. + /// Whether to enable or disable the synchronization of the parameter. + public void EnableParameterSynchronization(string parameterName, bool isEnabled) + { + EnableParameterSynchronization(Animator.StringToHash(parameterName), isEnabled); + } + + /// + /// Allows for the enabling or disabling the synchronization of a specific parameter. + /// + /// The hash value (from using ) of the parameter name. + /// Whether to enable or disable the synchronization of the parameter. + public void EnableParameterSynchronization(int parameterNameHash, bool isEnabled) + { + var serverAuthoritative = OnIsServerAuthoritative(); + if (!IsSpawned || serverAuthoritative && IsServer || !serverAuthoritative && IsOwner) + { + for (int i = 0; i < m_CachedAnimatorParameters.Length; i++) + { + var cachedParameter = m_CachedAnimatorParameters[i]; + if (cachedParameter.Hash == parameterNameHash) + { + cachedParameter.Exclude = !isEnabled; + m_CachedAnimatorParameters[i] = cachedParameter; + break; + } + } + } + } } } // COM_UNITY_MODULES_ANIMATION diff --git a/testproject/Assets/DefaultNetworkPrefabs.asset b/testproject/Assets/DefaultNetworkPrefabs.asset index a5e491547f..d7e2dfd68e 100644 --- a/testproject/Assets/DefaultNetworkPrefabs.asset +++ b/testproject/Assets/DefaultNetworkPrefabs.asset @@ -224,3 +224,21 @@ MonoBehaviour: SourcePrefabToOverride: {fileID: 0} SourceHashToOverride: 0 OverridingTargetPrefab: {fileID: 0} + - Override: 0 + Prefab: {fileID: 8188135024827620138, guid: c000e98bc12da2941a59ec61c260dd6a, + type: 3} + SourcePrefabToOverride: {fileID: 0} + SourceHashToOverride: 0 + OverridingTargetPrefab: {fileID: 0} + - Override: 0 + Prefab: {fileID: 1488386875393216933, guid: 7752ac8c0bfaed64c8de839537204114, + type: 3} + SourcePrefabToOverride: {fileID: 0} + SourceHashToOverride: 0 + OverridingTargetPrefab: {fileID: 0} + - Override: 0 + Prefab: {fileID: 6958138586392507362, guid: 4b31f769283d3c24ca2a5d6baf28a806, + type: 3} + SourcePrefabToOverride: {fileID: 0} + SourceHashToOverride: 0 + OverridingTargetPrefab: {fileID: 0} diff --git a/testproject/Assets/Tests/Manual/NetworkAnimatorTests/AnimatedCubeController.cs b/testproject/Assets/Tests/Manual/NetworkAnimatorTests/AnimatedCubeController.cs index 7898adb47b..5fcf73233b 100644 --- a/testproject/Assets/Tests/Manual/NetworkAnimatorTests/AnimatedCubeController.cs +++ b/testproject/Assets/Tests/Manual/NetworkAnimatorTests/AnimatedCubeController.cs @@ -1,4 +1,3 @@ -using System; using System.Collections; using Unity.Netcode; using Unity.Netcode.Components; @@ -12,19 +11,11 @@ public class AnimatedCubeController : NetworkBehaviour private Animator m_Animator; private bool m_Rotate; private NetworkAnimator m_NetworkAnimator; - private bool m_IsServerAuthoritative = true; + private bool m_IsServerAuthoritative => m_NetworkAnimator ? m_NetworkAnimator.IsServerAuthoritative() : true; private void DetermineNetworkAnimatorComponentType() { m_NetworkAnimator = GetComponent(); - if (m_NetworkAnimator != null) - { - m_IsServerAuthoritative = m_NetworkAnimator.GetType() != typeof(OwnerNetworkAnimator); - } - else - { - throw new Exception($"{nameof(AnimatedCubeController)} requires that it is paired with either a {nameof(NetworkAnimator)} or {nameof(OwnerNetworkAnimator)}. Neither of the two components were found!"); - } } public override void OnNetworkSpawn() @@ -136,8 +127,8 @@ private IEnumerator TestAnimatorRoutine() counter = 0.0f; while (counter < 100) { - m_Animator.SetFloat("TestFloat", UnityEngine.Random.Range(0.0f, 100.0f)); - m_Animator.SetInteger("TestInt", UnityEngine.Random.Range(0, 100)); + m_Animator.SetFloat("TestFloat", Random.Range(0.0f, 100.0f)); + m_Animator.SetInteger("TestInt", Random.Range(0, 100)); counter++; yield return waitForSeconds; } diff --git a/testproject/Assets/Tests/Manual/NetworkAnimatorTests/CubeAnimatorController.controller b/testproject/Assets/Tests/Manual/NetworkAnimatorTests/CubeAnimatorController.controller index 3434711a59..edc31e90ab 100644 --- a/testproject/Assets/Tests/Manual/NetworkAnimatorTests/CubeAnimatorController.controller +++ b/testproject/Assets/Tests/Manual/NetworkAnimatorTests/CubeAnimatorController.controller @@ -761,6 +761,12 @@ AnimatorController: m_DefaultInt: 0 m_DefaultBool: 0 m_Controller: {fileID: 9100000} + - m_Name: ExcludeFromSync + m_Type: 1 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} m_AnimatorLayers: - serializedVersion: 5 m_Name: Base Layer diff --git a/testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorServerOwnerTest.unity b/testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorServerOwnerTest.unity index efd820815d..568acb89e8 100644 --- a/testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorServerOwnerTest.unity +++ b/testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorServerOwnerTest.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -104,7 +100,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -153,21 +149,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 593a2fe42fa9d37498c96f9a383b6521, type: 3} m_Name: m_EditorClassIdentifier: - RunInBackground: 1 - LogLevel: 1 + NetworkManagerExpanded: 0 NetworkConfig: ProtocolVersion: 0 NetworkTransport: {fileID: 57527694} PlayerPrefab: {fileID: 3214090169675393154, guid: 978fc8cd63a1294438ebf3b352814970, type: 3} - NetworkPrefabs: - - Override: 0 - Prefab: {fileID: 3214090169675393154, guid: 978fc8cd63a1294438ebf3b352814970, - type: 3} - SourcePrefabToOverride: {fileID: 442217489085244684, guid: 5eca8a21314fe4278ba2571c289a9773, - type: 3} - SourceHashToOverride: 0 - OverridingTargetPrefab: {fileID: 0} + Prefabs: + NetworkPrefabsLists: [] TickRate: 30 ClientConnectionBufferTimeout: 10 ConnectionApproval: 0 @@ -181,8 +170,22 @@ MonoBehaviour: NetworkIdRecycleDelay: 120 RpcHashSize: 0 LoadSceneTimeOut: 120 - SpawnTimeout: 1 + SpawnTimeout: 10 EnableNetworkLogs: 1 + NetworkTopology: 0 + UseCMBService: 0 + AutoSpawnPlayerPrefabClientSide: 1 + NetworkProfilingMetrics: 1 + OldPrefabList: + - Override: 0 + Prefab: {fileID: 3214090169675393154, guid: 978fc8cd63a1294438ebf3b352814970, + type: 3} + SourcePrefabToOverride: {fileID: 442217489085244684, guid: 5eca8a21314fe4278ba2571c289a9773, + type: 3} + SourceHashToOverride: 0 + OverridingTargetPrefab: {fileID: 0} + RunInBackground: 1 + LogLevel: 1 --- !u!4 &57527693 Transform: m_ObjectHideFlags: 0 @@ -190,13 +193,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 57527690} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -4.4, y: 0, z: 3.53} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &57527694 MonoBehaviour: @@ -211,6 +214,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_ProtocolType: 0 + m_UseWebSockets: 0 + m_UseEncryption: 0 m_MaxPacketQueueSize: 128 m_MaxPayloadSize: 80000 m_HeartbeatTimeoutMS: 500 @@ -220,7 +225,7 @@ MonoBehaviour: ConnectionData: Address: 127.0.0.1 Port: 7777 - ServerListenAddress: + ServerListenAddress: 127.0.0.1 DebugSimulator: PacketDelayMS: 0 PacketJitterMS: 0 @@ -234,8 +239,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 84683368} - - component: {fileID: 84683367} - component: {fileID: 84683366} + - component: {fileID: 84683367} m_Layer: 0 m_Name: Stats m_TagString: Untagged @@ -256,9 +261,18 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: GlobalObjectIdHash: 3133660421 + InScenePlacedSourceGlobalObjectIdHash: 0 + DeferredDespawnTick: 0 + Ownership: 1 AlwaysReplicateAsRoot: 0 + SynchronizeTransform: 1 + ActiveSceneSynchronization: 0 + SceneMigrationSynchronization: 0 + SpawnWithObservers: 1 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 --- !u!114 &84683367 MonoBehaviour: m_ObjectHideFlags: 0 @@ -271,6 +285,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: cb5f3e55f5dd247129d8a4979b80ebbb, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 m_ClientServerToggle: {fileID: 0} m_TrackSceneEvents: 0 --- !u!4 &84683368 @@ -280,13 +295,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 84683365} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 318.45444, y: 110.697815, z: 216.79077} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &146283178 GameObject: @@ -319,7 +334,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 343841036} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0} m_AnchorMax: {x: 0.5, y: 0} @@ -444,7 +458,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 1 m_TargetDisplay: 0 @@ -462,7 +478,6 @@ RectTransform: m_Children: - {fileID: 146283179} m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -529,13 +544,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 809184351} + serializedVersion: 2 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: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &825254415 GameObject: @@ -562,9 +577,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 825254415} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -614,8 +628,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &825254417 Transform: m_ObjectHideFlags: 0 @@ -623,13 +641,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 825254415} + serializedVersion: 2 m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!224 &1537133403 stripped RectTransform: @@ -677,9 +695,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -713,13 +739,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1543554891} + serializedVersion: 2 m_LocalRotation: {x: 0.28182787, y: -0, z: -0, w: 0.959465} m_LocalPosition: {x: 5.7, y: 90, z: -136} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 32.739, y: 0, z: 0} --- !u!1 &1740491936 GameObject: @@ -797,7 +823,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -816,7 +844,6 @@ RectTransform: - {fileID: 1820369379} - {fileID: 1537133403} m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -828,6 +855,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1740491940} m_Modifications: - target: {fileID: 2848221156307247792, guid: 3200770c16e3b2b4ebe7f604154faac7, @@ -962,6 +990,9 @@ PrefabInstance: objectReference: {fileID: 11400000, guid: 4a3cdce12e998384f8aca207b5a2c700, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 3200770c16e3b2b4ebe7f604154faac7, type: 3} --- !u!224 &1820369379 stripped RectTransform: @@ -974,6 +1005,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1740491940} m_Modifications: - target: {fileID: 6633621479308595792, guid: d725b5588e1b956458798319e6541d84, @@ -1087,4 +1119,18 @@ PrefabInstance: value: ConnectionModeButtons objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d725b5588e1b956458798319e6541d84, type: 3} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1543554894} + - {fileID: 825254417} + - {fileID: 57527693} + - {fileID: 343841036} + - {fileID: 809184354} + - {fileID: 1740491940} + - {fileID: 84683368} diff --git a/testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorTestPrefab.prefab b/testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorTestPrefab.prefab index 293a5c28f9..ecb2989dd7 100644 --- a/testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorTestPrefab.prefab +++ b/testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorTestPrefab.prefab @@ -26,6 +26,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 344968812738254812} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 10, y: 10, z: 10} @@ -34,7 +35,6 @@ Transform: - {fileID: 6945271965867870025} - {fileID: 7346803634269932765} m_Father: {fileID: 3078684837582866037} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &1862129067553351562 MeshFilter: @@ -61,6 +61,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -94,9 +97,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 344968812738254812} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1.0000002, y: 1, z: 1.0000002} m_Center: {x: 0.0000019073493, y: 0.000000007450581, z: -0.000001907349} --- !u!1 &2187136729444773472 @@ -125,13 +136,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2187136729444773472} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0.505} m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2505406658094773853} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &3821723076754617548 MeshFilter: @@ -158,6 +169,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -191,9 +205,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2187136729444773472} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!1 &2963963144167575062 @@ -227,7 +249,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3214090169133903717} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -287,7 +308,7 @@ GameObject: - component: {fileID: 3078684837582866037} - component: {fileID: 3078684837575715027} - component: {fileID: 5295167409644547614} - - component: {fileID: 3632991713004262889} + - component: {fileID: 6991069935266812612} m_Layer: 0 m_Name: NetworkAnimatedCube-Owner m_TagString: Untagged @@ -302,6 +323,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3078684837583100501} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 15, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -309,11 +331,10 @@ Transform: m_Children: - {fileID: 7635925556881204871} m_Father: {fileID: 3214090169675393152} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &3078684837575715027 Animator: - serializedVersion: 4 + serializedVersion: 7 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -327,10 +348,12 @@ Animator: m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 m_StabilizeFeet: 0 + m_AnimatePhysics: 0 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!114 &5295167409644547614 MonoBehaviour: m_ObjectHideFlags: 0 @@ -343,8 +366,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b322be05414199349ae9d1aea28228a7, type: 3} m_Name: m_EditorClassIdentifier: - TestIterations: 10 ---- !u!114 &3632991713004262889 + ShowTopMostFoldoutHeaderGroup: 1 +--- !u!114 &6991069935266812612 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -353,29 +376,103 @@ MonoBehaviour: m_GameObject: {fileID: 3078684837583100501} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f6a3556fb5f3bee4e8a0fb88acff87ff, type: 3} + m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 1 + m_Animator: {fileID: 3078684837575715027} TransitionStateInfoList: - - Layer: 0 + - IsCrossFadeExit: 0 + Layer: 0 OriginatingState: 2081823275 DestinationState: -570305638 TransitionDuration: 0.30227518 TriggerNameHash: 1033918907 TransitionIndex: 1 - - Layer: 0 + - IsCrossFadeExit: 0 + Layer: 0 OriginatingState: 2081823275 DestinationState: -1509639022 TransitionDuration: 0.25 TriggerNameHash: 1033918907 TransitionIndex: 2 - - Layer: 1 + - IsCrossFadeExit: 0 + Layer: 1 OriginatingState: 2081823275 DestinationState: -623385122 TransitionDuration: 2.2832582 TriggerNameHash: -623385122 TransitionIndex: 0 - m_Animator: {fileID: 3078684837575715027} + - IsCrossFadeExit: 0 + Layer: 3 + OriginatingState: 2081823275 + DestinationState: -1829531531 + TransitionDuration: 0.25 + TriggerNameHash: 1080829965 + TransitionIndex: 0 + - IsCrossFadeExit: 0 + Layer: 3 + OriginatingState: 2081823275 + DestinationState: 705160537 + TransitionDuration: 0.25 + TriggerNameHash: 1080829965 + TransitionIndex: 1 + - IsCrossFadeExit: 0 + Layer: 3 + OriginatingState: 2081823275 + DestinationState: 801385362 + TransitionDuration: 0.25 + TriggerNameHash: 1080829965 + TransitionIndex: 2 + AnimatorParameterEntries: + ParameterEntries: + - name: Rotate + NameHash: 807753530 + Synchronize: 1 + ParameterType: 4 + - name: Pulse + NameHash: -623385122 + Synchronize: 1 + ParameterType: 9 + - name: TestFloat + NameHash: -758535706 + Synchronize: 1 + ParameterType: 1 + - name: TestInt + NameHash: -1682086748 + Synchronize: 1 + ParameterType: 3 + - name: TestBool + NameHash: 953368263 + Synchronize: 1 + ParameterType: 4 + - name: TestTrigger + NameHash: 1033918907 + Synchronize: 1 + ParameterType: 9 + - name: LateJoinTest + NameHash: -1545343146 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: WeaponType + NameHash: -1936256502 + Synchronize: 1 + ParameterType: 3 + - name: Weapon + NameHash: 1855955664 + Synchronize: 1 + ParameterType: 3 + - name: ExcludeFromSync + NameHash: -1993481368 + Synchronize: 0 + ParameterType: 1 + AnimatorParametersExpanded: 0 --- !u!1 &3214090169133903718 GameObject: m_ObjectHideFlags: 0 @@ -412,7 +509,6 @@ RectTransform: - {fileID: 8890957386270744200} - {fileID: 4304100640823132132} m_Father: {fileID: 3214090169675393152} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -436,7 +532,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -506,6 +604,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3214090169675393154} + serializedVersion: 2 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} @@ -515,7 +614,6 @@ Transform: - {fileID: 3078684837582866037} - {fileID: 3604323723684300772} m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &3214090169675393153 MonoBehaviour: @@ -529,10 +627,19 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} m_Name: m_EditorClassIdentifier: - GlobalObjectIdHash: 951099334 + GlobalObjectIdHash: 3334901199 + InScenePlacedSourceGlobalObjectIdHash: 0 + DeferredDespawnTick: 0 + Ownership: 1 AlwaysReplicateAsRoot: 0 + SynchronizeTransform: 1 + ActiveSceneSynchronization: 0 + SceneMigrationSynchronization: 1 + SpawnWithObservers: 1 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 --- !u!114 &5628721071472145353 MonoBehaviour: m_ObjectHideFlags: 0 @@ -545,6 +652,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 65054225619821f498f40221095d527e, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 m_ServerAuthText: {fileID: 554345019093650043} m_OwnerAuthText: {fileID: 6408045601871479648} --- !u!114 &2564457647300903827 @@ -559,6 +667,21 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 + NetworkTransformExpanded: 0 + AutoOwnerAuthorityTickOffset: 1 + PositionInterpolationType: 0 + RotationInterpolationType: 0 + ScaleInterpolationType: 0 + PositionLerpSmoothing: 1 + PositionMaxInterpolationTime: 0.1 + RotationLerpSmoothing: 1 + RotationMaxInterpolationTime: 0.1 + ScaleLerpSmoothing: 1 + ScaleMaxInterpolationTime: 0.1 + AuthorityMode: 0 + TickSyncChildren: 0 + UseUnreliableDeltas: 0 SyncPositionX: 1 SyncPositionY: 1 SyncPositionZ: 1 @@ -571,8 +694,13 @@ MonoBehaviour: PositionThreshold: 0.001 RotAngleThreshold: 0.01 ScaleThreshold: 0.01 + UseQuaternionSynchronization: 0 + UseQuaternionCompression: 0 + UseHalfFloatPrecision: 0 InLocalSpace: 0 + SwitchTransformSpaceWhenParented: 0 Interpolate: 0 + SlerpPosition: 0 --- !u!1 &3953046479900177945 GameObject: m_ObjectHideFlags: 0 @@ -599,6 +727,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3953046479900177945} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -15, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -606,11 +735,10 @@ Transform: m_Children: - {fileID: 2505406658094773853} m_Father: {fileID: 3214090169675393152} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &6047057957339659638 Animator: - serializedVersion: 4 + serializedVersion: 7 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -624,10 +752,12 @@ Animator: m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 m_StabilizeFeet: 0 + m_AnimatePhysics: 0 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!114 &8104648428997222210 MonoBehaviour: m_ObjectHideFlags: 0 @@ -640,7 +770,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b322be05414199349ae9d1aea28228a7, type: 3} m_Name: m_EditorClassIdentifier: - TestIterations: 20 + ShowTopMostFoldoutHeaderGroup: 1 --- !u!114 &1245349943772079751 MonoBehaviour: m_ObjectHideFlags: 0 @@ -653,26 +783,100 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 + m_Animator: {fileID: 6047057957339659638} TransitionStateInfoList: - - Layer: 0 + - IsCrossFadeExit: 0 + Layer: 0 OriginatingState: 2081823275 DestinationState: -570305638 TransitionDuration: 0.30227518 TriggerNameHash: 1033918907 TransitionIndex: 1 - - Layer: 0 + - IsCrossFadeExit: 0 + Layer: 0 OriginatingState: 2081823275 DestinationState: -1509639022 TransitionDuration: 0.25 TriggerNameHash: 1033918907 TransitionIndex: 2 - - Layer: 1 + - IsCrossFadeExit: 0 + Layer: 1 OriginatingState: 2081823275 DestinationState: -623385122 TransitionDuration: 2.2832582 TriggerNameHash: -623385122 TransitionIndex: 0 - m_Animator: {fileID: 6047057957339659638} + - IsCrossFadeExit: 0 + Layer: 3 + OriginatingState: 2081823275 + DestinationState: -1829531531 + TransitionDuration: 0.25 + TriggerNameHash: 1080829965 + TransitionIndex: 0 + - IsCrossFadeExit: 0 + Layer: 3 + OriginatingState: 2081823275 + DestinationState: 705160537 + TransitionDuration: 0.25 + TriggerNameHash: 1080829965 + TransitionIndex: 1 + - IsCrossFadeExit: 0 + Layer: 3 + OriginatingState: 2081823275 + DestinationState: 801385362 + TransitionDuration: 0.25 + TriggerNameHash: 1080829965 + TransitionIndex: 2 + AnimatorParameterEntries: + ParameterEntries: + - name: Rotate + NameHash: 807753530 + Synchronize: 1 + ParameterType: 4 + - name: Pulse + NameHash: -623385122 + Synchronize: 1 + ParameterType: 9 + - name: TestFloat + NameHash: -758535706 + Synchronize: 1 + ParameterType: 1 + - name: TestInt + NameHash: -1682086748 + Synchronize: 1 + ParameterType: 3 + - name: TestBool + NameHash: 953368263 + Synchronize: 1 + ParameterType: 4 + - name: TestTrigger + NameHash: 1033918907 + Synchronize: 1 + ParameterType: 9 + - name: LateJoinTest + NameHash: -1545343146 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: WeaponType + NameHash: -1936256502 + Synchronize: 1 + ParameterType: 3 + - name: Weapon + NameHash: 1855955664 + Synchronize: 1 + ParameterType: 3 + - name: ExcludeFromSync + NameHash: -1993481368 + Synchronize: 0 + ParameterType: 1 + AnimatorParametersExpanded: 1 --- !u!1 &4033769488171516769 GameObject: m_ObjectHideFlags: 0 @@ -699,13 +903,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4033769488171516769} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -0.514} m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7635925556881204871} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &6303887162499072930 MeshFilter: @@ -732,6 +936,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -765,9 +972,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4033769488171516769} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!1 &4988239203845480744 @@ -796,13 +1011,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4988239203845480744} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0.505} m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 7635925556881204871} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &6969857922933789850 MeshFilter: @@ -829,6 +1044,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -862,9 +1080,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4988239203845480744} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!1 &8225275286638841897 @@ -898,7 +1124,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3214090169133903717} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -978,7 +1203,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3214090169133903717} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1053,6 +1277,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8656650671630400802} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 10, y: 10, z: 10} @@ -1061,7 +1286,6 @@ Transform: - {fileID: 4145180303732600870} - {fileID: 1514700077442365156} m_Father: {fileID: 3604323723684300772} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &4441112472850329336 MeshFilter: @@ -1088,6 +1312,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1121,9 +1348,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8656650671630400802} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1.0000002, y: 1, z: 1.0000002} m_Center: {x: 0.0000019073493, y: 0.000000007450581, z: -0.000001907349} --- !u!1 &8778627084610397836 @@ -1152,13 +1387,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8778627084610397836} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -0.514} m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2505406658094773853} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &5462393744046406360 MeshFilter: @@ -1185,6 +1420,9 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1218,9 +1456,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8778627084610397836} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!1 &9079811648883086489 @@ -1254,7 +1500,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3214090169133903717} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} diff --git a/testproject/Assets/Tests/Runtime/Animation/AnimatorTestHelper.cs b/testproject/Assets/Tests/Runtime/Animation/AnimatorTestHelper.cs index e8130c68b4..6f5b60b227 100644 --- a/testproject/Assets/Tests/Runtime/Animation/AnimatorTestHelper.cs +++ b/testproject/Assets/Tests/Runtime/Animation/AnimatorTestHelper.cs @@ -108,6 +108,16 @@ public void UpdateParameters(ParameterValues parameterValues) m_Animator.SetBool("TestBool", parameterValues.BoolValue); } + public void UpdateExcludedParameter(float value) + { + m_Animator.SetFloat("ExcludeFromSync", value); + } + + public float GetExcludedParameter() + { + return m_Animator.GetFloat("ExcludeFromSync"); + } + public bool GetCurrentTriggerState() { return m_Animator.GetBool("TestTrigger"); diff --git a/testproject/Assets/Tests/Runtime/Animation/NetworkAnimatorTests.cs b/testproject/Assets/Tests/Runtime/Animation/NetworkAnimatorTests.cs index df4124e5eb..474c9dabbe 100644 --- a/testproject/Assets/Tests/Runtime/Animation/NetworkAnimatorTests.cs +++ b/testproject/Assets/Tests/Runtime/Animation/NetworkAnimatorTests.cs @@ -157,6 +157,39 @@ private bool ParameterValuesMatch(OwnerShipMode ownerShipMode, AuthoritativeMode return true; } + private bool ExcludedParameterValuesDoNotMatch() + { + var objectToUpdate = AnimatorTestHelper.ServerSideInstance; + var excludedParameterValue = objectToUpdate.GetExcludedParameter(); + if (m_AuthoritativeMode == AuthoritativeMode.OwnerAuth) + { + objectToUpdate = m_OwnerShipMode == OwnerShipMode.ClientOwner ? AnimatorTestHelper.ClientSideInstances[m_ClientNetworkManagers[0].LocalClientId] : AnimatorTestHelper.ServerSideInstance; + excludedParameterValue = objectToUpdate.GetExcludedParameter(); + if (m_OwnerShipMode == OwnerShipMode.ClientOwner) + { + if (excludedParameterValue == AnimatorTestHelper.ServerSideInstance.GetExcludedParameter()) + { + return false; + } + } + } + + foreach (var animatorTestHelper in AnimatorTestHelper.ClientSideInstances) + { + if (objectToUpdate == animatorTestHelper.Value) + { + continue; + } + var clientExcludedParameter = animatorTestHelper.Value.GetExcludedParameter(); + if (clientExcludedParameter == excludedParameterValue) + { + return false; + } + } + return true; + } + + public enum OwnerShipMode { ServerOwner, @@ -268,6 +301,42 @@ public void ParameterUpdateTests() VerboseDebug($" ------------------ Parameter Test [{m_OwnerShipMode}] Stopping ------------------ "); } + [Test] + public void ParameterExcludedTests() + { + VerboseDebug($" ++++++++++++++++++ Parameter Excluded Test [{m_OwnerShipMode}] Starting ++++++++++++++++++ "); + + // Spawn our test animator object + var objectInstance = SpawnPrefab(m_OwnerShipMode == OwnerShipMode.ClientOwner, m_AuthoritativeMode); + + // Wait for it to spawn server-side + var success = WaitForConditionOrTimeOutWithTimeTravel(() => AnimatorTestHelper.ServerSideInstance != null); + Assert.True(success, $"Timed out waiting for the server-side instance of {GetNetworkAnimatorName(m_AuthoritativeMode)} to be spawned!"); + + // Wait for it to spawn client-side + success = WaitForConditionOrTimeOutWithTimeTravel(() => AnimatorTestHelper.ClientSideInstances.ContainsKey(m_ClientNetworkManagers[0].LocalClientId)); + Assert.True(success, $"Timed out waiting for the client-side instance of {GetNetworkAnimatorName(m_AuthoritativeMode)} to be spawned!"); + + if (m_AuthoritativeMode == AuthoritativeMode.OwnerAuth) + { + var objectToUpdate = m_OwnerShipMode == OwnerShipMode.ClientOwner ? AnimatorTestHelper.ClientSideInstances[m_ClientNetworkManagers[0].LocalClientId] : AnimatorTestHelper.ServerSideInstance; + // Set the excluded parameter value via the owner instance + objectToUpdate.UpdateExcludedParameter(Random.Range(1.5f, 100.0f)); + } + else + { + // Set the excluded parameter value via the server instance + AnimatorTestHelper.ServerSideInstance.UpdateExcludedParameter(Random.Range(1.5f, 100.0f)); + } + + TimeTravel(0.5, 60); + // Wait for the client side to update to the new parameter values + success = WaitForConditionOrTimeOutWithTimeTravel(ExcludedParameterValuesDoNotMatch); + Assert.True(success, $"The excluded parameter was synchronized!"); + VerboseDebug($" ------------------ Parameter Test [{m_OwnerShipMode}] Stopping ------------------ "); + } + + private bool AllTriggersDetected(OwnerShipMode ownerShipMode) { diff --git a/testproject/Assets/Tests/Runtime/Animation/Resources/AnimatorObject.prefab b/testproject/Assets/Tests/Runtime/Animation/Resources/AnimatorObject.prefab index 9ef650701f..e7caee94cc 100644 --- a/testproject/Assets/Tests/Runtime/Animation/Resources/AnimatorObject.prefab +++ b/testproject/Assets/Tests/Runtime/Animation/Resources/AnimatorObject.prefab @@ -386,6 +386,8 @@ MonoBehaviour: SpawnWithObservers: 1 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 --- !u!95 &6515743261518512780 Animator: serializedVersion: 7 @@ -420,6 +422,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 + m_Animator: {fileID: 6515743261518512780} TransitionStateInfoList: - IsCrossFadeExit: 0 Layer: 0 @@ -463,7 +469,53 @@ MonoBehaviour: TransitionDuration: 0.25 TriggerNameHash: 1080829965 TransitionIndex: 2 - m_Animator: {fileID: 6515743261518512780} + AnimatorParameterEntries: + ParameterEntries: + - name: Rotate + NameHash: 807753530 + Synchronize: 1 + ParameterType: 4 + - name: Pulse + NameHash: -623385122 + Synchronize: 1 + ParameterType: 9 + - name: TestFloat + NameHash: -758535706 + Synchronize: 1 + ParameterType: 1 + - name: TestInt + NameHash: -1682086748 + Synchronize: 1 + ParameterType: 3 + - name: TestBool + NameHash: 953368263 + Synchronize: 1 + ParameterType: 4 + - name: TestTrigger + NameHash: 1033918907 + Synchronize: 1 + ParameterType: 9 + - name: LateJoinTest + NameHash: -1545343146 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: WeaponType + NameHash: -1936256502 + Synchronize: 1 + ParameterType: 3 + - name: Weapon + NameHash: 1855955664 + Synchronize: 1 + ParameterType: 3 + - name: ExcludeFromSync + NameHash: -1993481368 + Synchronize: 0 + ParameterType: 1 + AnimatorParametersExpanded: 0 --- !u!114 &-8876216387850298050 MonoBehaviour: m_ObjectHideFlags: 0 @@ -476,6 +528,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 48b31fae64dc3c14c98e3c5d09cb1269, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 --- !u!114 &5194088446451573146 MonoBehaviour: m_ObjectHideFlags: 0 @@ -488,3 +541,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a915cfb2e4f748e4f9526a8bf5ee84f2, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 diff --git a/testproject/Assets/Tests/Runtime/Animation/Resources/OwnerAnimatorObject.prefab b/testproject/Assets/Tests/Runtime/Animation/Resources/OwnerAnimatorObject.prefab index 56b679ebb2..d737209912 100644 --- a/testproject/Assets/Tests/Runtime/Animation/Resources/OwnerAnimatorObject.prefab +++ b/testproject/Assets/Tests/Runtime/Animation/Resources/OwnerAnimatorObject.prefab @@ -386,6 +386,8 @@ MonoBehaviour: SpawnWithObservers: 1 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 --- !u!95 &6515743261518512780 Animator: serializedVersion: 7 @@ -420,6 +422,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f6a3556fb5f3bee4e8a0fb88acff87ff, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 1 + m_Animator: {fileID: 6515743261518512780} TransitionStateInfoList: - IsCrossFadeExit: 0 Layer: 0 @@ -463,7 +469,53 @@ MonoBehaviour: TransitionDuration: 0.25 TriggerNameHash: 1080829965 TransitionIndex: 2 - m_Animator: {fileID: 6515743261518512780} + AnimatorParameterEntries: + ParameterEntries: + - name: Rotate + NameHash: 807753530 + Synchronize: 1 + ParameterType: 4 + - name: Pulse + NameHash: -623385122 + Synchronize: 1 + ParameterType: 9 + - name: TestFloat + NameHash: -758535706 + Synchronize: 1 + ParameterType: 1 + - name: TestInt + NameHash: -1682086748 + Synchronize: 1 + ParameterType: 3 + - name: TestBool + NameHash: 953368263 + Synchronize: 1 + ParameterType: 4 + - name: TestTrigger + NameHash: 1033918907 + Synchronize: 1 + ParameterType: 9 + - name: LateJoinTest + NameHash: -1545343146 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: WeaponType + NameHash: -1936256502 + Synchronize: 1 + ParameterType: 3 + - name: Weapon + NameHash: 1855955664 + Synchronize: 1 + ParameterType: 3 + - name: ExcludeFromSync + NameHash: -1993481368 + Synchronize: 0 + ParameterType: 1 + AnimatorParametersExpanded: 0 --- !u!114 &-8876216387850298050 MonoBehaviour: m_ObjectHideFlags: 0 @@ -476,6 +528,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 48b31fae64dc3c14c98e3c5d09cb1269, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 --- !u!114 &5194088446451573146 MonoBehaviour: m_ObjectHideFlags: 0 @@ -488,3 +541,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a915cfb2e4f748e4f9526a8bf5ee84f2, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 diff --git a/testproject/Assets/Tests/Runtime/Animation/Resources/PlayerCheerOwnerAuth.prefab b/testproject/Assets/Tests/Runtime/Animation/Resources/PlayerCheerOwnerAuth.prefab index c243ddc5b4..273adf7194 100644 --- a/testproject/Assets/Tests/Runtime/Animation/Resources/PlayerCheerOwnerAuth.prefab +++ b/testproject/Assets/Tests/Runtime/Animation/Resources/PlayerCheerOwnerAuth.prefab @@ -377,6 +377,8 @@ MonoBehaviour: SpawnWithObservers: 1 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 --- !u!114 &2033189052978358381 MonoBehaviour: m_ObjectHideFlags: 0 @@ -389,6 +391,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f6a3556fb5f3bee4e8a0fb88acff87ff, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 TransitionStateInfoList: - IsCrossFadeExit: 0 Layer: 0 @@ -404,6 +409,15 @@ MonoBehaviour: TransitionDuration: 0.25 TriggerNameHash: 2081823275 TransitionIndex: 0 + AnimatorParameterEntries: + - Synchronize: 1 + NameHash: -813790127 + Name: Cheer + ParameterType: 9 + - Synchronize: 1 + NameHash: 2081823275 + Name: Idle + ParameterType: 9 m_Animator: {fileID: 4217478864398958195} --- !u!114 &6813822210364307126 MonoBehaviour: @@ -417,6 +431,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 77114a4761fbbf04ebafd6a884d3d312, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 --- !u!114 &-126005763244726388 MonoBehaviour: m_ObjectHideFlags: 0 @@ -429,6 +444,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a915cfb2e4f748e4f9526a8bf5ee84f2, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 --- !u!114 &8698027682878108555 MonoBehaviour: m_ObjectHideFlags: 0 @@ -441,3 +457,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 48b31fae64dc3c14c98e3c5d09cb1269, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 diff --git a/testproject/Assets/Tests/Runtime/Animation/Resources/PlayerCheerServerAuth.prefab b/testproject/Assets/Tests/Runtime/Animation/Resources/PlayerCheerServerAuth.prefab index 3b8fc9dd68..6cb3dde6ae 100644 --- a/testproject/Assets/Tests/Runtime/Animation/Resources/PlayerCheerServerAuth.prefab +++ b/testproject/Assets/Tests/Runtime/Animation/Resources/PlayerCheerServerAuth.prefab @@ -269,6 +269,8 @@ MonoBehaviour: SpawnWithObservers: 1 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 --- !u!114 &6975563805585028340 MonoBehaviour: m_ObjectHideFlags: 0 @@ -281,6 +283,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 TransitionStateInfoList: - IsCrossFadeExit: 0 Layer: 0 @@ -296,6 +301,15 @@ MonoBehaviour: TransitionDuration: 0.25 TriggerNameHash: 2081823275 TransitionIndex: 0 + AnimatorParameterEntries: + - Synchronize: 1 + NameHash: -813790127 + Name: Cheer + ParameterType: 9 + - Synchronize: 1 + NameHash: 2081823275 + Name: Idle + ParameterType: 9 m_Animator: {fileID: 7612458143371274009} --- !u!114 &9047519417049631294 MonoBehaviour: @@ -309,6 +323,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 77114a4761fbbf04ebafd6a884d3d312, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 --- !u!114 &-967079540368916851 MonoBehaviour: m_ObjectHideFlags: 0 @@ -321,6 +336,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a915cfb2e4f748e4f9526a8bf5ee84f2, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 --- !u!114 &707713165077007192 MonoBehaviour: m_ObjectHideFlags: 0 @@ -333,6 +349,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 48b31fae64dc3c14c98e3c5d09cb1269, type: 3} m_Name: m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 --- !u!1 &8445200702028649601 GameObject: m_ObjectHideFlags: 0