public void SaveAnimatorState(Animator animator, UMAData umaData) { umaData.FireAnimatorStateSavedEvent(); int layerCount = animator.layerCount; stateHashes = new int[layerCount]; stateTimes = new float[layerCount]; parameters = new AnimatorControllerParameter[animator.parameterCount]; layerWeights.Clear(); for (int i = 0; i < layerCount; i++) { var state = animator.GetCurrentAnimatorStateInfo(i); stateHashes[i] = state.fullPathHash; stateTimes[i] = Mathf.Max(0, state.normalizedTime + Time.deltaTime / state.length); layerWeights.Add(i, animator.GetLayerWeight(i)); } Array.Copy(animator.parameters, parameters, animator.parameterCount); foreach (AnimatorControllerParameter param in parameters) { switch (param.type) { case AnimatorControllerParameterType.Bool: param.defaultBool = animator.GetBool(param.nameHash); break; case AnimatorControllerParameterType.Float: param.defaultFloat = animator.GetFloat(param.nameHash); break; case AnimatorControllerParameterType.Int: param.defaultInt = animator.GetInteger(param.nameHash); break; } } }
public void SaveAnimatorState(Animator animator, UMAData umaData) { if (animator == null) { wasCopied = false; return; } umaData.FireAnimatorStateSavedEvent(); if (animator.runtimeAnimatorController == null) { return; } int layerCount = 0; if (animator.isInitialized) { layerCount = animator.layerCount; } stateHashes = new int[layerCount]; stateTimes = new float[layerCount]; if (animator.isInitialized) { parameters = new AnimatorControllerParameter[animator.parameterCount]; Array.Copy(animator.parameters, parameters, animator.parameterCount); foreach (AnimatorControllerParameter param in parameters) { switch (param.type) { case AnimatorControllerParameterType.Bool: param.defaultBool = animator.GetBool(param.nameHash); break; case AnimatorControllerParameterType.Float: param.defaultFloat = animator.GetFloat(param.nameHash); break; case AnimatorControllerParameterType.Int: param.defaultInt = animator.GetInteger(param.nameHash); break; } } } layerWeights.Clear(); for (int i = 0; i < layerCount; i++) { var state = animator.GetCurrentAnimatorStateInfo(i); stateHashes[i] = state.fullPathHash; #if UNITY_EDITOR float time = state.normalizedTime; if (!FreezeTime) { time += Time.deltaTime / state.length; } #else float time = state.normalizedTime + Time.deltaTime / state.length; #endif stateTimes[i] = Mathf.Max(0, time); layerWeights.Add(i, animator.GetLayerWeight(i)); } wasCopied = true; }