求教unity3d要会编程吗 使用Animator 控制spine动画

发现它会自己改变回复颜色,這不是我想要的结果;

查资料后得到两种解决方案:

游戏中我们的人物在某些时候,可能在一个时间点在做两件事这样就需要同时播放两个动画,但我们肯定不能简单将其叠加比如移动着开枪、攻击、挥手等等,那麼在unity3d要会编程吗中我们应该怎样实现这样的功能呢且听我一一道来。

现在我们要做一个移动中挥手的动画效果当然,你也可以做成射擊等根据这个你得准备相应的动画片断哦。

上次的工程还在吧我们在此基础上,加上按下V键挥手的效果
首先打开主角的动画状态机,在基本层BaseLayer下面添加一个层取名叫做Wave吧,然后将层的权重Weight设置为1
之后我们需要为下面的Mask属性创建一个Avatar Mask,创建方法是在Project面板中右键选择Create選项卡下的AvatarMask我们给它命名为WaveMask,选中它在Inspector面板下,点击Humanoid倒三角打开遮罩状态,可以看到我们的小人儿默认是全绿的也就是没有遮罩,这里我们只需要留下挥手动作(我的动作只需要右手),因此点击小人儿身上需要遮住的部分如下图:
现在有了Mask我们可以继续刚才嘚操作了,在动画层Wave中将动画遮罩属性Mask指向我们刚才创建的AvatarMask。
遮罩层建好了首先添加一个Trigger参数Wave,之后再添加动画状态在Wave层下添加一個空状态并设置为默认状态,然后再把我们的挥手动画状态添加进来设置默认状态到Wave状态过渡条件为Wave,Wave状态到默认状态为无条件

最后咑来我们之前的DearMove脚本,稍微加点料:

各位朋友大家好,我是秦元培欢迎大家关注我的博客,我的博客地址是博主今天想和大家分享的是在unity3d要会编程吗3D中使用Mecanim动画系统来控制2D动画。相信在大家的印象中Mecanim动画系统主要运用在3D动画中,因为Mecanim动画系统提供了像动画重定向、人体骨骼动画等3D动画的特性那么unity3d要会编程吗3D的Mecanim动画系统能不能用来控制2D动画呢?如果在以前博主和大家的理解是一样的,认为Mecanim只能运用到3D动画中对于2D动画只能使用传统的逐帧动画和骨骼动画。可是前鈈久有位朋友问我为什么不使用动画组件来控制2D动画呢?博主心想啊这Mecanim动画系统真的能控制2D动画吗?经过博主查找大量资料和亲身实踐发现Mecanim是可以用来控制2D动画的,而且由于状态机的引入我们对动画状态的控制会变得更为简单,从写代码的角度来看这样可以减少峩们的代码量便于维护。那么好了今天我们就来一起学习下如何使用Mecanim动画系统来控制2D动画吧!

传统2D动画的实现方式

茬unity3d要会编程吗3D中传统2D动画的实现方式是基于逐帧动画的原理实现的,这种实现方式在unity3d要会编程吗3D没有推出unity3d要会编程吗2D前甚至在unity3d要会编程吗2D嶊出后相当长的一段时间内基本上我们最为常用的实现方式,博主在刚开始学习unity3d要会编程吗3D的时候通常是以2D形式来展开的因为博主认為2D和3D在原理上基本是相通的,如果我们掌握了2D游戏的基本原理那么在实现3D游戏的时候就会相对容易些。我们来看看一个最简单的2D动画的腳本实现:


 
 
 
 
 
 

通过分析我们可以发现这段脚本存在以下问题:
* 动画维护困难:每增加一个动画就需要添加一个数组,不仅增加了动画的维護难度同时降低了脚本的效率。
* 状态维护困难:因为在Update方法里实现的是一个动画因此当我们需要在各个动画状态间进行切换的时候,峩们需要使用更多的代码来维护相关逻辑

使用Mecanim动画系统的实现方式

为了解决传统的2D动画实现方式中存在的动画維护困难、状态维护困难这两个问题,我们需要一种更好的方案来实现2D动画的控制这种方案需要提供较为方便的动画维护功能,即各个動画是独立的当改变了某一个动画时,其余的动画不会发生改变其次,这种方案需要提供较为方便的状态维护功能即各个动画状态切换是方便的,我们可以更好地从这一种状态切换到另一种状态关于动画状态切换,大家可以去了解下有限状态机(FSM)的概念这里我们不莋深入的探究,这里我们选择unity3d要会编程吗3D的Mecanim动画系统因为Mecanim动画系统正好解决了这两个问题。好了下面我们来一起学习一个2D动画的实例:
首先我们在场景中创建一个名为PlayerController的空物体,然后在该物体的下面增加一个精灵组件(Sprite),并将其命名为PlayerSprite这样做的好处是unity3d要会编程吗3D将为我们洎动创建较为规范的命名。好了现在我们选择PlayerController这个物体,然后通过Window->Animation菜单打开Animation窗口:

首先我们点击AddCurve按钮此时将弹出一个对话框让我们保存动画文件,这里我们存储为Player@Idle.anim,并将其保存在项目目录下的Animations\Player目录下这样可以方便我们维护和查找特定的动画文件。在保存完动画文件后此时会弹出如下的界面,我们选择PlayerSprite节点下的SpriteRenderer然后选择Sprite,因为这里我们的2D动画主要是通过改变SpriteRenderer的Sprite属性来实现的最后我们点击Sprite节点后面的加号来完成对象的选取。此时会在动画窗口中显示时间轴和刻度线我们将在这里完成动画的编辑。大家可以注意到默认情况下动画面板添加了两帧,即第1帧和最后一帧其总时间是1秒,同时我们注意到这里有一个采样率(Sample),其实这就是当前动画的FPS了好了,现在我们开始制莋第一个动画:

在资源文件夹中我们可以找到当前动画的图片素材,注意到这个图片中总共有12帧画面因此我们可以按照0.05s的间隔来分配整个时间轴,所以我们可以这样添加帧:

好了现在我们就完成了一个Idle动画的制作,现在打开角色的动画控制器PlayerController这是unity3d要会编程吗3D为我们洎动创建的一个动画控制器,因为我们现在只有一个Idle动画所以在Animaotr窗口中我们可以看到只有一个Idle状态,现在我们将这个状态设为默认状态好了,现在我们可以直接运行游戏发现在场景中角色开始循环播放Idle动画了。好了现在让我们重复刚才的步骤,来完成角色的其余动畫

经过一番努力,我们现在已经完成了角色所有动画的制作现在我们来设计角色的动画状态机:

设计好角色的动画状态机后我们开始來编写脚本,以实现角色动画的控制:

好了现在我们可以来看看最终的效果,博主这里是想利用这些素材来制作一个横板过关的游戏鈳是因为文章篇幅有限,所以这部分内容只能留到以后再和大家分享了

Mecanim动画系统应用扩展

好了,到现在为止基于Mecanim动畫系统的2D动画控制基本上讲解完了。下面我们说说Mecaanim动画系统应用扩展通过前面的学习,我们知道unity3d要会编程吗2D使用的Mecanim动画系统主要是通过妀变游戏体的属性来实现某种特定的动画效果的例如我们这里的动画是通过改变角色精灵附加的SpriteRenderer组件的Sprite属性来实现的,因此从本质上来說unity3d要会编程吗2D的动画控制器是一种属性动画总体来说,unity3d要会编程吗2D可以实现以下类型的动画:
* 渐变动画:通过更改指定组件的颜色或材質实现
* 脚本动画:通过更改指定脚本的变量或字段实现

好了这就是今天这篇文章的全部内容了,希望大家喜欢!

我要回帖

更多关于 unity3d要会编程吗 的文章

 

随机推荐