diff --git a/CHANGELOG-PRERELEASE-jp.md b/CHANGELOG-PRERELEASE-jp.md index 2a95122e..c9ba0706 100644 --- a/CHANGELOG-PRERELEASE-jp.md +++ b/CHANGELOG-PRERELEASE-jp.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### Fixed +- [#1553] リアクティブコンポーネントが生成するステートに、WD設定が正しくない問題を修正 ### Changed - [#1551] Merge Animatorは、遷移のない単一のstateを持つブレンドツリーのレイヤーに対して常にWDをONに設定します。 diff --git a/CHANGELOG-PRERELEASE.md b/CHANGELOG-PRERELEASE.md index 6481b139..57619e6f 100644 --- a/CHANGELOG-PRERELEASE.md +++ b/CHANGELOG-PRERELEASE.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### Fixed +- [#1553] Reactive components might generate states with incorrect write default settings ### Changed - [#1551] Merge Animator will always set WD ON for single-state blendtree layers with no any state transitions. diff --git a/CHANGELOG-jp.md b/CHANGELOG-jp.md index c6345d0e..a52ee500 100644 --- a/CHANGELOG-jp.md +++ b/CHANGELOG-jp.md @@ -12,6 +12,7 @@ Modular Avatarの主な変更点をこのファイルで記録しています。 - (実験的機能) VRC以外のプラットフォームのサポートを有効化 ### Fixed +- [#1553] リアクティブコンポーネントが生成するステートに、WD設定が正しくない問題を修正 ### Changed - [#1551] Merge Animatorは、遷移のない単一のstateを持つブレンドツリーのレイヤーに対して常にWDをONに設定します。 diff --git a/CHANGELOG.md b/CHANGELOG.md index f230d01c..c48b066a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - (Experimental feature) Enabled support for non-VRC platforms ### Fixed +- [#1553] Reactive components might generate states with incorrect write default settings ### Changed - [#1551] Merge Animator will always set WD ON for single-state blendtree layers with no any state transitions. diff --git a/Editor/MergeAnimatorProcessor.cs b/Editor/MergeAnimatorProcessor.cs index c1fc5a10..1165a1f4 100644 --- a/Editor/MergeAnimatorProcessor.cs +++ b/Editor/MergeAnimatorProcessor.cs @@ -114,19 +114,27 @@ namespace nadena.dev.modular_avatar.core.editor // We'll now continue processing the rest as normal. } + var writeDefaults = AnalyzeLayerWriteDefaults(controller); + + foreach (var component in sorted) + { + MergeSingle(context, controller, component, writeDefaults); + } + } + + internal static bool? AnalyzeLayerWriteDefaults(VirtualAnimatorController controller) + { bool? writeDefaults = null; - - var wdStateCounter = controller.Layers.SelectMany(l => l.StateMachine.AllStates()) + + var wdStateCounter = controller.Layers + .Where(l => !IsWriteDefaultsSafeLayer(l)) + .SelectMany(l => l.StateMachine.AllStates()) .Select(s => s.WriteDefaultValues) .GroupBy(b => b) .ToDictionary(g => g.Key, g => g.Count()); if (wdStateCounter.Count == 1) writeDefaults = wdStateCounter.First().Key; - - foreach (var component in sorted) - { - MergeSingle(context, controller, component, writeDefaults); - } + return writeDefaults; } private void MergeSingle(BuildContext context, VirtualAnimatorController targetController, @@ -208,7 +216,7 @@ namespace nadena.dev.modular_avatar.core.editor Object.DestroyImmediate(merge); } - private bool IsWriteDefaultsSafeLayer(VirtualLayer virtualLayer) + private static bool IsWriteDefaultsSafeLayer(VirtualLayer virtualLayer) { if (virtualLayer.BlendingMode == AnimatorLayerBlendingMode.Additive) return true; var sm = virtualLayer.StateMachine; diff --git a/Editor/ReactiveObjects/AnimationGeneration/ReactiveObjectPass.cs b/Editor/ReactiveObjects/AnimationGeneration/ReactiveObjectPass.cs index 2a1a2e47..07e32cdb 100644 --- a/Editor/ReactiveObjects/AnimationGeneration/ReactiveObjectPass.cs +++ b/Editor/ReactiveObjects/AnimationGeneration/ReactiveObjectPass.cs @@ -40,13 +40,11 @@ namespace nadena.dev.modular_avatar.core.editor // Having a WD OFF layer after WD ON layers can break WD. We match the behavior of the existing states, // and if mixed, use WD ON to maximize compatibility. var asc = context.Extension(); - _writeDefaults = asc.ControllerContext.Controllers[VRCAvatarDescriptor.AnimLayerType.FX]?.Layers.Any( - l => l.StateMachine.StateMachines.Any( - sm => sm.StateMachine.AllStates().Any( - s => s.WriteDefaultValues && s.Motion is not VirtualBlendTree - ) - ) - ) ?? true; + var fxLayer = asc.ControllerContext.Controllers[VRCAvatarDescriptor.AnimLayerType.FX]; + if (fxLayer != null) + { + _writeDefaults = MergeAnimatorProcessor.AnalyzeLayerWriteDefaults(fxLayer) ?? true; + } var analysis = new ReactiveObjectAnalyzer(context).Analyze(context.AvatarRootObject); diff --git a/UnitTests~/ReactiveComponent/WD.meta b/UnitTests~/ReactiveComponent/WD.meta new file mode 100644 index 00000000..7e1ce8da --- /dev/null +++ b/UnitTests~/ReactiveComponent/WD.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 517a3e1b449bea941819c9902ce3de1b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/ReactiveComponent/WD/ReactiveComponentWriteDefaultsTest.cs b/UnitTests~/ReactiveComponent/WD/ReactiveComponentWriteDefaultsTest.cs new file mode 100644 index 00000000..99af3334 --- /dev/null +++ b/UnitTests~/ReactiveComponent/WD/ReactiveComponentWriteDefaultsTest.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using modular_avatar_tests; +using nadena.dev.modular_avatar.core.editor; +using NUnit.Framework; +using UnityEditor.Animations; +using UnityEngine; +using VRC.SDK3.Avatars.Components; + +public class ReactiveComponentWriteDefaultsTest : TestBase +{ + [Test] + public void RCObjectWriteDefaults([Values("rc_wd_on.controller", "rc_wd_off.controller")] string controllerPath) + { + var root = CreatePrefab("rc_wd.prefab"); + var avDesc = root.GetComponent(); + var controller = LoadAsset(controllerPath); + + var baseLayers = avDesc.baseAnimationLayers; + for (int i = 0; i < baseLayers.Length; i++) + { + baseLayers[i].animatorController = controller; + baseLayers[i].isDefault = false; + } + avDesc.baseAnimationLayers = baseLayers; + avDesc.customizeAnimationLayers = true; + + AvatarProcessor.ProcessAvatar(root); + + var fx = findFxLayer(root, "RC MA Responsive: GameObject"); + Assert.AreEqual( + controllerPath.StartsWith("rc_wd_on"), + fx.stateMachine.defaultState.writeDefaultValues + ); + } +} diff --git a/UnitTests~/ReactiveComponent/WD/ReactiveComponentWriteDefaultsTest.cs.meta b/UnitTests~/ReactiveComponent/WD/ReactiveComponentWriteDefaultsTest.cs.meta new file mode 100644 index 00000000..7fd0ba73 --- /dev/null +++ b/UnitTests~/ReactiveComponent/WD/ReactiveComponentWriteDefaultsTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8efec892da3ae3a45b810abf5cebad02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/ReactiveComponent/WD/rc_wd.prefab b/UnitTests~/ReactiveComponent/WD/rc_wd.prefab new file mode 100644 index 00000000..86e9007c --- /dev/null +++ b/UnitTests~/ReactiveComponent/WD/rc_wd.prefab @@ -0,0 +1,469 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &477583020495738404 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9179158997175056572} + - component: {fileID: 29650048224569744} + - component: {fileID: 2852631459141447588} + - component: {fileID: 8587532856046952446} + m_Layer: 0 + m_Name: GameObject OFF + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9179158997175056572 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477583020495738404} + 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: 1878023628084695976} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &29650048224569744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477583020495738404} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a162bb8ec7e24a5abcf457887f1df3fa, type: 3} + m_Name: + m_EditorClassIdentifier: + m_inverted: 0 + m_objects: + - Object: + referencePath: GameObject + targetObject: {fileID: 6320927576634437802} + Active: 0 +--- !u!114 &2852631459141447588 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477583020495738404} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b29d45007c5493d926d2cd45a489529, type: 3} + m_Name: + m_EditorClassIdentifier: + Control: + name: GameObject OFF + icon: {fileID: 0} + type: 102 + parameter: + name: + value: 1 + style: 0 + subMenu: {fileID: 0} + subParameters: [] + labels: [] + MenuSource: 1 + menuSource_otherObjectChildren: {fileID: 0} + isSynced: 1 + isSaved: 1 + isDefault: 0 + automaticValue: 1 + label: +--- !u!114 &8587532856046952446 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477583020495738404} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7ef83cb0c23d4d7c9d41021e544a1978, type: 3} + m_Name: + m_EditorClassIdentifier: + menuToAppend: {fileID: 0} + installTargetMenu: {fileID: 0} +--- !u!1 &5779388316383907521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1878023628084695976} + - component: {fileID: 7755083891606286594} + - component: {fileID: 586879300047358754} + - component: {fileID: 4246695544239537830} + - component: {fileID: 333680745927230906} + m_Layer: 0 + m_Name: rc_wd + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1878023628084695976 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5779388316383907521} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.22364601, y: 0.92672217, z: -1.631131} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7508355110127128095} + - {fileID: 9179158997175056572} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!95 &7755083891606286594 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5779388316383907521} + 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 &586879300047358754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5779388316383907521} + 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: 9100000, guid: bbe8f5d0b8aa75b46a8da9da84fca5f0, + type: 2} + mask: {fileID: 0} + isDefault: 0 + - isEnabled: 0 + type: 4 + animatorController: {fileID: 9100000, guid: bbe8f5d0b8aa75b46a8da9da84fca5f0, + type: 2} + mask: {fileID: 0} + isDefault: 0 + - isEnabled: 0 + type: 5 + animatorController: {fileID: 9100000, guid: bbe8f5d0b8aa75b46a8da9da84fca5f0, + 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 &4246695544239537830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5779388316383907521} + 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 +--- !u!114 &333680745927230906 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5779388316383907521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 52fa21b17bc14dc294959f976e3e184f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &6320927576634437802 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7508355110127128095} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7508355110127128095 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6320927576634437802} + 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: 1878023628084695976} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/UnitTests~/ReactiveComponent/WD/rc_wd.prefab.meta b/UnitTests~/ReactiveComponent/WD/rc_wd.prefab.meta new file mode 100644 index 00000000..83468a38 --- /dev/null +++ b/UnitTests~/ReactiveComponent/WD/rc_wd.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7b345973f37afde43945770cff0f468d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/ReactiveComponent/WD/rc_wd_off.controller b/UnitTests~/ReactiveComponent/WD/rc_wd_off.controller new file mode 100644 index 00000000..b3a380ba --- /dev/null +++ b/UnitTests~/ReactiveComponent/WD/rc_wd_off.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-5675820832765795809 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New State + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 0 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 0} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &-1329585102462520777 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: -5675820832765795809} + m_Position: {x: 370, y: 110, z: 0} + 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: -5675820832765795809} +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: rc_wd_off + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -1329585102462520777} + 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~/ReactiveComponent/WD/rc_wd_off.controller.meta b/UnitTests~/ReactiveComponent/WD/rc_wd_off.controller.meta new file mode 100644 index 00000000..e5aedda8 --- /dev/null +++ b/UnitTests~/ReactiveComponent/WD/rc_wd_off.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bbe8f5d0b8aa75b46a8da9da84fca5f0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/ReactiveComponent/WD/rc_wd_on.controller b/UnitTests~/ReactiveComponent/WD/rc_wd_on.controller new file mode 100644 index 00000000..681d811d --- /dev/null +++ b/UnitTests~/ReactiveComponent/WD/rc_wd_on.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-5675820832765795809 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New State + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 0} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &-1329585102462520777 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: -5675820832765795809} + m_Position: {x: 370, y: 110, z: 0} + 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: -5675820832765795809} +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: rc_wd_on + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -1329585102462520777} + 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~/ReactiveComponent/WD/rc_wd_on.controller.meta b/UnitTests~/ReactiveComponent/WD/rc_wd_on.controller.meta new file mode 100644 index 00000000..0b049e9f --- /dev/null +++ b/UnitTests~/ReactiveComponent/WD/rc_wd_on.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7fdfd4d33b132ab45b23f92ec3535b94 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: