Unity动画系统常用知识总结

资源导入需要注意的地方

导入数据的时候,需要看当前模型是否符合unity的正常大小。
方法:创建一个Cube,然后将模型拖到场景中与Cube比较一下大小,如果大小不合适需要在模型中调整,而不是调整unity的游戏物体,避免出现不必要的错误。
在这里插入图片描述

常用的组件

Animator 组件

在这里插入图片描述
重点介绍一下前三个。
Contorller:游戏状态控制器,控制当前角色处于什么状态(播放对应的动画)。
Avatar:骨骼,当前人物模型的骨骼,通常情况下美工配好。
只要有经过处理的Avatar,我们就可以通过 Animator Controller动画控制器控制人物模型播放一组制定的动画。
所以符合Avatar进行Retaring重定向的条件为:
1、相同的Animator Controller控制器。
2、都有经过成功处理的Avatar资源组件(可以不是同一个Avatar)。
3、可以模型不带任何动画。

Apply Root Motion:简单理解,有的动画自带移动,带有矢量,如果勾选,则表明使用动画自带的位移,不适用则自己手写移动相关的代码。

Avatar Mask 骨骼遮罩

在这里插入图片描述
在Project面板创建,点击对应的位置,即可让对应的部位无法播放动画,在Animator Controller中的layer层绑定,绑定完之后该layer层下的所有手臂动画无法播放(该图中)。

Animator Controller

动画状态控制器,控制动画切换的核心组件。

动画切换

常用动画切换,创建两个State,然后点击其中一个右键选择Make Transition
在Parameters中添加跳转参数。
可以通过代码控制
animator.SetBool(“CanMove”, true);
满足条件时就会走向下一个状态,如下图。
在这里插入图片描述

Any State

代表当前所有状态都可以转向一个,例如死亡,避免出现连线到处都是。
在这里插入图片描述

Has Exit Time:是否有退出时间(是否一定要播放完当前动画才可以切换到下一个)

在这里插入图片描述

如何让两个动画同时播放,例如一边走路一边挥手

我上家公司做模拟休闲游戏,有个厂长巡查,需要走路,挥手,边走路边挥手功能,下面探讨一下如何实现。
1、让美工一共做三个动画,分别是走路,挥手,走路+挥手,但是这样非常繁琐,而且维护起来也麻烦(需要不同状态之间来回切换)。
2、使用多个layer层
在这里插入图片描述
如图所示,Base Layer控制行走,Arm Layer控制厂长挥手,但是需要注意,Arm Layer的权重需要和Base Layer一样,Blending中需要改为Additive,默认是override覆盖重写。
3、使用混合树,下面单独开一个标题讲混合树,但是混合树更适合多种状态之间的平滑处理,而不是同时实现效果。

混合树

1D

在Animator面板中创建BlendTree,先从最简单的1D讲起。
添加一个BlendValue,然后在BlendTree中添加两个行为,最左边是Walk,最右边是Run,动画系统会自动综合。
在这里插入图片描述
也可以在混合树中添加混合树,达到与更多效果综合的效果,我用的不多,此处不再赘述。

2D

2D Directional两个差不多,Freedom比Sample更好用一点,但是需要注意,Freedom中必须要有一个0,0点,即Idle状态。
在这里插入图片描述
如上图所示,目前一共有五个状态,分别是向前、后、左、右跑,还有一个待机,我们可以获取用户输入WASD的坐标,GetAxis方法,将对应的值传给动画组件。
animator.SetInteger();
然后角色就会做对应的动画。
ps:时间的那个图标,改为负数则是向后运动。
另外,设置完动画这里最好选择Velocity XZ,代表由XZ的坐标控制动画切换,对应两个参数。
在这里插入图片描述
在这里插入图片描述
剩下的一个笛卡尔积2D,更加复杂,也适合更多的动画平滑切换,我用的不多,此处不再赘述。

IK反向动力学

简单介绍一下,例如你推门,你给门一个力,相对的门也会给你一个力,他会让你的手臂弯曲,这个就被称之为IK反向动力学。
在这里插入图片描述

    void OnAnimatorIK(int layerIndex)
    {
        {
            //设置位置权重
            animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1f);
            //设置旋转权重
            animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1f);
            animator.SetIKPosition(AvatarIKGoal.RightHand, objPosition.position);
            animator.SetIKRotation(AvatarIKGoal.RightHand, objPosition.rotation);
        }
    }

如上图所示,角色右手受到球的影响,需要注意,需要将layer层的IK Pass勾选上,代码中加上对应的逻辑即可。

动画事件

在这里插入图片描述
找到资源的动画,在Event这一栏可以添加事件,选择脚本,与脚本的方法即可。选择固定的某一帧执行。
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值