From e7a317b896ecbe7df893d0ce45720e1b8c00ddc0 Mon Sep 17 00:00:00 2001 From: bd_ Date: Thu, 22 Feb 2024 18:30:24 +0900 Subject: [PATCH] fix: MergeDirectBlendTree overwrites animator default parameters with zeroes (#689) --- Editor/MergeBlendTreePass.cs | 26 +- Runtime/ModularAvatarParameters.cs | 2 +- .../DirectBlendTreeParameters.prefab | 19 +- UnitTests~/MergeDBT.meta | 8 + .../DBT_DoesNotOverwriteParameters.prefab | 374 ++++++++++++++++++ ...DBT_DoesNotOverwriteParameters.prefab.meta | 7 + UnitTests~/MergeDBT/MergeDBT.asset | 17 + UnitTests~/MergeDBT/MergeDBT.asset.meta | 8 + .../MergeDBT/MergeDirectBlendTreeTests.cs | 26 ++ .../MergeDirectBlendTreeTests.cs.meta | 11 + UnitTests~/MergeDBT/controller.controller | 49 +++ .../MergeDBT/controller.controller.meta | 8 + 12 files changed, 543 insertions(+), 12 deletions(-) create mode 100644 UnitTests~/MergeDBT.meta create mode 100644 UnitTests~/MergeDBT/DBT_DoesNotOverwriteParameters.prefab create mode 100644 UnitTests~/MergeDBT/DBT_DoesNotOverwriteParameters.prefab.meta create mode 100644 UnitTests~/MergeDBT/MergeDBT.asset create mode 100644 UnitTests~/MergeDBT/MergeDBT.asset.meta create mode 100644 UnitTests~/MergeDBT/MergeDirectBlendTreeTests.cs create mode 100644 UnitTests~/MergeDBT/MergeDirectBlendTreeTests.cs.meta create mode 100644 UnitTests~/MergeDBT/controller.controller create mode 100644 UnitTests~/MergeDBT/controller.controller.meta diff --git a/Editor/MergeBlendTreePass.cs b/Editor/MergeBlendTreePass.cs index 7982d8f9..89e5ffe5 100644 --- a/Editor/MergeBlendTreePass.cs +++ b/Editor/MergeBlendTreePass.cs @@ -1,8 +1,9 @@ #if MA_VRCSDK3_AVATARS +#region + using System; using System.Collections.Generic; -using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; using nadena.dev.modular_avatar.animation; using nadena.dev.ndmf; using nadena.dev.ndmf.util; @@ -10,6 +11,8 @@ using UnityEditor.Animations; using UnityEngine; using VRC.SDK3.Avatars.Components; +#endregion + namespace nadena.dev.modular_avatar.core.editor { internal class MergeBlendTreePass : Pass @@ -19,6 +22,7 @@ namespace nadena.dev.modular_avatar.core.editor private AnimatorController _controller; private BlendTree _rootBlendTree; + private GameObject _mergeHost; private HashSet _parameterNames; protected override void Execute(ndmf.BuildContext context) @@ -34,27 +38,33 @@ namespace nadena.dev.modular_avatar.core.editor } List parameters = new List(_parameterNames.Count + 1); - if (_controller != null) + if (_mergeHost != null) { _parameterNames.Remove(ALWAYS_ONE); parameters.Add(new AnimatorControllerParameter() { - defaultFloat = 1, name = ALWAYS_ONE, - type = AnimatorControllerParameterType.Float + type = AnimatorControllerParameterType.Float, + defaultFloat = 1 }); - + foreach (var name in _parameterNames) { parameters.Add(new AnimatorControllerParameter() { name = name, - type = AnimatorControllerParameterType.Float + type = AnimatorControllerParameterType.Float, + defaultFloat = 0 }); } - _controller.parameters = parameters.ToArray(); + var paramsAnimator = new AnimatorController(); + paramsAnimator.parameters = parameters.ToArray(); + + var paramsComponent = _mergeHost.AddComponent(); + paramsComponent.animator = paramsAnimator; + paramsComponent.layerPriority = Int32.MaxValue; } } @@ -167,6 +177,8 @@ namespace nadena.dev.modular_avatar.core.editor mergeObject.transform.SetParent(context.AvatarRootTransform, false); mergeObject.transform.SetSiblingIndex(0); + _mergeHost = mergeObject; + return _rootBlendTree; } } diff --git a/Runtime/ModularAvatarParameters.cs b/Runtime/ModularAvatarParameters.cs index 2a857dec..bc691a38 100644 --- a/Runtime/ModularAvatarParameters.cs +++ b/Runtime/ModularAvatarParameters.cs @@ -36,7 +36,7 @@ namespace nadena.dev.modular_avatar.core internal bool OverrideAnimatorDefaults { - get => m_overrideAnimatorDefaults || syncType == ParameterSyncType.NotSynced && hasExplicitDefaultValue; + get => m_overrideAnimatorDefaults || syncType == ParameterSyncType.NotSynced && HasDefaultValue; set => m_overrideAnimatorDefaults = value; } diff --git a/UnitTests~/DirectBlendTreeParameters/DirectBlendTreeParameters.prefab b/UnitTests~/DirectBlendTreeParameters/DirectBlendTreeParameters.prefab index eba85d56..b3d47ebc 100644 --- a/UnitTests~/DirectBlendTreeParameters/DirectBlendTreeParameters.prefab +++ b/UnitTests~/DirectBlendTreeParameters/DirectBlendTreeParameters.prefab @@ -25,12 +25,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 358086172465847897} + 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: 4724854421498416451} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &8166779794048720401 MonoBehaviour: @@ -50,8 +51,11 @@ MonoBehaviour: internalParameter: 0 isPrefix: 0 syncType: 0 + localOnly: 0 defaultValue: 0 saved: 0 + hasExplicitDefaultValue: 0 + m_overrideAnimatorDefaults: 0 --- !u!114 &3545031262107578409 MonoBehaviour: m_ObjectHideFlags: 0 @@ -69,6 +73,9 @@ MonoBehaviour: deleteAttachedAnimator: 0 pathMode: 0 matchAvatarWriteDefaults: 0 + relativePathRoot: + referencePath: + layerPriority: 0 --- !u!1 &6524782399038551043 GameObject: m_ObjectHideFlags: 0 @@ -95,13 +102,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6524782399038551043} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 4.1121078, y: 0.04631436, z: -0.7135619} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 4301418309833736947} m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2239338889414089943 MonoBehaviour: @@ -129,6 +137,7 @@ MonoBehaviour: unityVersion: portraitCameraPositionOffset: {x: 0, y: 0, z: 0} portraitCameraRotationOffset: {x: 0, y: 1, z: 0, w: -0.00000004371139} + networkIDs: [] customExpressions: 0 expressionsMenu: {fileID: 0} expressionParameters: {fileID: 0} @@ -371,7 +380,7 @@ MonoBehaviour: fallbackStatus: 0 --- !u!95 &5629002289773137650 Animator: - serializedVersion: 3 + serializedVersion: 5 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -384,7 +393,9 @@ Animator: m_UpdateMode: 0 m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 diff --git a/UnitTests~/MergeDBT.meta b/UnitTests~/MergeDBT.meta new file mode 100644 index 00000000..9e09ad68 --- /dev/null +++ b/UnitTests~/MergeDBT.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6b584e4568c8d6489cab0ac2fe60d24 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/MergeDBT/DBT_DoesNotOverwriteParameters.prefab b/UnitTests~/MergeDBT/DBT_DoesNotOverwriteParameters.prefab new file mode 100644 index 00000000..e4470cc6 --- /dev/null +++ b/UnitTests~/MergeDBT/DBT_DoesNotOverwriteParameters.prefab @@ -0,0 +1,374 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4559641764900862794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1743705208525404268} + - component: {fileID: 916205603552364499} + m_Layer: 0 + m_Name: DBT + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1743705208525404268 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4559641764900862794} + 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: 6126661909311037496} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &916205603552364499 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4559641764900862794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 229dd561ca024a6588e388160921a70f, type: 3} + m_Name: + m_EditorClassIdentifier: + BlendTree: {fileID: 20600000, guid: 05592b62d9c1b9d4e91be1dda1f8644b, type: 2} + PathMode: 0 + RelativePathRoot: + referencePath: +--- !u!1 &7937361116639956917 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6126661909311037496} + - component: {fileID: 2074438238256359837} + - component: {fileID: 6671170737053486778} + - component: {fileID: 8179475080615217043} + m_Layer: 0 + m_Name: DBT_DoesNotOverwriteParameters + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6126661909311037496 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7937361116639956917} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.5386686, y: 1.0673547, z: -5.4029636} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1743705208525404268} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!95 &2074438238256359837 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7937361116639956917} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 0} + m_CullingMode: 0 + 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!114 &6671170737053486778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7937361116639956917} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 542108242, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: + m_EditorClassIdentifier: + Name: + ViewPosition: {x: 0, y: 1.6, z: 0.2} + Animations: 0 + ScaleIPD: 1 + lipSync: 0 + lipSyncJawBone: {fileID: 0} + lipSyncJawClosed: {x: 0, y: 0, z: 0, w: 1} + lipSyncJawOpen: {x: 0, y: 0, z: 0, w: 1} + VisemeSkinnedMesh: {fileID: 0} + MouthOpenBlendShapeName: Facial_Blends.Jaw_Down + VisemeBlendShapes: [] + unityVersion: + portraitCameraPositionOffset: {x: 0, y: 0, z: 0} + portraitCameraRotationOffset: {x: 0, y: 1, z: 0, w: -0.00000004371139} + networkIDs: [] + customExpressions: 0 + expressionsMenu: {fileID: 0} + expressionParameters: {fileID: 0} + enableEyeLook: 0 + customEyeLookSettings: + eyeMovement: + confidence: 0.5 + excitement: 0.5 + leftEye: {fileID: 0} + rightEye: {fileID: 0} + eyesLookingStraight: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingUp: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingDown: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingLeft: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingRight: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidType: 0 + upperLeftEyelid: {fileID: 0} + upperRightEyelid: {fileID: 0} + lowerLeftEyelid: {fileID: 0} + lowerRightEyelid: {fileID: 0} + eyelidsDefault: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsClosed: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsLookingUp: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsLookingDown: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsSkinnedMesh: {fileID: 0} + eyelidsBlendshapes: + customizeAnimationLayers: 1 + baseAnimationLayers: + - isEnabled: 0 + type: 0 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 4 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 5 + animatorController: {fileID: 9100000, guid: 5389087384c18fd409604d1815efd067, + type: 2} + mask: {fileID: 0} + isDefault: 0 + specialAnimationLayers: + - isEnabled: 0 + type: 6 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 7 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 8 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + AnimationPreset: {fileID: 0} + animationHashSet: [] + autoFootsteps: 1 + autoLocomotion: 1 + collider_head: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_torso: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_footR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_footL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_handR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_handL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerIndexL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerMiddleL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerRingL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerLittleL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerIndexR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerMiddleR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerRingR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerLittleR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} +--- !u!114 &8179475080615217043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7937361116639956917} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3} + m_Name: + m_EditorClassIdentifier: + launchedFromSDKPipeline: 0 + completedSDKPipeline: 0 + blueprintId: + contentType: 0 + assetBundleUnityVersion: + fallbackStatus: 0 diff --git a/UnitTests~/MergeDBT/DBT_DoesNotOverwriteParameters.prefab.meta b/UnitTests~/MergeDBT/DBT_DoesNotOverwriteParameters.prefab.meta new file mode 100644 index 00000000..8bc9b92c --- /dev/null +++ b/UnitTests~/MergeDBT/DBT_DoesNotOverwriteParameters.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1d2d37c0d5cd2d34f8565e6168528c06 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/MergeDBT/MergeDBT.asset b/UnitTests~/MergeDBT/MergeDBT.asset new file mode 100644 index 00000000..4de9df80 --- /dev/null +++ b/UnitTests~/MergeDBT/MergeDBT.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!206 &20600000 +BlendTree: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MergeDBT + m_Childs: [] + m_BlendParameter: ABC + m_BlendParameterY: DEF + m_MinThreshold: 0 + m_MaxThreshold: 1 + m_UseAutomaticThresholds: 1 + m_NormalizedBlendValues: 0 + m_BlendType: 1 diff --git a/UnitTests~/MergeDBT/MergeDBT.asset.meta b/UnitTests~/MergeDBT/MergeDBT.asset.meta new file mode 100644 index 00000000..c5bd838d --- /dev/null +++ b/UnitTests~/MergeDBT/MergeDBT.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05592b62d9c1b9d4e91be1dda1f8644b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 20600000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/MergeDBT/MergeDirectBlendTreeTests.cs b/UnitTests~/MergeDBT/MergeDirectBlendTreeTests.cs new file mode 100644 index 00000000..188ef484 --- /dev/null +++ b/UnitTests~/MergeDBT/MergeDirectBlendTreeTests.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using System.Collections.Immutable; +using modular_avatar_tests; +using nadena.dev.ndmf; +using NUnit.Framework; +using UnityEditor.Animations; +using UnityEngine; + +public class MergeDirectBlendTreeTests : TestBase +{ + [Test] + public void DoesNotOverwriteBaseParameters() + { + var prefab = CreatePrefab("DBT_DoesNotOverwriteParameters.prefab"); + + AvatarProcessor.ProcessAvatar(prefab); + + var fx = FindFxController(prefab); + var ac = (AnimatorController)fx.animatorController; + var parameters = ac.parameters.ToImmutableDictionary(i => i.name, i => i.defaultFloat); + + Assert.AreEqual(123, parameters["ABC"]); + Assert.AreEqual(0, parameters["DEF"]); + } +} diff --git a/UnitTests~/MergeDBT/MergeDirectBlendTreeTests.cs.meta b/UnitTests~/MergeDBT/MergeDirectBlendTreeTests.cs.meta new file mode 100644 index 00000000..07e1a95e --- /dev/null +++ b/UnitTests~/MergeDBT/MergeDirectBlendTreeTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 746d0039a8c042d4b92c99aee02e25cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/MergeDBT/controller.controller b/UnitTests~/MergeDBT/controller.controller new file mode 100644 index 00000000..61129c16 --- /dev/null +++ b/UnitTests~/MergeDBT/controller.controller @@ -0,0 +1,49 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1107 &-5930511484880460132 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: [] + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 0} +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: controller + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: ABC + m_Type: 1 + m_DefaultFloat: 123 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -5930511484880460132} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} diff --git a/UnitTests~/MergeDBT/controller.controller.meta b/UnitTests~/MergeDBT/controller.controller.meta new file mode 100644 index 00000000..4e2d4d84 --- /dev/null +++ b/UnitTests~/MergeDBT/controller.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5389087384c18fd409604d1815efd067 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: