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 ...
随机推荐
- 初识vue-简单的自定义标签页面
vue3.0比vue2.0简化了许多. 在这里呢就做了一个简单的标签页面.在这当中难免会有些错误,请勿见怪. 1.vue的页面编写,也就是app.vue这个文件作为主入口文件,当然这个主入口文件也可以 ...
- MongoDB备份(mongoexport)与恢复(mongoimport)
1.备份恢复工具介绍: mongoexport/mongoimport mongodump/mongorestore(本文未涉及) 2.备份工具区别在哪里? 2.1 mongoexport/mongo ...
- 多媒体开发(5)&音频特征:声音可以调大一点吗?
基本上,现在常用的声音采样办法是pcm,而对于压缩音频的解码,得到的也pcm数据.这个pcm数据,只是一堆数值,有正有负,看这个值看不出什么花样. 声音采集,采的是什么呢? 采的是声音的强度变化,也是 ...
- Detectron2 快速开始,使用 WebCam 测试
本文将引导快速使用 Detectron2 ,介绍用摄像头测试实时目标检测. Detectron2: https://github.com/facebookresearch/detectron2 环境准 ...
- node中 path.join 和 path.resovle 区别
console.log(__dirname) console.log('----') console.log(path.resolve(__dirname, '/a/b', '../')) conso ...
- 深入理解MySQL索引(下)
先创建一个T表. mysql> create table T ( ID int primary key, k int NOT NULL DEFAULT 0, s varchar(16) NOT ...
- [工作札记]02: .Net Winform控件TreeView最简递归绑定方法
前言:Treeview控件是我们在WinForm.WebForm开发中经常使用的控件,需要从数据库动态加载数据,然后递归绑定每一个节点:同样,递归的思路在其他程序中也经常运用,包括.Net MVC等. ...
- Openstack Ocata 公共服务端(三)
Openstack Ocata 公共服务端 mysql 安装: yum install mariadb mariadb-server mysql 安装过程省略 rabbit-server 安装包: # ...
- SQL中的主键,候选键,外键,主码,外码
1.码=超键:能够唯一标识一条记录的属性或属性集. 标识性:一个数据表的所有记录都具有不同的超键 非空性:不能为空 有些时候也把码称作"键" 2.候选键=候选码:能够唯一标识一条记 ...
- Can't locate CPAN.pm in @INC
[root@test]# perl -MCPAN -e 'install DBD::mysql'Can't locate CPAN.pm in @INC (@INC contains: /usr/lo ...