当前位置: 首页 > news >正文

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

相关文章:

  • C#反射执行方法返回List,怎么获取List
  • C#通过反射获取相应的字段和值
  • pbrt-perspective-we(Weight emit)
  • pbrt gamma
  • Unity Android 宏定义是 UNITY_ANDROID 不是 UNITY_Android
  • Unity 与 Android 互调用
  • Unity Windows 编辑器下,模拟 Android
  • Unity 转换平台
  • 生成特定分贝的音频波形
  • 声音分贝的概念,dBSPL.dBm,dBu,dBV,dBFS
  • 获取PCM音频数据的声音分贝值
  • 如何从wav数据判断音量的高低?
  • Audio 音频采样和音量
  • AudioClip 参数解析
  • Unity 导入 KeyFrame 动画后,看不到动画
  • 《深入 React 技术栈》
  • 「面试题」如何实现一个圣杯布局?
  • 【翻译】babel对TC39装饰器草案的实现
  • 5、React组件事件详解
  • C语言笔记(第一章:C语言编程)
  • echarts的各种常用效果展示
  • export和import的用法总结
  • JS题目及答案整理
  • PHP 的 SAPI 是个什么东西
  • php的插入排序,通过双层for循环
  • sublime配置文件
  • tweak 支持第三方库
  • vue:响应原理
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 程序员最讨厌的9句话,你可有补充?
  • 浮动相关
  • 使用 @font-face
  • FaaS 的简单实践
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ###C语言程序设计-----C语言学习(3)#
  • #if和#ifdef区别
  • #每日一题合集#牛客JZ23-JZ33
  • $GOPATH/go.mod exists but should not goland
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (转)setTimeout 和 setInterval 的区别
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (轉)JSON.stringify 语法实例讲解
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET处理HTTP请求
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .php文件都打不开,打不开php文件怎么办
  • @SuppressWarnings注解
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [AIGC] Spring Interceptor 拦截器详解
  • [AX]AX2012 SSRS报表Drill through action
  • [bzoj 3534][Sdoi2014] 重建
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [C++]Leetcode17电话号码的字母组合