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 ...
随机推荐
- mysql使用全文索引实现大字段的模糊查询
0.场景说明 centos7 mysql5.7 InnoDB引擎 0.1创建表 DROP TABLE IF EXISTS tbl_article_content; CREATE TABLE tbl_a ...
- 安装weblogic 11g
参考 https://blog.csdn.net/z69183787/article/details/38401013 https://blog.csdn.net/wjf8882300/article ...
- leetcode-222完全二叉树的节点个数
题目 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置. ...
- Docker Harbor 高可用 1.7.5版本(七)
环境说明: node1 10.10.5.135 仓库 1 node2 10.10.5.136 仓库 2 node3 10.10.5.137 客户端 实验内容: Harbor 可以在两台主机之间相互同步 ...
- Docker学习笔记之向服务器部署应用程序
部署的应用仅仅是简单应用程序,使用的是node管理的web应用,具体我也不是很会,当然也可以配置tomcat服务器.这里主要是学习docker.需要客户机和服务机,其中服务机必须要为Linux操作系统 ...
- Mybatis 报错java.sql.SQLException: No suitable driver found for http://www.example.com
运行项目报错 Error querying database. Cause: java.sql.SQLException: No suitable driver found for http://ww ...
- 【ASM】查看ASM磁盘组剩余容量和总容量
col total_size for a10; col free_size for a20; select name,total_mb/1024 || 'G' as total_size , free ...
- MongoDB数据库,一些的筛选过滤查询操作和db.updae()更新数据库记录遇到的坑。
缘由:使用MongoDB时遇到一些需要查询/更新操作指定某些字段的业务场景 查询和更新指定字段就需要进行简单的筛选和过滤,也能在大数据量时减少查询消耗时间 1. 查询数据库某些指定字段,同时默认返回_ ...
- 天天用SpringBoot居然还不知道它的自动装配的原理?
引言 最近有个读者在面试,面试中被问到了这样一个问题"看你项目中用到了springboot,你说下springboot的自动配置是怎么实现的?"这应该是一个springboot里面 ...
- 原生ajax分享
最近被大佬问了一个很有趣的问题,你还能手打出一个ajax吗?,我当时的想法是有现成的为什么要自己打,后来我反思了一下(只有靠自己才是强者),在这里给大家分享一个我自己打的ajax,也是自己的一个知识点 ...