private void CreateAnimatorOverrideController(ImportedAnimationSheet animations, bool useExistingBaseController = false) { AnimatorOverrideController overrideController; string directory = sharedData.animationControllersTargetLocation.GetAndEnsureTargetDirectory(animations.assetDirectory); // check if override controller already exists; use this to not loose any references to this in other assets string pathForOverrideController = directory + "/" + animations.name + ".overrideController"; overrideController = AssetDatabase.LoadAssetAtPath <AnimatorOverrideController>(pathForOverrideController); RuntimeAnimatorController baseController = _baseController; if (useExistingBaseController && overrideController.runtimeAnimatorController != null) { baseController = overrideController.runtimeAnimatorController; } if (baseController != null) { if (overrideController == null) { overrideController = new AnimatorOverrideController(); AssetDatabase.CreateAsset(overrideController, pathForOverrideController); } overrideController.runtimeAnimatorController = baseController; // set override clips #if UNITY_5_6_OR_NEWER var clipPairs = new List <KeyValuePair <AnimationClip, AnimationClip> >(overrideController.overridesCount); overrideController.GetOverrides(clipPairs); foreach (var pair in clipPairs) { string animationName = pair.Key.name; AnimationClip clip = animations.GetClipOrSimilar(animationName); overrideController[animationName] = clip; } #else var clipPairs = overrideController.clips; for (int i = 0; i < clipPairs.Length; i++) { string animationName = clipPairs[i].originalClip.name; AnimationClip clip = animations.GetClipOrSimilar(animationName); clipPairs[i].overrideClip = clip; } overrideController.clips = clipPairs; #endif EditorUtility.SetDirty(overrideController); } else { Debug.LogWarning("No Animator Controller found as a base for the Override Controller"); } }
public void CreateAnimatorOverrideController(ImportedAnimationSheet animations, bool useExistingBaseController = false) { AnimatorOverrideController overrideController; // check if override controller already exists; use this to not loose any references to this in other assets string pathForOverrideController = animations.assetDirectory + "/" + animations.name + ".overrideController"; overrideController = AssetDatabase.LoadAssetAtPath <AnimatorOverrideController>(pathForOverrideController); RuntimeAnimatorController baseController = _baseController; if (useExistingBaseController && overrideController.runtimeAnimatorController != null) { baseController = overrideController.runtimeAnimatorController; } if (baseController != null) { if (overrideController == null) { overrideController = new AnimatorOverrideController(); AssetDatabase.CreateAsset(overrideController, pathForOverrideController); } overrideController.runtimeAnimatorController = baseController; // set override clips var clipPairs = overrideController.clips; for (int i = 0; i < clipPairs.Length; i++) { string animationName = clipPairs[i].originalClip.name; AnimationClip clip = animations.GetClipOrSimilar(animationName); clipPairs[i].overrideClip = clip; } overrideController.clips = clipPairs; EditorUtility.SetDirty(overrideController); } else { Debug.LogWarning("No Animator Controller found as a base for the Override Controller"); } }