其他分享
首页 > 其他分享> > Unity之AnimationCurve组件曲线实现研究及功能实现

Unity之AnimationCurve组件曲线实现研究及功能实现

作者:互联网

        Unity中的组件AnimationCurve定义曲线实在太方便了。以至于做相关开发的时候,也想给策划等其他人员来用。因此想把此功能开放到程序功能里面。经过一段时间的分析和研究,完成了如下效果。

  经过分析,实现该组件的功能需要如下几个关键点:

        1:通过对关键帧的坐标和其切线,得出相关的曲线函数。

        2:UGUI根据函数画线及相关UI功能的实现。

1:通过分析AnimationCurve的特性,发现该曲线由关键帧和每帧的左右切线插值来形成。于是就翻了下大学数学课本,能有这种特性的插值算法,当属Hermite算法了。于是就针对该算法实现了对C#的相关编码。其核心插值算法如下:

        public float GetValue(float v)
        {
            if(data == null || data.Count == 0)
            {
                return 0.5f;
            }
            if (v < data[0].x0 || v > data[data.Count - 1].x1)
            {
                return 0.5f;
            }
            SegmentData seg = data.Find(item => item.IsContain(v));
            return seg.y0 * Fh0(v, seg) + seg.d0 * FH0(v, seg) + seg.y1 * Fh1(v, seg) + seg.d1 * FH1(v, seg);
        }

2:接下来就是针对该算法进行画线了,在此我找了一款插件SpringGUI,他是针对UGUI做出了高度的扩展,我在其中FunctionalGraph做出了改动,把原来的中心坐标系,改成了0~1坐标区域。并改了GUI实现部分代码,实现了坐标轴数值显示。后面模仿AnimationCurve组件实现对关键帧的操作。效果如下图

通过由以上两步关键步骤的实现。再添加拖动关键帧,对关键帧的左右曲线分别处理,保存添加曲线等功能。完整的实现AnimationCurve组件。详细源码请于如下链接下载查看:

AnimationCurve组件实现工程链接

最后希望此篇博客对想了解AnimationCurve组件原理的同学们有所帮助。

 

LazerYvTian 发布了26 篇原创文章 · 获赞 7 · 访问量 1万+ 私信 关注

标签:关键帧,AnimationCurve,实现,seg,Unity,组件,data
来源: https://blog.csdn.net/liulei199079/article/details/104160279