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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。