这一节说一下如何使用Unity的Animation编辑器控制GameObject的一些动画效果。并简述如何为Animation添加Event事件的方法。
首先,先创建一个Gameobject例子,这里我们还是Create 一个 Cube好了。
创建完成后我们将其拉到摄像机镜头的左侧一会方便添加位移动画。接下来在Project视窗中Create一个Animation,命名为Move,我们来看一下Animation的几个属性:
Compressed(压缩)、Sample Rate(采样频率)这里默认就好,说一下 Wrap Mode(换行模式),这里有好几种模式分别为 Default(默认)、Once(一次)、Loop(循环)、PingPong(乒乓)、ClampForever(。。。这个有点难翻译)这五种模式。
Default、Once、Loop 都比较好理解,下面说一下PingPong其实也是类似乒乓球一样,是个随机的表示,比如Mathf.PingPong,确实有这样的函数。
我们来看一下官方的解释 WrapMode.PingPong: Ping Pong’s back and forth between beginning and end. 说点有点不明不白,大意就是当当前动画片段播放完最后一帧之后,将随机的在第一帧与最后一帧之间来回播放,可以想象这样的效果估计会很凌乱。。。
另外看一下WrapMode.ClampForever: Plays back the animation. When it reaches the end, it will keep sampling the last frame. 我们看一下最后一句“keep sampling the last frame”,保持最后一帧的采样状态,什么是采样,这里就不另外说了,否则引申出来的内容多到说不完,现阶段我们理解为一直保持在最后一帧的状态就可以了。
以上两种模式对初学者来说几乎用不到,通常我们使用的还是Once和Loop模式多一些。至于Bounds是这个Animation的包围盒,现在暂时用不上就不解释了。
使用Animation编辑器:
介绍完Animation的几个界面属性之后,我们将Move拖放到Cube上,既绑定到Cube上,然后点击菜单栏上[Window]->[Animation]或者快捷键Ctrl+6 打开Animation编辑器窗体,如下图
点击左上角红色按钮,开始录制动作,Transform栏目下的内容我就不解释了,都是Gameobject的基本属性,选中其中一个属性,点击右侧小箭头,选择AddKey添加关键帧,这里不科普了类似Flash的动画编辑器,创建出一套唯一动画之后,我们的Animation就制作完成了:
点击播放就可以看到预览效果。
为Animation添加Event事件:
这里的Event其实就是一个触发函数,如何添加呢,我们需要编写一个脚步,在脚步中创建一个函数体,并将脚本绑定在Animation所在的GameObject上,点击Animation编辑器上的Add Event 按钮,添加事件帧。此时很多朋友肯能忘记给Event添加一个函数,运行时就会报错:AnimationEvent has no function name specified! ,解决方法是要么去掉这个事件帧,要么为其添加一个function。
有时候有些朋友明明为Event添加了Function但还是报AnimationEvent has no function name specified!的错误,这个时候大家细心检查下是不是在同一个位置上添加了多个Event,通常都是这个原因引起的。
使用脚本控制Animation:
使用脚本控制Animation要说的东西相当庞大,这里仅仅做一个小小的引导,更多的内容请大家参考API自己去探索。我们可以在刚才的Stop()函数里添加控制脚本,也可以另行获取这个GameObject.Animation来进行,原理都是一样的,脚本如下:
1 2 3 4 5 6 7 8 | void stop () { gameObject.animation.Stop();//停止回到第一帧 gameObject.animation["你的动作名"].speed = 0;//暂停 } |
查了下API貌似Animation没有Pause暂停功能,所以只能设置AnimationState.speed=0 来进行暂停,意味播放速度为0,如果要再次播放,把值改成1即可。
同时通过speed的值的修改我们还可以实现动画快放和慢放的效果,而如果将speed设置为负值,将实现回放的效果。是不是觉得相当强大。事实上我们的探索才刚刚开始。
总结:
Animation的内容如果要全部说完本篇估计再延长10页也无法阐述完毕,大家如果感兴趣可以参考API进行各种尝试。另外一些精确的Animation是需要在maya或者3Dmax里创建好然后导入的,比如一个游戏人物的攻击,行走等等。
本篇暂且到此,欢迎大家交流讨论。
BeiTown
2012.12.27
Tags: Animation, AnimationEvent has no function name specified!, BeiTown, U3D, Unity
mask
mask
嗯
(色)