首先大致介绍下几种Unity混合树:Blend Tree,可以有多种模式:

1. 1D混合:只有一个参数,即横坐标。纵坐标是动作权重,横轴上每一个点,对应的各动作权重之和为100%。每个动作分支有自己的100%权重点,即只播放这一个动作。这个值左边是淡入、右边是淡出。Threshold的范围随便设,反正引擎最后都会归一化处理。

1D混合适用于单轴状态过渡,如:idle==>walk==>run==>fast run的速度过渡。Runleft==>Run forward==>RunRight的转角过渡。

2. 2D混合:2D混合又细分了 Simple Directional(方向单一)、Freeform Directional(方向自由)、Freeform Cartesian(笛卡尔自由)三种模式。这三种模式官方文档建议:第一种用于每个位移方向只有一个动作;第二种用于有多个位移方向的同时,有的方向会有多个动作;第三种的X、Y轴就不是表示两个位移方向了,你可以定义一个轴为旋转,一个轴为位移。

3. Direct直接混合模式:混合树里套混合树,似乎适用于复杂的标签控制等。

接下来我介绍下我试验的一个小例子,用一下2D混合模式。

资源是Unity商店里的剑术动作包,里面有一套不同方向的走路动画,包括:向东、西、南、北,以及4个对角线方向,共8个方向的走路动画。这些动画有一个共同点:目光方向都是一个。如下图,看地面的Root Transform罗盘,走路方向是向左,大致为红箭头方向,但Body 的forward方向是蓝箭头方向。

把这8个动作(勾选Apply Root Motion)放入混合树,加上idle,9个动作,形成了如下的圆形阵列。idle在中间,8个方向的走路放到对应方向的坐标位置。参数为BlendX和BlendY,用虚拟轴控制。红点表示当前参数坐标,有圈的点是参与动画融合的点,圈的大小表示权重。

附上代码,通过IsWalk参数把状态转移到混合树里。这里还加了个“敌人”,最后的效果是玩家始终看向敌人的“决斗模式”:

using UnityEngine;namespace BlendTreeTest
{public class PlayerWalkTest : MonoBehaviour{private Animator playerWalk;public Transform enemy;void Awake(){playerWalk = GetComponent<Animator>();}void Update(){transform.LookAt(enemy);float x = Input.GetAxis("Horizontal");float y = Input.GetAxis("Vertical");if (x == 0 && y == 0){playerWalk.SetBool("IsWalk", false);}else{playerWalk.SetBool("IsWalk", true);playerWalk.SetFloat("BlendX", x);playerWalk.SetFloat("BlendY", y);}}}
}

Unity 2D 混合树小例子相关推荐

  1. Unity 动画混合树实例(Blend Tree)

    先看效果 游戏动画中的一项常见任务是在两个或更多相似运动之间进行混合.也许最熟知的示例就是根据角色的速度来混合行走和奔跑动画.另一个示例是角色在奔跑期间转向时向左或向右倾斜. 使用方法: 1.右键单击 ...

  2. Unity动画系统详解5:BlendTree混合树是什么?

    摘要:"Animator中有一个功能,用来解决多个动画之间的混合,经常用于移动动画之间的混合,这个功能叫做BlendTree,混合树." 洪流学堂,让你快人几步.你好,我是跟着大智 ...

  3. unity velocity_Unity动画系统详解5:BlendTree混合树是什么?

    摘要:"Animator中有一个功能,用来解决多个动画之间的混合,经常用于移动动画之间的混合,这个功能叫做BlendTree,混合树." 洪流学堂,让你快人几步.你好,我是跟着大智 ...

  4. 【Unity入门计划】Unity2D动画(2)-脚本与混合树实现玩家角色动画过渡

    目录 1 玩家角色移动伴随的简单动画 1.1 行走 1.2 停留 1.3 攻击敌人(触发型) 1.4 受伤(触发型) 1.5 跳跃 1.6 下蹲 2 动画间的过渡 3 过渡的判断逻辑 3.1 行走与停 ...

  5. Unity Mecanim动画系统 之 动画混合树(Blend Trees)的简单使用

    Unity Mecanim动画系统 之 动画混合树(Blend Trees)的简单使用 目录 Unity Mecanim动画系统 之 动画混合树(Blend Trees)的简单使用 一.简单介绍 二. ...

  6. 从零点五开始用Unity做半个2D战棋小游戏(完)

    好久不见. 这是第29篇与游戏开发有关的文章. | 写在最前 这次想要做一个简单且传统的战棋小游戏,大概的玩法是:在2D世界里创建一张由六边形地块组成的战斗地图,敌我双方在地图上轮流行动,并向对方发动 ...

  7. C# 实现 rtc_通过Xlua实现unity热更新的一个小例子

    通过Xlua实现unity热更新的一个小例子 一.介绍 ​ 热更新是指在更新游戏资源或者逻辑的时候不需要开发者将游戏再打包.发布.玩家重新下载安装包,而是可以通过将需要更新的资源打包成AssetBun ...

  8. unity案例 mysql lua_通过Xlua实现unity热更新的一个小例子

    通过Xlua实现unity热更新的一个小例子 一.介绍 ​ 热更新是指在更新游戏资源或者逻辑的时候不需要开发者将游戏再打包.发布.玩家重新下载安装包,而是可以通过将需要更新的资源打包成AssetBun ...

  9. Unity制作2D战棋小游戏

    写在最前 这次想要做一个简单且传统的战棋小游戏,大概的玩法是:在2D世界里创建一张由六边形地块组成的战斗地图,敌我双方在地图上轮流行动,并向对方发动攻击,先消灭掉所有敌人的一方将获得胜利. 今天我们来 ...

最新文章

  1. Unity3d截图两种方式
  2. 移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”
  3. 织梦文章主表关联栏目查询 生成静态url语句
  4. 自动性能统计信息(三)(Automatic Performance Statistics)
  5. 计算机网络原码反码补码,计算机的原码和反码及补码到底是什么
  6. python如何读取kepsever_python linecache读取过程
  7. 2020年短视频用户价值研究报告
  8. 基于.net core 3 和 Orleans 3 的 开发框架:Phenix Framework 7
  9. JDK9的安装与配置
  10. ASP.NET MVC3+EF4+Oracle入门实例(五)
  11. 云计算学习——Overlay网络技术概述
  12. 极通”由于找不到这台计算机安全许可证...i=258 R=2056“的 解决方法
  13. box-shadow 详解
  14. php下载太慢,迅雷下载速度慢的几种解决方法
  15. 什么蓝牙耳机好用又不贵?好用不贵的蓝牙耳机推荐
  16. 家庭服务器 作用,家庭网络存储服务器四大主要功能
  17. jdk11手动安装jre
  18. mysql勒索_mysql数据库被勒索删库怎么办
  19. 两篇word文档行间距设置的一样但是显示的不一样的解决方法
  20. 做对日软件外包项目的体会

热门文章

  1. 自信心受挫,该如何让项目团队成员重新振作起来
  2. webpy快速入门 搭建python服务器
  3. 【操作系统】虚拟存储器--页面置换算法
  4. 怎样恢复电脑丢失的文件?
  5. dbpedia知识图谱java_一种基于DBpedia的水务领域概念知识图谱构建方法与流程
  6. 基于Redis的分布式限流器Java实现
  7. 【读书联动】认知觉醒:开启自我改变的原动力
  8. 传统IT企业转型之路
  9. iOS系列开发-版本控制工具Git的使用
  10. java标准差代码实现