unity3d游戏开发之角色的动画脚本的编写(二).doc
上传人:qw****27 上传时间:2024-09-11 格式:DOC 页数:6 大小:183KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

unity3d游戏开发之角色的动画脚本的编写(二).doc

unity3d游戏开发之角色的动画脚本的编写(二).doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

在上一篇,我们介绍了有关Animation这个类中的部分方法,我后来想了想,这么介绍也不是个办法(其实有些方法我自己也没用过),该介绍点实际的东西了,毕竟我们是要做东西出来的。那好,我们就开始吧。该文章出自HYPERLINK"http://www.gopedu.com/"\t"http://unity.gopedu.com/_blank"【狗刨学习网】首先我们要介绍的主题是:AnimationBlending,即动画融合。我们来看官方文档上的描述:用我自己的理解就是:在现今的游戏中,动画融合是一个必不可少的特性用以让你的的角色能够产生平滑的动画。动画设计师首先为角色创建了一些个动画片段,例如一个行走循环,跑步循环,还有站立或射击的。在你运行游戏期间,你需要从站立的动画状态转换到行走的动画状态并且看上去要足够平滑,不能突然跳转。此时我们就需要有一种处理方式来完成我们所想要实现的效果。这就是“动画融合”的用处。在Unity中,一个角色可以有多种不同的动画片段,Unity可以将这些动画片段融合起来并以一种组件的形式(即Animation)进行管理,并根据具体情形来比如脚本来生成最终的动画。看来我们其实一直在运用“动画的融合”。[size=12.8000001907349px]那么我们来看一个例子吧,我就选官方的CharacterAnimation里的goober为例,直接给出代码:usingUnityEngine;usingSystem.Collections;publicclassSuperMarioAnimation:MonoBehaviour{publicfloatlandBounceTime=0.6f;//该动画在0播放到60%时之后立即结束,应该是后来根据主角在空中滞留的时间而调整的。privateAnimationStatelastJump;//存储“jump”的动画状态//UsethisforinitializationvoidStart(){animation.wrapMode=WrapMode.Loop;//首先设置所有的动画片段播放时的播放模式为循环播放模式,之后我们也可以修改单个动画片段播放时的循环模式,比如此函数最后一行。AnimationStatejump=animation["jump"];//暂存“jump”的动画状态,记住,是暂存。仅仅只是用于下面三行代码中的动画设置。jump.layer=1;//设置动画状态jump的动画层值为1,相对于默认层级值要高,为的是有更多的优先级取得动画权重。jump.enabled=false;//暂停该动画的播放,这个我会在后面进行相应的讲解,因为它有其独特的应用情景。jump.wrapMode=WrapMode.Clamp;//设置动画状态jump的循环模式为Once(单次,上一篇已经证明了)循环。}voidUpdate(){SuperMarioControllermarioController=gameObject.GetComponent();//取得该角色的SuperMarioController脚本组件。floatcurrentSpeed=marioController.GetSpeed();//每帧获取该角色的速度并存储在临时变量currentSpeed里。if(currentSpeed>0.1){//以速度判断该播放何种动画,淡入淡出效果的核心就在这里animation.CrossFade("walk");//如果当前正在播放某个动画片段,那么淡出它,淡入名为“Walk”的动画。}else{animation.CrossFade("idle");}if(marioController.IsJumping()){//如果此时goober(我们的主角)还在跳跃if(lastJump.time>landBounceTime){//如果goober的跳跃动画播放了60%之后lastJump.speed=0.0f;//让这个动画状态从头开始播放。}}}publicvoidDidJump(){//SendMessage方法调用的,在goober跃起时执行//lastJump=animation.CrossFadeQueued("Move",0.3f,QueueMode.PlayNow);lastJump=animation.CrossFadeQueued("jump",0.3f,QueueMode.PlayNow);}publicvoidDidLand()//SendMessage方法调用的,在goober着地时执行{lastJump.speed=1;//