Unity 骨骼动画 2D Animation 入门(1)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 骨骼动画 2D Animation 入门(1)相关的知识,希望对你有一定的参考价值。
参考技术A 好记性不如烂笔头啊,还是记录一下!Unity从2018版本开始引入不少2D的新功能,在资源包里加入很多新功能, 一定要开启预览模式 可以看到新功能, 2D Animation , 2D IK , 2D Pixel Perfect , 2D SpriteShape 等等。
这篇博客主要介绍的是 2D Animation :
安装很简单点击 install 就可以安装了:
我装的是最新的 2.0.0-preview.3 :
随意导入一张图片:
Sprite Mode 选择 Single :
然后点击 Sprite Editor 进入 Sprite Editor :
选择 Skinning Editor 进入 Skinning Editor ,注意1.0.x叫 Bone Edito :
在编辑器右侧有一排按钮,依次为:
首先要使用 Create Bone , Reparent Bone 创建骨骼和设置骨骼层级,这里就不在说明具体的使用方法了,骨骼创建为应该为这个样子:
蒙皮我的理解就是怎么让骨骼和他控制的部件绑定在一起,这样骨骼移动、旋转的时候,部件才能跟着骨骼运动, Unity 2D Animation这个工具蒙皮还是很好用的,在 Auto Geometry 这个工具里,调整参数,工具就会根据你调整的参数来进行自动蒙皮:
如图所示,调整红框里的参数,然后点击 Generate For Selected 就可以
如果蒙皮的区域大小识别的和自己想的不一样可以使用 Edit Geometry 、 Create Edge 或者 Create Vertex
如果部分的区域蒙皮不是很好可以使用 Weight Slider 或者 Weight Brush 来进行调整,具体可以看下一节。
蒙皮表示的是骨骼 影响区域 ,权重表示的是骨骼对区域的 影响程度 ,在 Weight Slider 权重编辑工具中,点击一个顶点,可以看到这个顶点受到哪些骨骼的影响,举个例子:
比如上图这个区域,身体这个部件我加了两根骨骼,我们选中一个点,可以看到 body 这个紫色的骨骼对这个点的影响是 0.5 , waist 这个红色的骨骼对这个点的影响是 0.5 ,什么意思呢?
再来个直观的图方便大家理解,可以在 Preview Pose 预览模式中旋转这个部件看看效果:
这样赋予每个顶点不同的权重,就可以对身体产生不同程度的形变。
组装角色就比较简单了,主要先检查下骨骼的层级:
如果层级没问题就可以保存下,点击右上角的 Apply 按钮。
然后我们就可以把这个 Sprite 拖到Unity的场景里了,然后会看到部件仍然是分布在各个地方的,接下来我们要做的是:
来一张自己完成组装的图:
以上说法只是我的个人理解,如有不对,欢迎留言指正。
Unity中的Animation组件(一)
参考技术A 我们可以使用Unity自带的资源来学习老版本的动画系统,新建Unity3D项目,选择菜单“Assets”->“Import Package”->“Character Controller”,导入的资源里的那个小人就是使用Legacy动画系统的模型,我们的学习可以基于他来进行。在骨骼这一项中,我们发现动画类型的设置就是Legacy,说明这个模型使用的动画类型为老版本的动画系统。
我们再看看动画页:
动画页中,我们可以对动画剪辑进行编辑。
我们直接将FBX文件拖入场景,Unity会自动帮我们添加Transform和Animation两个组件(注意Mecanim动画系统使用的是Animator组件,Legacy动画系统使用的是Animation组件)。
Animation组件的设置还是比较简单的:
Animation:当前播放的动画。
Animations:所有可以播放的动画。
Play Automatically:是否自动播放。
Animate Physics:动画是否和物理世界进行交互。
Culling Type:动画在不可见时是否还继续播放,优化选项默认即可。
点击播放按钮就可以看见动画正常播放了。
animation组件用于播放动画;
如果想播放一个简单的动画,可以使用Animation.Play;
如果想在动画之间交叉淡入,可以使用Animation.CrossFade;
如果想改变动画模式(循环,一次,乒乓),可以改变动画导入设置里面的动画帧的WrapMode,或者在运行时改变AnimationState.wrapMode的值;
AnimationState可以用于改变动画的层,修改播放速度,并且直接控制混合与合成。
下面我们来看看如何使用脚本控制动画的播放,我们将下面的脚本绑定到人物身上即可。
using UnityEngine;
using System.Collections;
public class AnimationScript : MonoBehaviour
private Animation _animation;
void Start()
_animation = this.animation;
void OnGUI()
//直接播放动画
if(GUI.Button(new Rect(0, 0, 100, 30), "idle"))
_animation.Play("idle");
if(GUI.Button(new Rect(100, 0, 100, 30), "walk"))
_animation.Play("walk");
if(GUI.Button(new Rect(200, 0, 100, 30), "run"))
_animation.Play("run");
if(GUI.Button(new Rect(300, 0, 100, 30), "jump_pose"))
_animation.Play("jump_pose");
//使用融合来播放动画
if(GUI.Button(new Rect(0, 30, 100, 30), "idle"))
_animation.CrossFade("idle");
if(GUI.Button(new Rect(100, 30, 100, 30), "walk"))
_animation.CrossFade("walk");
if(GUI.Button(new Rect(200, 30, 100, 30), "run"))
_animation.CrossFade("run");
if(GUI.Button(new Rect(300, 30, 100, 30), "jump_pose"))
_animation.CrossFade("jump_pose");
运行程序,会看见两排按钮,其中第一排按钮使用Play方法来切换动画,而第二排按钮则使用CrossFade来播放动画。
以从跑步切换到站立动画为例来看:
Play:直接切换动画,如果人物之前处于倾斜跑步状态,则会立即变成站立状态,表现上比较不真实,特别是当两个动画姿势差别较大时。
CrossFade:通过动画融合来切换动画,第二个参数可以指定融合的时间,如果人物之前处于倾斜跑步状态,则会在指定的融合时间内逐渐变成站立状态,表现上接近真实的人物动作切换效果。
但是当使用CrossFade播放跳跃动画时会出现问题,主要问题是跳跃动画不是循环播放且其持续时间小于动画融合的时间,我们修改为下面的脚本指定融合时间短一点就可以正常进行跳跃的融合播放了:
_animation.CrossFade("jump_pose", 0.1f);
该方法可以指定当当前的动画播放完毕后接下来播放的动画,如下:
_animation.PlayQueued("run", QueueMode.CompleteOthers, PlayMode.StopSameLayer);
以上是关于Unity 骨骼动画 2D Animation 入门(1)的主要内容,如果未能解决你的问题,请参考以下文章