Пример #1
0
 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;
     }
 }
Пример #2
0
 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);
 }
Пример #3
0
        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();
        }
Пример #4
0
        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();
        }