内容简介:在前面只是实现不同动画之间进行无条件地转换执行,其实在游戏里,经常要切换动画执行的,比如让一个角色行走时播放的动画是行走的动画,如果角色要跳起来,播放的动画是跳动的动画,如果角色转身时,应该播放转身的动画。现在所有的动画都放到动画编辑器里了,如果想要动画在状态之间有条件地进行切换,就需要增加切换条件参数,这样才可以在脚本里设置触发条件。怎么样来添加触发切换状态的条件呢?下面就来解决这个问题。先要在动画编辑器里添加条件参数,如下图:在这里点击Parameters选项面,然后出现添加状态转换参数,再点击下面的加
在前面只是实现不同动画之间进行无条件地转换执行,其实在游戏里,经常要切换动画执行的,比如让一个角色行走时播放的动画是行走的动画,如果角色要跳起来,播放的动画是跳动的动画,如果角色转身时,应该播放转身的动画。现在所有的动画都放到动画编辑器里了,如果想要动画在状态之间有条件地进行切换,就需要增加切换条件参数,这样才可以在脚本里设置触发条件。怎么样来添加触发切换状态的条件呢?下面就来解决这个问题。先要在动画编辑器里添加条件参数,如下图:
在这里点击Parameters选项面,然后出现添加状态转换参数,再点击下面的加号,就可以添加条件参数,如下图添加一个参数从空闲切换到跳动:
点击加号之后,会弹出一个菜单,这个菜单里有几种数据类型,在这里选择Bool类型,就可以添加像C处这样的参数,把这个参数的名称改为Standing_Jump,当设置为true表示从空闲切换到跳动,设置false时从跳动状态切换到空闲状态,如下图:
在这里,这个参数默认是false状态,因为后面那个选择框并没有勾选。
接着下来要把这个参数关联到切换连接线里,如下图:
在这里选中空闲到跳转的连接线,然后在右边看到条件添加列表地方,在那里点击加号,就可以把这个条件变量添加到状态里了,如下图:
从上图可以看到添加Standing_Jump,后面的true就是表示在代码设置为true时就可以播放跳动动画。同理,也可以设置相反的状态切换,点击从跳动到空闲的连接线,设置如下图:
这里设置状态为false从跳动切换到空闲状态。
通过上面几步的设置,就把动态的状态条件创建完成了,下一步就是创建脚本代码,编写相应的控制代码了。接着来创建一个脚本youCond.cs来绑定you这个对象,如下图:
点击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则可以设定为多个动画的混合。多个动画混合比较复杂,这里就不再学习了,有兴趣后面再自己学习。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Unity的动画图和人形动画初探
- 介绍同步加载、异步加载、延迟加载[原创]
- .net加载失败的程序集重新加载
- 虚拟机类加载机制:类加载时机
- 探秘类加载器和类加载机制
- hibernate中加载策略+批加载+懒加载异常【原创】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
注意力经济: 如何把大众的注意力变成生意
吴修铭 / 中信出版集团股份有限公司 / 2018-4-1 / 69
编辑推荐 这本书由万维钢作序,并在《得到》日课中多次推荐!中文版未上市之前,中文前沿媒体就在力推这本书!关于注意力争夺战的历史和现在,作者给了权威的梳理和定位! 百年来,在争夺注意力的战场上,媒体、广告、商人、企业和大众成为博弈的主角。商人是如何在注意力争夺战中获利的?媒体是如何在改变报道形式的?广告是如何进化的?以及,营销是如何变得随处可见、无孔不入的呢?这本书讲述了令商人或企业从吸......一起来看看 《注意力经济: 如何把大众的注意力变成生意》 这本书的介绍吧!