Unity Mecanim动画的实现(七):动画曲线
来源:互联网 发布:马自达cx4 知乎 编辑:程序博客网 时间:2024/06/04 14:18
通过动画事件,我们可以在动画过程中调用某个函数实现某种特定功能,如果我们需要在动画过程中调用多个函数,则需要在动画过程多个时间点插入动画事件。如果我们需要在动画中一个连续时间段中调用一个函数,则动画事件无法实现。可以说动画事件是在动画事件线进行离散式的事件调用。**如果需要进行连续式的函数调用,则需要借助动画曲线,比如需要一段动画时间播放一段声音。** 动画曲线是动画剪辑(Animation Clip)的一个属性,这个属性由动画片段 (Animation Clip) 控制。带动画曲线 (Animation Curve) 的动画视图 (Animation View) 性的属性列表中有彩色曲线标记。 假如,需要在如下Run动画剪辑的中间某段中播放一个声音,则可以将这一段的曲线区别于其他时间段,比如这一段的曲线值均大于0,其他时间段均小于0.
然后我们通过Animator Controller中设定参数,将参数名设定与Animation Curve一个名字,则将Animation Curve传递给Animator Controller中的参数。注意为让Animator Controller中的参数获取Animation Curve中的值,需要将Run的Animation中的Loop Pose取消。
然后我们可以通过如下代码获取到Animator Controller参数值,通过对这个值进行处理即可调用相关函数。
Float f=_animator.GetFloat("Test");if(f>0){//当参数值大于0,如何处理。}else{//当参数值小于0,如何处理。}
此外,我们还可通过代码来控制Curves生成与编辑,以下转自转载自风宇冲Unity3D教程学院
第一部分:基本使用
第一步:创建物体
第二步:创建脚本
创建AnimationCurveTutor.cs的脚本并添加到物体上。代码如下。
using UnityEngine;using System.Collections;public class AnimationCurveTutor : MonoBehaviour {public AnimationCurve anim;}
第三步:绘制曲线
基本操作:
创建关键点:左键双击
删除关键点:
(1)鼠标移动至关键点上,右键->Delete Key。
(2)左键单击关键点,然后按键盘上的delete
设置曲线类型:鼠标移动至关键点上,右键->
Auto:根据关键点自动设置曲线。
Free Smooth:统一设置入切线和出切线
Flat:入切线和出切线为水平
Broken:分别设置入切线和出切线
也可以选Left Tangent(入切线)或者Right Tangent(出切线)或者Both Tangents(两切线)。
Free:自由曲线,与Broken效果基本一样。
Linear:线性曲线
Constant:之前一直是上个点的值,然后瞬间变为这个点的值。
其中Auto最简单,Broken调整空间最大。曲线效果以绿线为准。
编辑好一条曲线后,在曲线的左右两端会有一个下拉菜单,点击设置两端各自重复的方式。
第四步:使用曲线
在上面的脚本里,再添加几行代码,如下
using UnityEngine;using System.Collections;public class AnimationCurveTutor : MonoBehaviour {public AnimationCurve anim;public void Update(){transform.position = new Vector3(Time.time, anim.Evaluate(Time.time), 0);}}
运行后,物体会按曲线轨迹向右移动。
第二部分:脚本创建Animation Curve
Animation Curve可以理解为2部分。(1)键序列(2)左右循环模式(又作左右包裹模式)
一:键序列
创建键序列:Keyframe[] ks = new Keyframe[3];
曲线中加入键序列:AnimationCurve curve = new AnimationCurve(ks);
获取曲线中的键序列:curve[index] 或者 curve.keys[index]
添加单键:curve.Addkey(time,value)
删除单键:curve.RemoveKey(index)
二:左右循环
anim.preWrapMode = WrapMode.Loop;
anim.postWrapMode = WrapMode.Once;
三:键
Keyframe kf = new Keyframe(time,value);
kf.inTangent = 45;
kf.outTangent = 45;
用脚本动态实时创建AnimationCurve。创建如下脚本,拖到任意物体运行即可。
using UnityEngine;using System.Collections;public class CreateRuntime : MonoBehaviour { public AnimationCurve anim = new AnimationCurve(); void Start() { Keyframe[] ks = new Keyframe[3]; ks[0] = new Keyframe(0, 0); ks[0].inTangent = 0; ks[1] = new Keyframe(4, 0); ks[1].inTangent = 45; ks[2] = new Keyframe(8, 0); ks[2].inTangent = 90; anim = new AnimationCurve(ks); } void Update() { transform.position = new Vector3(Time.time, anim.Evaluate(Time.time), 0); }}
- Unity Mecanim动画的实现(七):动画曲线
- Unity Mecanim动画的实现(七):动画曲线
- Unity Mecanim动画的实现(二):Avatar的配置
- Unity Mecanim动画的实现(一):基本程序
- Unity Mecanim动画的实现(四):Animation Controller设置
- Unity Mecanim动画的实现(八):Animation视图
- Unity Mecanim动画的实现(八):Animation视图
- Unity Mecanim动画的实现(四):Animation Controller设置
- Unity Mecanim动画的实现(六):动画事件,实现动画过程中的事件处理
- Unity Mecanim动画的实现(六):动画事件,实现动画过程中的事件处理
- Unity Mecanim动画的实现(九):动画层、遮罩与Ik动画
- Unity Mecanim动画的实现(九):动画层、遮罩与Ik动画
- Mecanim 动画曲线
- Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
- Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
- Unity 动画系统-Mecanim
- Unity Mecanim动画的实现(五):实现武器的切换
- Unity Mecanim动画的实现(五):实现武器的切换
- 视图
- Volley 简单封装调用超简单
- Servlet编程基础
- Hbase集群搭建
- [eclipse] tips
- Unity Mecanim动画的实现(七):动画曲线
- Apple Tree
- Avro文件操作示例代码
- error: protocol fault (couldn't read status): Connection reset by peer
- Mac安装MySQL初始密码设置
- 深入理解mybatis原理(十一) Mybatis插件原理之实现细节
- 堆的创建,插入,删除
- java 为什么要用封装类
- qte开发环境配置