创建人物基本动画

学习如何制作人物动画,如何制作帧动画Animation,Animator

首先我们先来看一下我们的素材,在素材当中有两个guide指南图片,描述了我们应该用哪些帧来制作不同动画,点开来看一下

首先有Idle的打击状态,有6帧,作为待机状态,上下呼吸的状态

还有跑步,跳跃,起跳,空中,下落几种状态,可以制作多段动画,执行每一段不同的内容,也包括下蹲,受击,死亡,受伤等等,所以我们来切割一下,使用这些动画,在guide_2当中我们也有一些额外的其他动画,还有滑铲和爬墙等内容

首先我们来做一个待机的动画状态,再次进入切割图片的画面

确认一下人物动作的名称

接下来用新的组件来添加动画,在Player下Add component搜索Animator

Animator是一个动画的控制器,我们可以点击问好“ ?”来快速访问一下,Animator组件的详细介绍

Animator可以通过切换我们动画的不同状态,来播放指定的动画内容

在Animator中缺少一个动画控制器,所以我们来创建一下,在Assets文件夹下,除了有人物的动画控制器以外,我们也会有敌人的,所以我们创建一文件夹Animations,用来保存动画和动画控制器

在Animations下创建Player,人物动画在Player下,点击上方“ + ”选择Animator Controller,命名为Player

Animation是单个的动画,一个一个的动画的片段

Animator是用来管理多个Animation合成的

因此我们要创建Animator Controller

创建好了之后,将我们的Player添加到Controller当中,拖拽添加

我们点击Player来查看一下我们的Animator的控制器在window菜单中--Animation--Animator

这个窗口就是我们的动画控制器,点按鼠标滚轮,可以调整这个窗口,鼠标右键可以进入菜单创建空的状态,目前这里面没有任何的动画状态,目前这里面有几种默认状态(动画进入,动画退出,任何状态都可以执行的动画),在此处进行编辑人物的不同动画状态创建人物的Idle动画

在png中找到最开始的几幅图,由0-5这六张图片构成Idle的状态

点击Player,window菜单--Animation--Animation

打开了Animation窗口

点击Create

放入Animation--Player中添加,命名为blueIdle--save

创建好了之后,可以看到这个动画默认添加到我的animator当中了,而且设置为黄色了,也就是Default state,也就是当我的游戏进入的时候,默认播放的动画

接下来把我们的动画添加到我们的时间轴上 ,按住shift键选择1-5这6张图片,拖拽放到时间轴上,我们可以适当调整一下unity的页面布局

回到scene的窗口中,点击Animation窗口的播放,预览一下人物效果,人物在哆嗦,因为我们的采样率比较高很多小伙伴的unity中没有显示采样率,我们可以点击Animation窗口右侧的三个点,勾选Show Sample Rate我们来设置一下采样率,在这个idle状态下,设置为10帧,也就是10帧为1秒,然后播放一下

数字越大,播放速度越快,这样我们就设置好了第一个动画,

在Animation窗口中,他变为了默认的,代表游戏运行,只要动画控制器现在在我们的animator当中,默认播放这个动画

每次预览好动画,要再次点击旁边的Preview,还原到最初始的状态我们在scene中运行一下,可以看到目前人物有了Idle的这个状态了,不过目前移动和跳跃也会有Idle的这个状态

我们之前设置的人物重力是4,跳跃力是16.5,这样可以跳过三个格子高的平台

接下来制作人物的跑动动画,选中Player,在animation窗口当中,如果没有显示出来的话,点击一下其他的物体,再点击回来就可以看到

在左侧的下拉菜单当中,我们选择再次创建一个新的动画片段Create New Clip,我们来创建人物的跑动动画

选择png--guide中14-21添加,速率改为14,查看效果,

查看一下animation窗口,多了一个新的动画片段,他不是实际的动画片段,选中可以看到右边实际播放的动画片段叫做blueRun,而这个东西我们称之为state,也就是一个状态

点击鼠标右键可以看到create state,可以创建一个空的片段,对于这个片段播放的动画,可以单独去选择,比如说让他播放跑动的动画,那他就可以播放跑动的动画,在Animator当中,每一个这样的方块表示一个动画的状态,这个状态也可以改名字就叫做Run(如果出现不能改名的状态,可以保存项目,重启unity)接下来要实现人物从Idle状态切换到Run的状态

在Animator窗口中,选中Idle这个状态,按鼠标右键有一个选项叫做Make Transition,也就是创建一个切换,这个转换我们可以拉一条线出来,在blue Idle和Run之间拉一条线,代表可以从Idle状态转化到Run

右侧“ - ”可以删除线

选中这个线,可以查看里面的详细设置以及条件

所以我们可以创建一些条件,满足这些条件,就可以实现切换

条件创建在Animator窗口的左侧左上角有一个Parameters,在这里我们可以创建一系列的变量参数来实现不同条件,在没有任何条件的情况下,它也可以单独切换,inspector窗口中有一个Has Exit Time,我们人物一旦跑起来,它的x轴的速度就发生了变化,我们可以通过这个速度的变量值来切换我们的这个动画,到Parameters里面点击加号,可以看到我们可以创建四种类型的变量参数,在这里面我们创建float,速度是float值,起名为velocityX(Parameters变量中最好以小写开头)

然后再Conditions点“+ "选择velocityX,旁边选择大于Greater,(留意大于0这个变量参数,有时候在我们动画切换和计算机判断的时候,不是非常精准。我们可以给他设置一个非常小的值,大于0.1)大于0.1,即可进入跑步状态,上面的Has Exit Time不勾选,没有退出时间,Fixed Duration也不勾选,transition Duration(从一个动画切换到另一个动画的过度)也不需要,设为0(像素类的游戏需要马上切换,因为帧动画每一帧到下一帧就已经有了动画的过度)目前两者之间还是不能转换,因为我们没有设置velocityX的数值,设置数值我们需要写一个代码来控制我们的animator

我们在project的Player文件夹中新建一个c#代码,用来播放我们人物的动画,命名为PlayerAnimation(这样就把每一部分的功能拆开来写了)

在Player的inspector窗口添加一下PlayerAnimation的组件

顺便调整一下组件的顺序

双击打开代码

要想获得Animator窗口当中的条件切换,所以我们一定要获得PlayerAnimation的组件的使用权

所以在代码中,我们要先创建Animator的这个组件,起名为anim

也代表我们要在Awake中获得这个变量

那么接下来我就可以通过anim访问Animator中每一个变量的内容了

去访问我们设置的float变量

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerAnimation : MonoBehaviour
{
    // Start is called before the first frame update
    private Animator anim;

    public void Awake()
    {
        anim = GetComponent<Animator>();//可以访问Animator当中的变量
    }
}

具体操作我们可以查看一下代码手册,搜索animator

GetFLoat获得float的变量值

SeyFloat设置一个float值

创建变量之后就可以用这样的函数方法

 点击SetFloat可以查看具体的使用样例回到代码中,开始编写

创建一个函数,来执行所有的动画切换,命名为SetAnimation,这个动画是实时的,每一帧都要执行的,我们要把它放到我们的Update当中

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerAnimation : MonoBehaviour
{
    // Start is called before the first frame update
    private Animator anim;

    public void Awake()
    {
        anim = GetComponent<Animator>();//可以访问Animator当中的变量
    }

    public void Update()
    {
        SetAnimation();
    }

    public void SetAnimation()
    {

    }
}

接下来我们要设置一个float值

我们可以看到Set Float的使用方法,(string name,float value)

float value我们要设置的就是Rigidbody的移动速度,x轴方向的速度,我们需要在上方再获得一下我们Rigidbody的组件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerAnimation : MonoBehaviour
{
    // Start is called before the first frame update
    private Animator anim;
    private Rigidbody2D rb;

    public void Awake()
    {
        anim = GetComponent<Animator>();//可以访问Animator当中的变量
        rb = GetComponent<Rigidbody2D>();
    }

    public void Update()
    {
        SetAnimation();
    }

    public void SetAnimation()
    {
        anim.SetFloat("velocityX", rb.velocity.x);//获得x轴的速度
    }
}

保存代码,返回unity

velocity.x向左变为复制,就不可执行,因为我们设置的是大于0.1,变为跑步效果之后回不去Idle状态,

我们需要在代码中给取绝对值,无论正数还是负数,都可以执行

uniity取绝对值:Mathf.Abs(Absolute绝对值)

 public void SetAnimation()
 {
     anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));//获得x轴的速度,取绝对值左右方向都可大于0.1
 }

跑完之后回到Idle状态,从idle到Run我们让velocityX大于0.1;从Run到idle我们可以添加另外一个方法让velocityX小于0.1,同样不需要过渡时间,也不需要转换,过渡保存项目,运行测试

由于我们用的方法是transform的localScale的翻转,所以人物整体翻转,对应的图片也翻转了,跑动状态和idle状态可以互相切换

我们通过代码绑定我们Animator当中的一个变量,把数值同步过去,并且在Animator中设置切换的条件,来实现动画的转换,接下来我们要设置人物的走路动画,从走路可以变到跑步,因为在使用手柄的时候,人物速度会缓慢增加,速度慢播放走路,速度快播放跑步

首先创建动画

切割一下走路的第二章图集切割好了,走路的图片是0-9

我们将图片添加到Animation当中,速率设置为14,运行查看一下效果Animator当中现在多了一个状态如图继续按照刚才的进行设置从走路切换到跑步我们也有一些条件,就是当速度大于一定程度,设置为2.5,(在游戏运行时观察Rigidbody的info中velocity的数值变化,取得2.5的数值,在一半多一点的情况)

大于2.5直接切换到Run,idle到Run的数值也改为2.5

保存运行一下,这下我们就要借助游戏手柄了

这个功能暂时不能用键盘来测试,当然我们也可以强制使用按键方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值