diff --git a/Assets/Prefabs/Character/PlayerAvatar.prefab b/Assets/Prefabs/Character/PlayerAvatar.prefab index 88513db7e0..9fd5c32458 100644 --- a/Assets/Prefabs/Character/PlayerAvatar.prefab +++ b/Assets/Prefabs/Character/PlayerAvatar.prefab @@ -10,7 +10,6 @@ GameObject: m_Component: - component: {fileID: 7902288483105483375} - component: {fileID: 1829276847453002016} - - component: {fileID: 4785536047137923048} - component: {fileID: 7209204667172237188} m_Layer: 3 m_Name: PlayerGraphics @@ -26,17 +25,17 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 9073758047842524076} + 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: 6009713983291384766} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &1829276847453002016 Animator: - serializedVersion: 4 + serializedVersion: 5 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -53,8 +52,9 @@ Animator: m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 ---- !u!114 &4785536047137923048 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!114 &7209204667172237188 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -63,7 +63,266 @@ MonoBehaviour: m_GameObject: {fileID: 9073758047842524076} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} + m_Script: {fileID: 11500000, guid: 9520a47fc61d5ab4ca99cdac2d574909, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ClientVisualsAnimator: {fileID: 1829276847453002016} + m_VisualizationConfiguration: {fileID: 11400000, guid: 9504973cdecd65749889771972fa0117, type: 2} +--- !u!1001 &7831782662127126385 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: -909640835356089789, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_ClientCharacterVisualization + value: + objectReference: {fileID: 7209204667172237188} + - target: {fileID: 350177175035117514, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_Animator + value: + objectReference: {fileID: 1829276847453002016} + - target: {fileID: 350177175035117514, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_NetworkAnimator + value: + objectReference: {fileID: 4639653625902786935} + - target: {fileID: 4600110157238723776, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_AoePrefab + value: + objectReference: {fileID: 8447158110562487606, guid: 88beb3857541f46d9becf14ba3392b89, type: 3} + - target: {fileID: 4600110157238723779, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723779, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_NetworkCharacterDefinition + value: + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_Name + value: PlayerAvatar + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723790, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: PrefabHash + value: 1946294289364405461 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723790, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: GlobalObjectIdHash + value: 3177087589 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723790, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: PrefabHashGenerator + value: PlayerAvatar + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7420593339233078707, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: animator + value: + objectReference: {fileID: 1829276847453002016} + - target: {fileID: 7420593339233078707, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_ClientCharacter + value: + objectReference: {fileID: 7209204667172237188} + - target: {fileID: 7420593339233078707, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_ClientVisualization + value: + objectReference: {fileID: 7209204667172237188} + - target: {fileID: 7690172137830037487, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8690326290994660422, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + propertyPath: m_TagString + value: Player + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 4462343263575301329, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + - {fileID: -6618539813679097072, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: 7902288483105483375} + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: -8197545831548902967} + - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: 3481187672596608374} + - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: 4354133789489545025} + - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: 4781465086743528409} + - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: 4887850889182527394} + - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: 5043718152237111612} + - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: 4639653625902786935} + - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: 7232939173259361562} + - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: 2576537793715222015} + - targetCorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + insertIndex: -1 + addedObject: {fileID: 4727018541459492655} + m_SourcePrefab: {fileID: 100100000, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} +--- !u!114 &741733315856861890 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7420593339233078707, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + m_PrefabInstance: {fileID: 7831782662127126385} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6009713983291384756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 920a440eb254ba348915767fd046027a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &6009713983291384756 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} + m_PrefabInstance: {fileID: 7831782662127126385} + m_PrefabAsset: {fileID: 0} +--- !u!114 &-8197545831548902967 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6009713983291384756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d99850df10e83c142b4b65527d7cea91, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &3481187672596608374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6009713983291384756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e363085af981a41fd816ab952a0a07c7, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &4354133789489545025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6009713983291384756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a46d628dbb19f12449867d14fa5268b0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CachedServerCharacter: {fileID: 741733315856861890} +--- !u!114 &4781465086743528409 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6009713983291384756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 331c67f15523ad7419792662b9768f44, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ServerCharacter: {fileID: 741733315856861890} + m_PhysicsWrapper: {fileID: 6116655102486013040} +--- !u!114 &4887850889182527394 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6009713983291384756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b7ee3f8e8fb4491495b03f890258082e, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CharacterName: +--- !u!114 &5043718152237111612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6009713983291384756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b9cdcc3c2393a2745a733ffa279642ba, type: 3} + m_Name: + m_EditorClassIdentifier: + m_PlayerAvatars: {fileID: 11400000, guid: 13c227b8a2f5f5f4a8c252835aaf648f, type: 2} +--- !u!114 &4639653625902786935 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6009713983291384756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99504426d7b854c33811fe398cf44a80, type: 3} m_Name: m_EditorClassIdentifier: TransitionStateInfoList: @@ -334,152 +593,8 @@ MonoBehaviour: TriggerNameHash: -1747783153 TransitionIndex: 1 m_Animator: {fileID: 1829276847453002016} ---- !u!114 &7209204667172237188 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9073758047842524076} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9520a47fc61d5ab4ca99cdac2d574909, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ClientVisualsAnimator: {fileID: 1829276847453002016} - m_VisualizationConfiguration: {fileID: 11400000, guid: 9504973cdecd65749889771972fa0117, type: 2} ---- !u!1001 &7831782662127126385 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: -909640835356089789, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_ClientCharacterVisualization - value: - objectReference: {fileID: 7209204667172237188} - - target: {fileID: 350177175035117514, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_Animator - value: - objectReference: {fileID: 1829276847453002016} - - target: {fileID: 350177175035117514, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_NetworkAnimator - value: - objectReference: {fileID: 4785536047137923048} - - target: {fileID: 4600110157238723776, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_AoePrefab - value: - objectReference: {fileID: 8447158110562487606, guid: 88beb3857541f46d9becf14ba3392b89, type: 3} - - target: {fileID: 4600110157238723779, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_Enabled - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723779, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_NetworkCharacterDefinition - value: - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_Name - value: PlayerAvatar - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723790, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: PrefabHash - value: 1946294289364405461 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723790, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: GlobalObjectIdHash - value: 951099334 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723790, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: PrefabHashGenerator - value: PlayerAvatar - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7420593339233078707, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: animator - value: - objectReference: {fileID: 1829276847453002016} - - target: {fileID: 7420593339233078707, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_ClientCharacter - value: - objectReference: {fileID: 7209204667172237188} - - target: {fileID: 7420593339233078707, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_ClientVisualization - value: - objectReference: {fileID: 7209204667172237188} - - target: {fileID: 7690172137830037487, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_Enabled - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8690326290994660422, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - propertyPath: m_TagString - value: Player - objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 4462343263575301329, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - - {fileID: -6618539813679097072, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - m_SourcePrefab: {fileID: 100100000, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} ---- !u!114 &741733315856861890 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 7420593339233078707, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - m_PrefabInstance: {fileID: 7831782662127126385} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6009713983291384756} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 920a440eb254ba348915767fd046027a, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &6009713983291384756 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 4600110157238723781, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} - m_PrefabInstance: {fileID: 7831782662127126385} - m_PrefabAsset: {fileID: 0} ---- !u!114 &-8197545831548902967 + m_NetworkAvatarGuidState: {fileID: 6438351454149486027} +--- !u!114 &7232939173259361562 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -488,9 +603,10 @@ MonoBehaviour: m_GameObject: {fileID: 6009713983291384756} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d99850df10e83c142b4b65527d7cea91, type: 3} + m_Script: {fileID: 11500000, guid: 119ee2e9b25694aa9b2f80b9a3d22c6e, type: 3} m_Name: m_EditorClassIdentifier: + m_FeedbackPrefab: {fileID: 9137928905311479176, guid: 5d22c1d86e0e5604cbe14004bf924827, type: 3} --- !u!114 &2576537793715222015 MonoBehaviour: m_ObjectHideFlags: 0 @@ -512,98 +628,27 @@ MonoBehaviour: m_TransformToTrack: {fileID: 7902288483105483375} m_VerticalWorldOffset: 2.2 m_VerticalScreenOffset: 20 ---- !u!114 &3481187672596608374 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6009713983291384756} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e363085af981a41fd816ab952a0a07c7, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &4354133789489545025 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6009713983291384756} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a46d628dbb19f12449867d14fa5268b0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_CachedServerCharacter: {fileID: 741733315856861890} ---- !u!114 &4781465086743528409 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6009713983291384756} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 331c67f15523ad7419792662b9768f44, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ServerCharacter: {fileID: 741733315856861890} - m_PhysicsWrapper: {fileID: 6116655102486013040} ---- !u!114 &4887850889182527394 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6009713983291384756} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b7ee3f8e8fb4491495b03f890258082e, type: 3} - m_Name: - m_EditorClassIdentifier: - m_CharacterName: ---- !u!114 &5043718152237111612 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6009713983291384756} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b9cdcc3c2393a2745a733ffa279642ba, type: 3} - m_Name: - m_EditorClassIdentifier: - m_PlayerAvatars: {fileID: 11400000, guid: 13c227b8a2f5f5f4a8c252835aaf648f, type: 2} ---- !u!114 &6940323159316181846 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6009713983291384756} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7bb02fcdd8d85034794f2a32382009e3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_GraphicsAnimator: {fileID: 1829276847453002016} - m_NetworkAvatarGuidState: {fileID: 6438351454149486027} ---- !u!114 &7232939173259361562 -MonoBehaviour: +--- !u!95 &4727018541459492655 +Animator: + serializedVersion: 5 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6009713983291384756} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 119ee2e9b25694aa9b2f80b9a3d22c6e, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FeedbackPrefab: {fileID: 9137928905311479176, guid: 5d22c1d86e0e5604cbe14004bf924827, type: 3} + m_Enabled: 0 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 0} + m_CullingMode: 2 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!4 &6009713983291384766 stripped Transform: m_CorrespondingSourceObject: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3} diff --git a/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientAvatarGuidHandler.cs b/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientAvatarGuidHandler.cs deleted file mode 100644 index a3d76552fd..0000000000 --- a/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientAvatarGuidHandler.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using Unity.Netcode; -using UnityEngine; - -namespace Unity.BossRoom.Gameplay.GameplayObjects.Character -{ - /// - /// Client-side component that awaits a state change on an avatar's Guid, and fetches matching Avatar from the - /// AvatarRegistry, if possible. Once fetched, the Graphics GameObject is spawned. - /// - [RequireComponent(typeof(NetworkAvatarGuidState))] - public class ClientAvatarGuidHandler : NetworkBehaviour - { - [SerializeField] - Animator m_GraphicsAnimator; - - [SerializeField] - NetworkAvatarGuidState m_NetworkAvatarGuidState; - - public Animator graphicsAnimator => m_GraphicsAnimator; - - public event Action AvatarGraphicsSpawned; - - public override void OnNetworkSpawn() - { - if (IsClient) - { - InstantiateAvatar(); - } - } - - void InstantiateAvatar() - { - if (m_GraphicsAnimator.transform.childCount > 0) - { - // we may receive a NetworkVariable's OnValueChanged callback more than once as a client - // this makes sure we don't spawn a duplicate graphics GameObject - return; - } - - // spawn avatar graphics GameObject - Instantiate(m_NetworkAvatarGuidState.RegisteredAvatar.Graphics, m_GraphicsAnimator.transform); - - m_GraphicsAnimator.Rebind(); - m_GraphicsAnimator.Update(0f); - - AvatarGraphicsSpawned?.Invoke(m_GraphicsAnimator.gameObject); - } - } -} diff --git a/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientCharacter.cs b/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientCharacter.cs index 9af48869d5..314683246d 100644 --- a/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientCharacter.cs +++ b/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientCharacter.cs @@ -140,9 +140,9 @@ public override void OnNetworkSpawn() { name = "AvatarGraphics" + m_ServerCharacter.OwnerClientId; - if (m_ServerCharacter.TryGetComponent(out ClientAvatarGuidHandler clientAvatarGuidHandler)) + if (m_ServerCharacter.TryGetComponent(out ClientPlayerAvatarNetworkAnimator characterNetworkAnimator)) { - m_ClientVisualsAnimator = clientAvatarGuidHandler.graphicsAnimator; + m_ClientVisualsAnimator = characterNetworkAnimator.Animator; } m_CharacterSwapper = GetComponentInChildren(); diff --git a/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientPlayerAvatarNetworkAnimator.cs b/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientPlayerAvatarNetworkAnimator.cs new file mode 100644 index 0000000000..2d9fdf353d --- /dev/null +++ b/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientPlayerAvatarNetworkAnimator.cs @@ -0,0 +1,70 @@ +using Unity.Netcode; +using Unity.Netcode.Components; +using UnityEngine; + +namespace Unity.BossRoom.Gameplay.GameplayObjects.Character +{ + /// + /// Component that spawns a PlayerAvatar's Avatar. It does this in two places: + /// 1) either inside OnNetworkSpawn() or + /// 2) inside NetworkAnimator's OnSynchronize method. + /// The latter is necessary for clients receiving initial synchronizing data, where the Animator needs to be present + /// and bound (Animator.Bind()) *before* the incoming animation data is applied. + /// + public class ClientPlayerAvatarNetworkAnimator : NetworkAnimator + { + [SerializeField] + NetworkAvatarGuidState m_NetworkAvatarGuidState; + + bool m_AvatarInstantiated; + + public override void OnNetworkSpawn() + { + base.OnNetworkSpawn(); + if (!IsClient || m_AvatarInstantiated) + { + return; + } + + InstantiateAvatar(); + } + + public override void OnNetworkDespawn() + { + base.OnNetworkDespawn(); + m_AvatarInstantiated = false; + var avatarGraphics = Animator.transform.GetChild(0); + if (avatarGraphics != null) + { + Destroy(avatarGraphics.gameObject); + } + } + + protected override void OnSynchronize(ref BufferSerializer serializer) + { + if (NetworkManager.Singleton.IsClient && !m_AvatarInstantiated) + { + InstantiateAvatar(); + } + + base.OnSynchronize(ref serializer); + } + + void InstantiateAvatar() + { + if (Animator.transform.childCount > 0) + { + // we may receive a NetworkVariable's OnValueChanged callback more than once as a client + // this makes sure we don't spawn a duplicate graphics GameObject + return; + } + + // spawn avatar graphics GameObject + Instantiate(m_NetworkAvatarGuidState.RegisteredAvatar.Graphics, Animator.transform); + + Animator.Rebind(); + + m_AvatarInstantiated = true; + } + } +} diff --git a/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientAvatarGuidHandler.cs.meta b/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientPlayerAvatarNetworkAnimator.cs.meta similarity index 83% rename from Assets/Scripts/Gameplay/GameplayObjects/Character/ClientAvatarGuidHandler.cs.meta rename to Assets/Scripts/Gameplay/GameplayObjects/Character/ClientPlayerAvatarNetworkAnimator.cs.meta index cab21da376..8d8feb973c 100644 --- a/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientAvatarGuidHandler.cs.meta +++ b/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientPlayerAvatarNetworkAnimator.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7bb02fcdd8d85034794f2a32382009e3 +guid: 99504426d7b854c33811fe398cf44a80 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Gameplay/GameplayObjects/Character/ServerAnimationHandler.cs b/Assets/Scripts/Gameplay/GameplayObjects/Character/ServerAnimationHandler.cs index 59e1515500..85fa6ff692 100644 --- a/Assets/Scripts/Gameplay/GameplayObjects/Character/ServerAnimationHandler.cs +++ b/Assets/Scripts/Gameplay/GameplayObjects/Character/ServerAnimationHandler.cs @@ -1,5 +1,4 @@ using System; -using System.Collections; using Unity.BossRoom.Gameplay.Configuration; using Unity.Netcode; using Unity.Netcode.Components; @@ -24,18 +23,7 @@ public override void OnNetworkSpawn() { if (IsServer) { - // Wait until next frame before registering on OnValueChanged to make sure NetworkAnimator has spawned before. - StartCoroutine(WaitToRegisterOnLifeStateChanged()); - } - } - - IEnumerator WaitToRegisterOnLifeStateChanged() - { - yield return new WaitForEndOfFrame(); - m_NetworkLifeState.LifeState.OnValueChanged += OnLifeStateChanged; - if (m_NetworkLifeState.LifeState.Value != LifeState.Alive) - { - OnLifeStateChanged(LifeState.Alive, m_NetworkLifeState.LifeState.Value); + m_NetworkLifeState.LifeState.OnValueChanged += OnLifeStateChanged; } } @@ -59,7 +47,7 @@ void OnLifeStateChanged(LifeState previousValue, LifeState newValue) public override void OnNetworkDespawn() { - if (IsServer) + if (IsServer && m_NetworkLifeState != null) { m_NetworkLifeState.LifeState.OnValueChanged -= OnLifeStateChanged; } diff --git a/Assets/Scripts/Gameplay/UI/UIStateDisplayHandler.cs b/Assets/Scripts/Gameplay/UI/UIStateDisplayHandler.cs index ef15dbce56..b9c3730364 100644 --- a/Assets/Scripts/Gameplay/UI/UIStateDisplayHandler.cs +++ b/Assets/Scripts/Gameplay/UI/UIStateDisplayHandler.cs @@ -1,4 +1,3 @@ -using System; using System.Collections; using Unity.BossRoom.Gameplay.GameplayObjects; using Unity.BossRoom.Gameplay.GameplayObjects.Character; @@ -44,7 +43,7 @@ public class UIStateDisplayHandler : NetworkBehaviour ServerCharacter m_ServerCharacter; - ClientAvatarGuidHandler m_ClientAvatarGuidHandler; + ClientPlayerAvatarNetworkAnimator m_ClientPlayerAvatarNetworkAnimator; NetworkAvatarGuidState m_NetworkAvatarGuidState; @@ -111,18 +110,11 @@ public override void OnNetworkSpawn() m_VerticalOffset = new Vector3(0f, m_VerticalScreenOffset, 0f); // if PC, find our graphics transform and update health through callbacks, if displayed - if (TryGetComponent(out m_ClientAvatarGuidHandler) && TryGetComponent(out m_NetworkAvatarGuidState)) + if (TryGetComponent(out m_ClientPlayerAvatarNetworkAnimator) && TryGetComponent(out m_NetworkAvatarGuidState)) { m_BaseHP = m_NetworkAvatarGuidState.RegisteredAvatar.CharacterClass.BaseHP; - if (m_ServerCharacter.clientCharacter) - { - TrackGraphicsTransform(m_ServerCharacter.clientCharacter.gameObject); - } - else - { - m_ClientAvatarGuidHandler.AvatarGraphicsSpawned += TrackGraphicsTransform; - } + m_TransformToTrack = m_ClientPlayerAvatarNetworkAnimator.Animator.transform; if (m_DisplayHealth) { @@ -154,11 +146,6 @@ void OnDisable() m_NetworkHealthState.HitPointsReplenished -= DisplayUIHealth; m_NetworkHealthState.HitPointsDepleted -= RemoveUIHealth; } - - if (m_ClientAvatarGuidHandler) - { - m_ClientAvatarGuidHandler.AvatarGraphicsSpawned -= TrackGraphicsTransform; - } } void DisplayUIName() @@ -213,11 +200,6 @@ IEnumerator WaitToHideHealthBar() m_UIState.HideHealth(); } - void TrackGraphicsTransform(GameObject graphicsGameObject) - { - m_TransformToTrack = graphicsGameObject.transform; - } - /// /// Moving UI objects on LateUpdate ensures that the game camera is at its final position pre-render. /// diff --git a/CHANGELOG.md b/CHANGELOG.md index c75ae31ea5..a18137d5f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ Additional documentation and release notes are available at [Multiplayer Documen * ClientConnectedState has been modified to account for server/host now populating DisconnectReason before disconnecting a client before shutting down * Upgraded editor version to 2022.3.22f1 (#884) * com.unity.render-pipelines.universal upgraded to v14.0.10 +* ClientPlayerAvatarNetworkAnimator has been created to: instantiate the player model based on a networked GUID, rebind this rig to the player's Animator, and apply synchronize data to said Animator (#886) + * This change allows for NetworkAnimator's synchronize step to properly apply its sync data to clients instead of applying an animation state change on OnNetworkSpawn() + * A side-effect of this change has been that a coroutine that had been awaiting the assignment of NetworkAnimator has since been removed as it is no longer an issue on Netcode for GameObjects (since v1.3.1) ### Cleanup * Removed NetworkObject from MainMenuState (#881)