unity 角色 动画脚本_Unity动画之Blend Tree(混合树)

混合树 (Blend Tree) 用于允许通过按不同程度组合所有动画的各个部分来平滑混合多个动画,本篇文章和大家分享的是使用混合树动画实现人物在跑的状态下,才能进行转弯操作,和跳起动作的效果。

1、Unity中的动画混合树可以将几个动画文件很好的融合在一起其中Run是状态树:

v2-1caed479c398482a326447d107ddb327_b.jpg

v2-577bea2ed437a2c2a48f6da920038ba7_b.jpg

v2-703ebfa7b63a95e60c9b6bf9b7e77e9f_b.jpg

参数Direction是浮点类型。上面概述为:动画状态可以是单个的动画文件,也可以是由动画文件融合成的状态树。勾选automate threshold可以修改thresl临界值

2、第一步已经在Unity面板中把先关参数配置好了,现在就需要用脚本来设置相关参数条件的实现。

using UnityEngine;
using System.Collections;
public class BlendTree : MonoBehaviour {
protected Animator animator;
public float DirectionDamoTime = 0.25f;
void Start () {
animator = GetComponent<Animator>();

void Update () {
if(animator)

AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
if (stateInfo.IsName("Base Layer.Run"))//注意这里必须是Base Layer.Run Base Layer是动画层的名称,用.的形式引出当前准备切换动画的动画状态名称

if (Input.GetKeyDown(KeyCode.Space))
animator.SetBool("Jump", true);

else

animator.SetBool("Jump", false);

//在奔跑时才可以水平旋转
float horizontal = Input.GetAxis("Horizontal");
animator.SetFloat("Direction", horizontal, DirectionDamoTime, Time.deltaTime);
//控制idle到跑状态的切换
if (Input.GetKeyDown(KeyCode.W))

animator.SetFloat("Blend", 1.0f);

else if (Input.GetKeyUp(KeyCode.W))

animator.SetFloat("Blend", -0.1f);



3、基本概念

v2-8640ff700357f60739e09c734c47464c_b.jpg

第二个参数如果变为负值可以修改动画运动的方向。动画混合树,实际上也是一个动画状态单元,和普通的动画状态不同的是,他可以混合多个动画。

4、在BlendTree 的2D融合图中:

v2-56a921d513f750c0ecbac73f90fe083a_b.jpg

设置为-1 可以让动画反向播放,在有向前走而没有向后走的动画时。

5、2D融合图的操作步骤:

a.在动画控制器中,建立默认状态为BlendTree

v2-78f6fe68b20c22aeeb8316e5ea757153_b.jpg

b.type选择2D,parameter自己创建参数,此参数会在脚本中运用到,并将四个动画文件子对象的相关位置设置好之后,在unity面板中的配置就完成了:

v2-80a9dc33213ab3b9983b412609d85170_b.jpg

c.脚本的控制:

using UnityEngine;
using System.Collections;
public class BlendTree2D : MonoBehaviour {
private Animator ani;
public float xDampTime = 1.0f;
public float yDampTime = 1.0f;
//动画参数的系数
float xVal = 1.5f;
float yVal = 1.5f;
void Start () {
ani = gameObject.GetComponent<Animator>();

void Update () {
if(ani)

float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
ani.SetFloat("ValX", h, xDampTime, Time.deltaTime);
ani.SetFloat("ValY", v, yDampTime, Time.deltaTime);


这样就能很好的对角色进行,前进,后退,左右运动的控制了。

d.数值的大小,影响着动画播放的快慢。越小播放越快。

v2-0ef5b21b3258f0d6e37d9ae43c4321eb_b.png

动画融合就是设置权重的大小将动画进行融合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值