Exemple #1
0
        private void Rebuild()
        {
            Clear();
            if (_Asset != null)
            {
                _SkinMeshData = _Asset.Load();
            }

            if (_SkinMeshData.Animations != null)
            {
                for (int i = 0; i < _SkinMeshData.Animations.Length; i++)
                {
                    AnimationClipData     anim = _SkinMeshData.Animations[i];
                    AnimationClipListItem item = new AnimationClipListItem(anim)
                    {
                        Text = anim.Name, UserData = anim
                    };
                    _AnimationList.Items.Add(item);
                }
            }

            if (_SkinMeshData.Root != null)
            {
                CreateTree(_SkinMeshData.Root, _TransformTree);
            }
        }
Exemple #2
0
        public SkinMeshData Load()
        {
            SkinMeshData skin = null;

            if (!string.IsNullOrEmpty(XmlData))
            {
                try
                {
                    Skill.Framework.IO.XmlDocument document = new Framework.IO.XmlDocument();
                    document.LoadXml(XmlData);
                    skin = new SkinMeshData();
                    skin.Load(document.FirstChild);
                }
                catch (System.Exception ex)
                {
                    skin = null;
                    Debug.LogException(ex, this);
                }
            }
            else
            {
                skin = new SkinMeshData();
                Save(skin);
            }
            skin.Name = this.name;
            return(skin);
        }
Exemple #3
0
 public static void Build(Skill.Editor.Animation.SkinMeshData mesh, string localDir, string name)
 {
     ValidateGenerator();
     _Generator.Reset();
     _Generator.Generate(mesh);
     CreateFile(_Generator, localDir, name);
 }
Exemple #4
0
        /// <summary>
        /// Generate code for SkinMesh
        /// </summary>
        /// <param name="skinMesh">SkinMesh</param>
        public void Generate(Skill.Editor.Animation.SkinMeshData skinMesh)
        {
            SkinMeshClass skClass = new SkinMeshClass(skinMesh);

            _Document.AddUsingSkillAnimation();
            _Document.Add(skClass);
            HasPartial = false;
        }
Exemple #5
0
 private void UpdateSkeleton()
 {
     if (_RootField.Object != null)
     {
         Skill.Editor.Animation.BoneData root = CreateBone(_RootField.Object, string.Empty);
         SkinMeshData skin = _Data.Load();
         skin.Root = root;
         _Data.Save(skin);
     }
 }
Exemple #6
0
        private void Build()
        {
            SkinMeshData skinData = _Data.Load();

            if (skinData != null)
            {
                Optimize(skinData);
                _Data.Save(skinData);
                Builder.Build(skinData, _Data.BuildPath, _Data.name);
            }
        }
Exemple #7
0
 public void Save(SkinMeshData skin)
 {
     if (!this)
     {
         return;        // if deleted
     }
     if (skin == null)
     {
         return;
     }
     skin.Name = this.name;
     Skill.Framework.IO.XmlDocument document = new Framework.IO.XmlDocument();
     document.AppendChild(skin.ToXmlElement());
     XmlData = document.OuterXml;
     UnityEditor.EditorUtility.SetDirty(this);
 }
 public void Reload(SkinMeshData data)
 {
     _AnimationList.Items.Clear();
     if (data.Animations != null)
     {
         for (int i = 0; i < data.Animations.Length; i++)
         {
             Label item = new Label()
             {
                 Text = data.Animations[i].Name
             };
             _AnimationList.Items.Add(item);
         }
     }
     _AnimationList.SelectedIndex = -1;
 }
Exemple #9
0
        public static bool Compile(AnimationTreeData data, SkinMeshData skin)
        {
            _ErrorFound = false;
            _Tree       = data;
            _Skin       = skin;

            if (skin == null)
            {
                return(false);
            }

            CheckProfileErrors();
            CheckParameterErrors();
            CheckAnimNodeErrors();
            CheckUnusedAnimNodes();

            _Tree = null;
            _Skin = null;
            return(!_ErrorFound);
        }
Exemple #10
0
        private void Optimize(SkinMeshData skinData)
        {
            if (_MixList == null)
            {
                _MixList = new List <MixingTransformData>();
            }
            if (_MixingTransforms == null)
            {
                _MixingTransforms = new Dictionary <string, MixingTransformData>();
            }

            if (skinData.Animations != null && skinData.Root != null)
            {
                _Root = skinData.Root;
                foreach (var anim in skinData.Animations)
                {
                    Optimize(anim);
                }
            }
        }
Exemple #11
0
        private void Build()
        {
            if (_Data.SkinMesh == null)
            {
                Debug.LogError("SkinMesh of AnimationTree is unasigned.");
                return;
            }

            SkinMeshData skin = _Data.SkinMesh.Load();

            if (skin != null)
            {
                AnimationTreeData data = _Data.Load();
                if (data != null)
                {
                    bool compiled = AnimationTreeCompiler.Compile(data, skin);
                    if (compiled)
                    {
                        Builder.Build(data, _Data.BuildPath, _Data.name);
                    }
                }
            }
        }
Exemple #12
0
        private void UpdateAnimations()
        {
            if (_AnimationField.Object == null)
            {
                Debug.LogError("Set valid Animation");
            }
            else
            {
                if (_AnimationField.Object != null)
                {
                    SkinMeshData skin = _Data.Load();
                    if (skin.Root == null)
                    {
                        Debug.LogError("First build skeleton");
                        return;
                    }

                    List <AnimationClipData> anims = new List <AnimationClipData>();
                    if (skin.Animations != null && skin.Animations.Length > 0)
                    {
                        foreach (var a in skin.Animations)
                        {
                            if (_AnimationField.Object[a.Name] != null)
                            {
                                anims.Add(a);
                            }
                        }
                    }

                    foreach (AnimationState state in _AnimationField.Object)
                    {
                        if (state == null || state.clip == null)
                        {
                            continue;
                        }
                        Skill.Editor.Animation.AnimationClipData clip = Find(state.name, anims);
                        if (clip == null)
                        {
                            clip = new Animation.AnimationClipData()
                            {
                                Name     = state.name,
                                WrapMode = (UnityEngine.WrapMode)state.wrapMode,
                            };
                            anims.Add(clip);
                        }
                        clip.Length = state.length;
                        AnimationState rootState = state;
                        if (_RootMotionAnimationField.Object != null)
                        {
                            var s = _RootMotionAnimationField.Object[state.name];
                            if (s != null)
                            {
                                rootState = s;
                            }
                        }

                        EditorCurveBinding binding = new EditorCurveBinding()
                        {
                            path = skin.Root.Name, type = typeof(Transform)
                        };
                        binding.propertyName = "m_LocalPosition.x";
                        var xCurve = AnimationUtility.GetEditorCurve(rootState.clip, binding);
                        binding.propertyName = "m_LocalPosition.y";
                        var yCurve = AnimationUtility.GetEditorCurve(rootState.clip, binding);
                        binding.propertyName = "m_LocalPosition.z";
                        var zCurve = AnimationUtility.GetEditorCurve(rootState.clip, binding);

                        AddKeys(xCurve, clip.RootMotion.XKeys);
                        AddKeys(yCurve, clip.RootMotion.YKeys);
                        AddKeys(zCurve, clip.RootMotion.ZKeys);

                        binding.propertyName = "m_LocalRotation.x";
                        var rxCurve = AnimationUtility.GetEditorCurve(rootState.clip, binding);
                        binding.propertyName = "m_LocalRotation.y";
                        var ryCurve = AnimationUtility.GetEditorCurve(rootState.clip, binding);
                        binding.propertyName = "m_LocalRotation.z";
                        var rzCurve = AnimationUtility.GetEditorCurve(rootState.clip, binding);

                        AddKeys(rxCurve, clip.RootMotion.RXKeys);
                        AddKeys(ryCurve, clip.RootMotion.RYKeys);
                        AddKeys(rzCurve, clip.RootMotion.RZKeys);
                    }
                    if (anims.Count > 0)
                    {
                        skin.Animations = anims.ToArray();
                        _Data.Save(skin);
                    }
                    else
                    {
                        Debug.LogWarning("can not find any AnimationClip");
                    }
                }
            }
        }