DY_M的Unity学习日记 1 ——AnimationClip的读取与代码生成

DY_M的Unity学习日记 1 ——AnimationClip的读取与代码生成

https://www.jianshu.com/p/80b2bc98ac5d

作为一个“不务正业”的东川路某男子职业技术学校的大学汪(如果有幸遇到隔壁东川路某幼师学校的大佬,求带华师小龙虾!!!),平时就喜欢用Unity用Editor,Editor Window什么的工具写一些奇奇怪怪的东西,因为想要学习研究的东西网上有效的信息都不多,只能一点点看着代码提示看着各种方法的名字配着官网的API慢慢摸索,过程艰难不说还效率低下。在海澜大佬的建议下,开始在简书将学习过程中学到的东西整理一下,如果在写的过程中能帮助到别人的话,那真的是非常开心的一件事!因为是学习的整理,如果对某个东西的理解有问题的话,请大家多多指正,非常感谢!

AnimationClip是什么

它是 储存基于关键帧的动画,但是AnimationClip和KeyFrame(关键帧)并不是直接的父子关系。AnimationClip通过EditorCurveBind或者ObjectReferenceCurveBindings(下两个统称Bind)连接AnimationCurve,一个Bind对应着一个AnimationCurve,而一个AnimationCurve对应着一个KeyFrame[ ]。其中EditorCurveBind用来绑定浮点数类型字段,Position.x Rotation.x等,而ObjectReferenceCurveBinding用来绑定其他非浮点数类型的字段,如SpriteRender里面的字段。两者差别不大,结构和使用方法基本上一样,后面只讲有关EditorCurveBind的内容。

1.png

 

怎么获取AnimationClip里面的信息

我们通过Unity界面大概知道了AnimationClip大概包含了什么内容,现在该到我们自己领域——代码域由顶到底去探究一下他到底是怎样的一个结构。

(1)创建一个脚本作为测试,并如图创建物体,给他的Animator一个AnimatorControl,并给它添加一个Animation,如下图随意K几帧。

 

image.png

 

image.png

 

(2) 认识EditorCurveBinding

image.png

 

通过代码提示,我们可以简单发现EditorCurveBinding主要含有两个字段:path和propertyName。键入如下代码:

PS:使用OnDrawGizmos主要是因为它可以实时debug,gizmosCount是为了避免Debug过快的问题

public class AnimationLoad : MonoBehaviour
{
    public AnimationClip anim;

    public int gizmosCount = 0;


    public void OnDrawGizmos()
    {
        if (anim == null)
        {
            return;
        }
        if (gizmosCount != 20)
        {
            gizmosCount++;
            return;
        }
        else
        {
            gizmosCount = 0;

            //Coding
            
            //EditorCurveBinding[] binds = AnimationUtility.GetObjectReferenceCurveBindings(anim)
            EditorCurveBinding[] binds = AnimationUtility.GetCurveBindings(anim);
            foreach (var bind in binds)
            {
                Debug.Log("Path: "+bind.path);
                Debug.Log("Property Name: "+bind.propertyName);
            }

            //Coding
        }
    }
}



作者:DY_M
链接:https://www.jianshu.com/p/80b2bc98ac5d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。