Animator动画状态机的简单使用
一.动画状态机的使用
1.动画状态机说明


2.动画切换箭头的Inspector面板

3.动画的Inspector面板

二.动画状态机的使用和脚本控制
1.动画状态机的使用

2.动画状态机的控制脚本
在脚本中,获取Animator组件,这个组件可以通过SetXXX()方法设置对应参数的值,XXX为参数类型,方法形参为状态机中参数名和设置的参数值
public class BikerController : MonoBehaviour
{
public Animator anim; float h = 0;
float v = 0;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
} // Update is called once per frame
void Update()
{
h = Input.GetAxis("Horizontal");
v = Input.GetAxis("Vertical");
anim.SetFloat("Horizontal", h);//设置float类型参数Horizontal值为获取的h值
anim.SetFloat("Vertical", v);//设置float类型参数Vertical值为获取的v值 if (h == 0 && v == 0)//设置bool参数IsIdle为true
anim.SetBool("IsIdle", true);
else//设置bool参数IsIdle为false
anim.SetBool("IsIdle", false); }
}
三.动画的混合树
对于一些复杂的动画状态,如上面的动画状态,动画的切换箭头会非常多,不便于管理动画,因此有必要将一些同类型的系列动画做成混合动画,如控制玩家运动(走、跑、转向等,一般跳跃动画不做成混合动画)状态的动画可以由一个混合动画管理。

创建混合树后双击进入混合树



1.1D混合动画

同样通过脚本设置参数的值来控制动画播放状态
2.2D混合动画


2D混合有3种混合方式,在官方文档中对混合方式有详细说明,2D Simple Directional在一个方向上不能有多个运动,2D Freeform Directional在一个方向上可以有多个运动,2D Freeform Cartesian最好在运动不表示不同方向时使用。
3.直接混合

四.Animator的遮罩和层级等

五.动画的位置匹配
1.角色身体的某个点和环境中的点匹配
public void MatchTarget (Vector3 matchPosition, Quaternion matchRotation, AvatarTarget targetBodyPart, MatchTargetWeightMask weightMask, float startNormalizedTime, float targetNormalizedTime= 1);
参数:匹配的位置,匹配的旋转四元数,匹配的身体部位,权重,开始匹配的时间,结束匹配的时间
2.角色和地面的位置匹配
使用CharactorController组件进行匹配,使角色始终踩在地面上
3.IK动画匹配
/// <summary>
/// IK匹配,在每一帧都会调用这个函数
/// </summary>
/// <param name="layerIndex"></param>当前的动画层级
private void OnAnimatorIK(int layerIndex)
{
if(layerIndex == 1)
{
//角色有四个位置可以设置IK,分别使左右手和左右脚
//设置角色左手位置为leftHand的位置(空物体)
anim.SetIKPosition(AvatarIKGoal.LeftHand, leftHand.position);
//设置角色左手旋转为leftHand的旋转(空物体)
anim.SetIKRotation(AvatarIKGoal.LeftHand, leftHand.rotation);
//设置角色左手IK位置的权重为1
anim.SetIKPositionWeight(AvatarIKGoal.LeftHand,1);
//设置角色左手IK旋转的权重为1
anim.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1);
}
}
Animator动画状态机的简单使用的更多相关文章
- Unity3D中通过Animator动画状态机获取任意animation clip的准确播放持续时长
Unity3d 4及之前的版本中动画的播放用的animation,可直接获取其播放持续长度.但5.x及以后的版本中都是用animator来播放动画了. https://docs.unity3d.com ...
- Unity Animator动画状态机 深入理解(一)
接触Unity以来就已经有了Animator,Animation用的少,不过也大概理解他俩之间的一个区别于联系. 图中其实就是Animator和Animation之间的区别于联系了,啊!你肯定会告诉我 ...
- Unity动画知识之二:Animator动画状态机
上次我们讲过Unity游戏动画从入门到住院,今天我们来讲一下动画状态机. 好了,现在我们已经成功的导入了动画.接下来要玩的东西就很装13啦.因为大部分动画师是用不到这家伙的,需要掌握这个技能的,至少也 ...
- Unity Animator动画状态机 深入理解(三)二维混合树
介绍二维之前,先说说一维吧~ 这个是通过旋转角度速度快慢来表现身体的大转和中转~ 通过一个-133~133的数值来进行控制. 注:后面的那个对钩是镜像的意思. 其实二维混合树并没有想象中的那么难.先来 ...
- Unity Animator动画状态机 深入理解(二)IK控制
IK还是一个很神奇和实用的东西啊,起码可以用代码来控制人物骨骼位置还是很爽的.因为不是动画师~ 这篇可能跟Animator没啥关系了哈,都是代码层的. 看了一官方的案例,老的,有些问题,自己修改了一下 ...
- 用Unity的Animation播放Animator动画Clip
简单的动画,其实不需要Animator动画状态机管理,用Animation播放效率更高,但可能由于历史遗留问题,或网上下载的第三方资源,得到的是Animator资源,可以在Clip的Debug试图下, ...
- unity 对Animator动画系统的研究
unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...
- Unity问答——请问一下动画状态机怎么判断动画是否播完了?
这篇博客源自我在泰课在线的回答.链接:http://www.taikr.com/group/1/thread/233 问:请问一下动画状态机怎么判断动画是否播完了? 答: 1. 脚本参考 Animat ...
- Unity插件 - MeshEditor(六) 变形动画状态机
变形动画状态机--MeshAnimator,是针对MeshAnimation的状态管理器,有大量类似Unity animator的功能,但MeshAnimator操作会更加简便,更加直观,居家旅(zh ...
随机推荐
- win8.1默认输入法设置
1.右击左下角,选择控制面板 2.选择更改输入法 3.选择高级设置 4.在替代默认输入法,从下拉列表中选择自己已安装的输入法,比如搜狗拼音输入法,qq拼音输入法等其他输入法
- Phoenix-4.14-cdh5.14.2与hbase-1.2.0-cdh5.14.2集成测试
Phoenix介绍: 针对hbase开发的第三方插件,目前已贡献给Apache,顶级项目 Phoenix是构建在HBase上的一个SQL层 可以使用类似于操作mysql的标准sql语句,作为h ...
- 常见大中型网络WLAN基本业务实例
组网图形 大中型WLAN网络简介 本文介绍的WLAN网络是指利用频率为2.4GHz或5GHz的射频信号作为传输介质的无线局域网,相对于有线网络的铺设成本高,不便于网络调整和扩展.位置固定,移动性差等缺 ...
- Linux下安装svn教程
前言 最近买了新服务器,准备开始弄一些个人的开源项目.有了服务器当然是搞一波svn啦.方便自己的资料上传和下载.于是在此记录搭建svn的方式,方便以后直接使用. 安装 使用yum源进行安装,十分的方便 ...
- 【MyBatis】MyBatis 延迟加载策略
MyBatis 延迟加载策略 文章源码 什么是延迟加载 延迟加载,就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据,也被成为懒加载. 好处:先从单表查询,需要时再从关联表去关联查询,大大提 ...
- python模块详解 | pyquery
简介 pyquery是一个强大的 HTML 解析库,利用它,我们可以直接解析 DOM 节点的结构,并通过 DOM 节点的一些属性快速进行内容提取. 官方文档:http://pyquery.readth ...
- MySQL常用字符串函数和日期函数
数据函数 SELECT ABS(-8); /*绝对值*/ SELECT CEILING(9.4); /*向上取整*/ SELECT FLOOR(9.4); /*向下取整*/ SELECT RAND() ...
- 解决ROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'creat table study_record( id int(11) not null
之前一直用的好好的,突然就出现了这个错误: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual tha ...
- Electron入门Demo之桌面应用计算器笔记(二)
码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14307996.html 在之前总结了一篇自学笔记,通过之前学习到的方法和知识,完成了 ...
- HTML基础复习2
6.表格 6.1建立表格: 表格由<table></table>标签来定义 每行由<tr></tr>来定义,每行被分割为若干单元格,由<td> ...