内容简介:在前面只是实现不同动画之间进行无条件地转换执行,其实在游戏里,经常要切换动画执行的,比如让一个角色行走时播放的动画是行走的动画,如果角色要跳起来,播放的动画是跳动的动画,如果角色转身时,应该播放转身的动画。现在所有的动画都放到动画编辑器里了,如果想要动画在状态之间有条件地进行切换,就需要增加切换条件参数,这样才可以在脚本里设置触发条件。怎么样来添加触发切换状态的条件呢?下面就来解决这个问题。先要在动画编辑器里添加条件参数,如下图:在这里点击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中加载策略+批加载+懒加载异常【原创】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Transcending CSS
Andy Clarke、Molly E. Holzschlag / New Riders / November 15, 2006 / $49.99
As the Web evolves to incorporate new standards and the latest browsers offer new possibilities for creative design, the art of creating Web sites is also changing. Few Web designers are experienced p......一起来看看 《Transcending CSS》 这本书的介绍吧!
图片转BASE64编码
在线图片转Base64编码工具
XML、JSON 在线转换
在线XML、JSON转换工具