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