public void Start() { m_Animator = GetComponent <Animator>(); m_ActorBaseComponent = GetComponent <ActorBaseComponent>(); m_AnimationLookup = new Dictionary <int, Nima.Animation.ActorAnimation>(); if (m_ActorBaseComponent != null) { m_Actor = m_ActorBaseComponent.ActorInstance; } }
public bool Load(TextAsset asset) { m_TestMesh = new Mesh(); m_RawAsset = asset; using (MemoryStream ms = new MemoryStream(asset.bytes)) { m_Actor = new Actor(); m_Actor.LoadFrom(ms); if (m_Actor != null) { InitializeActor(); return(true); } } return(false); }
static void MakeMecanimController() { foreach (object obj in Selection.objects) { ActorAsset actorAsset = obj as ActorAsset; string actorPath = AssetDatabase.GetAssetPath(actorAsset); actorPath = actorPath.Replace(".asset", ""); Debug.Log("Actor Path " + actorPath); int idx = 0; string filename = null; while (true) { filename = idx == 0 ? actorPath + ".controller" : actorPath + "_" + idx + ".controller"; if (!File.Exists(filename)) { break; } idx++; } UnityEditor.Animations.AnimatorController animatorController = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath(filename) as UnityEditor.Animations.AnimatorController; if (!actorAsset.Loaded) { actorAsset.Load(); } Nima.Actor actor = actorAsset.Actor; foreach (Nima.Animation.ActorAnimation actorAnimation in actor.Animations) { AnimationClip animationClip = new AnimationClip(); animationClip.name = actorAnimation.Name; animationClip.wrapMode = actorAnimation.IsLooping ? WrapMode.Loop : WrapMode.ClampForever; AnimationClipSettings clipSettings = AnimationUtility.GetAnimationClipSettings(animationClip); clipSettings.stopTime = actorAnimation.Duration; clipSettings.loopTime = actorAnimation.IsLooping; AnimationUtility.SetAnimationClipSettings(animationClip, clipSettings); AssetDatabase.AddObjectToAsset(animationClip, animatorController); EditorUtility.SetDirty(animationClip); } } AssetDatabase.Refresh(); AssetDatabase.SaveAssets(); }
public static void ReloadMecanimController(ActorBaseComponent actorComponent, UnityEditor.Animations.AnimatorController animatorController) { Nima.Actor actor = actorComponent.Asset.Actor; string path = AssetDatabase.GetAssetPath(animatorController); UnityEngine.Object[] assets = AssetDatabase.LoadAllAssetsAtPath(path); List <Nima.Animation.ActorAnimation> alreadyUsedAnimations = new List <Nima.Animation.ActorAnimation>(); foreach (UnityEngine.Object asset in assets) { AnimationClip clip = asset as AnimationClip; if (clip == null) { continue; } bool exists = false; foreach (Nima.Animation.ActorAnimation actorAnimation in actor.Animations) { if (actorAnimation.Name == clip.name) { exists = true; alreadyUsedAnimations.Add(actorAnimation); clip.SetCurve("", typeof(GameObject), "null", AnimationCurve.Linear(0, 0, actorAnimation.Duration, 0)); AnimationClipSettings clipSettings = AnimationUtility.GetAnimationClipSettings(clip); clipSettings.stopTime = actorAnimation.Duration; clipSettings.loopTime = actorAnimation.IsLooping; AnimationUtility.SetAnimationClipSettings(clip, clipSettings); EditorUtility.SetDirty(clip); break; } } if (!exists) { AnimationClip.DestroyImmediate(clip, true); } } foreach (Nima.Animation.ActorAnimation actorAnimation in actor.Animations) { int idx = alreadyUsedAnimations.IndexOf(actorAnimation); if (idx == -1) { AnimationClip animationClip = new AnimationClip(); animationClip.name = actorAnimation.Name; animationClip.SetCurve("", typeof(GameObject), "null", AnimationCurve.Linear(0, 0, actorAnimation.Duration, 0)); AnimationClipSettings clipSettings = AnimationUtility.GetAnimationClipSettings(animationClip); clipSettings.stopTime = actorAnimation.Duration; clipSettings.loopTime = actorAnimation.IsLooping; AnimationUtility.SetAnimationClipSettings(animationClip, clipSettings); AssetDatabase.AddObjectToAsset(animationClip, animatorController); EditorUtility.SetDirty(animationClip); } } EditorUtility.SetDirty(animatorController); AssetDatabase.Refresh(); AssetDatabase.SaveAssets(); }