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); } }
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); }
public static void Build(Skill.Editor.Animation.SkinMeshData mesh, string localDir, string name) { ValidateGenerator(); _Generator.Reset(); _Generator.Generate(mesh); CreateFile(_Generator, localDir, name); }
/// <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; }
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); } }
private void Build() { SkinMeshData skinData = _Data.Load(); if (skinData != null) { Optimize(skinData); _Data.Save(skinData); Builder.Build(skinData, _Data.BuildPath, _Data.name); } }
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; }
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); }
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); } } }
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); } } } }
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"); } } } }