using System.Collections.Generic; using UnityEngine; namespace Watermelon { public class AnimatorParameters { private readonly Dictionary floatParameters = new Dictionary(); private readonly Dictionary intParameters = new Dictionary(); private readonly Dictionary boolParameters = new Dictionary(); private readonly List triggerParameters = new List(); private readonly Dictionary layerWeights = new Dictionary(); public AnimatorParameters(Animator animator) { foreach (AnimatorControllerParameter parameter in animator.parameters) { switch (parameter.type) { case AnimatorControllerParameterType.Float: floatParameters[parameter.name] = animator.GetFloat(parameter.name); break; case AnimatorControllerParameterType.Int: intParameters[parameter.name] = animator.GetInteger(parameter.name); break; case AnimatorControllerParameterType.Bool: boolParameters[parameter.name] = animator.GetBool(parameter.name); break; case AnimatorControllerParameterType.Trigger: if (animator.GetBool(parameter.name)) triggerParameters.Add(parameter.name); break; } } for (int i = 0; i < animator.layerCount; i++) { layerWeights[i] = animator.GetLayerWeight(i); } } public void ApplyTo(Animator animator) { foreach (var parameter in floatParameters) { animator.SetFloat(parameter.Key, parameter.Value); } foreach (var parameter in intParameters) { animator.SetInteger(parameter.Key, parameter.Value); } foreach (var parameter in boolParameters) { animator.SetBool(parameter.Key, parameter.Value); } foreach (var parameter in triggerParameters) { animator.SetTrigger(parameter); } foreach (var layerWeight in layerWeights) { animator.SetLayerWeight(layerWeight.Key, layerWeight.Value); } } } }