游戏制作之路(39)加载人形的动画4

栏目: 后端 · 发布时间: 5年前

内容简介:在前面只是实现不同动画之间进行无条件地转换执行,其实在游戏里,经常要切换动画执行的,比如让一个角色行走时播放的动画是行走的动画,如果角色要跳起来,播放的动画是跳动的动画,如果角色转身时,应该播放转身的动画。现在所有的动画都放到动画编辑器里了,如果想要动画在状态之间有条件地进行切换,就需要增加切换条件参数,这样才可以在脚本里设置触发条件。怎么样来添加触发切换状态的条件呢?下面就来解决这个问题。先要在动画编辑器里添加条件参数,如下图:在这里点击Parameters选项面,然后出现添加状态转换参数,再点击下面的加

在前面只是实现不同动画之间进行无条件地转换执行,其实在游戏里,经常要切换动画执行的,比如让一个角色行走时播放的动画是行走的动画,如果角色要跳起来,播放的动画是跳动的动画,如果角色转身时,应该播放转身的动画。现在所有的动画都放到动画编辑器里了,如果想要动画在状态之间有条件地进行切换,就需要增加切换条件参数,这样才可以在脚本里设置触发条件。怎么样来添加触发切换状态的条件呢?下面就来解决这个问题。先要在动画编辑器里添加条件参数,如下图:

游戏制作之路(39)加载人形的动画4

在这里点击Parameters选项面,然后出现添加状态转换参数,再点击下面的加号,就可以添加条件参数,如下图添加一个参数从空闲切换到跳动:

游戏制作之路(39)加载人形的动画4

点击加号之后,会弹出一个菜单,这个菜单里有几种数据类型,在这里选择Bool类型,就可以添加像C处这样的参数,把这个参数的名称改为Standing_Jump,当设置为true表示从空闲切换到跳动,设置false时从跳动状态切换到空闲状态,如下图:

游戏制作之路(39)加载人形的动画4

在这里,这个参数默认是false状态,因为后面那个选择框并没有勾选。

接着下来要把这个参数关联到切换连接线里,如下图:

游戏制作之路(39)加载人形的动画4

在这里选中空闲到跳转的连接线,然后在右边看到条件添加列表地方,在那里点击加号,就可以把这个条件变量添加到状态里了,如下图:

游戏制作之路(39)加载人形的动画4

从上图可以看到添加Standing_Jump,后面的true就是表示在代码设置为true时就可以播放跳动动画。同理,也可以设置相反的状态切换,点击从跳动到空闲的连接线,设置如下图:

游戏制作之路(39)加载人形的动画4

这里设置状态为false从跳动切换到空闲状态。

通过上面几步的设置,就把动态的状态条件创建完成了,下一步就是创建脚本代码,编写相应的控制代码了。接着来创建一个脚本youCond.cs来绑定you这个对象,如下图:

游戏制作之路(39)加载人形的动画4

点击A处的按钮,就可以添加脚本,把脚本命名为上面的名称。就可以打开脚本进行编辑,在里面添加下面的代码:

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

public class YouCond : MonoBehaviour {
    private Animator anim;
    private AnimatorStateInfo currentBaseState;

    private float timeCount = 0.0f;

    static int idleState = Animator.StringToHash("Base Layer.standing_idle");
    static int jumpState = Animator.StringToHash("Base Layer.Standing_Jump");
    // Use this for initialization
    void Start ()
    {
        anim = GetComponent<Animator>();
        timeCount = 0;
    }
	
	// Update is called once per frame
	void Update ()
    {
        currentBaseState = anim.GetCurrentAnimatorStateInfo(0);
        if (currentBaseState.fullPathHash == idleState)
        {
            if (Input.GetButtonUp("Jump"))
            {
                anim.SetBool("Standing_Jump", true);
                Debug.Log("Jump");
                timeCount = 0;
            }
        }
        else if (currentBaseState.fullPathHash == jumpState)
        {
            Debug.Log("Jump......");
            timeCount += Time.deltaTime;
            if (timeCount > 5.0f)
            {
                anim.SetBool("Standing_Jump", false);
            }
        }
    }
}

在这段代码里,主要使用Animator对象和AnimatorStateInfo对象,并且使用Animator.StringToHash()函数来计算指定动画的名称,这样计算出来的动画就是一串数字,可以大大地提高比较的速度,比字符串比较要快很多。同理,访问currentBaseState.fullPathHash也是为了更快的速度。

到这里,已经把人形动画学习完成了,也可以通过脚本进行触发指定的动画了。但还一个更复杂的动画Blend Tree,唯一的区别就是Montion指向的类型变成了Blend Tree类型,那么一个Blend Tree其实也就是一个状态,和状态不同的地方就是一个状态只能设定一个动画,而一个Blend Tree则可以设定为多个动画的混合。多个动画混合比较复杂,这里就不再学习了,有兴趣后面再自己学习。

https://blog.csdn.net/caimouse/article/details/51749579


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程算法新手自学手册

编程算法新手自学手册

管西京 / 机械工业 / 2012-1 / 69.80元

《编程算法新手自学手册》主要内容简介:算法是指在有限步骤内求解某一问题所使用的一组定义明确的规则。程序员都会看重数据结构和算法的作用,水平越高,就越能理解算法的重要性。算法不仅是运算工具,更是程序的灵魂。《编程算法新手自学手册》循序渐进、由浅入深地详细讲解了基于C语言算法的核心技术,并通过具体实例的实现过程演练了各个知识点的具体使用流程。全书共11章,分为4篇。1~2章是基础篇,介绍算法开发所必需......一起来看看 《编程算法新手自学手册》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具