unity学习笔记

2023-12-13 07:00:27

一、动画图层

概述:动画图层允许你组织和混合多个动画,使其在不同的层级中进行独立控制。

? ? ? ? ? ?Animator Controller中可以包含多个动画图层,每个图层可以独立控制一组动画。

? ? ? ? ? ?每个动画图层都有一个权重,用于控制该层对最终混合的动画产生的影响程度。

1.三个默认状态:

Entry(进入状态):

作用:Entry是状态机中的默认起始状态,表示进入状态机时的初始状态。

用途:Entry状态中可以定义一些进入状态机时需要执行的初始化逻辑,例如设置初始参数或播放初始动画。

注意事项:只能有一个Entry状态,状态机进入时会自动转换到该状态。

Any State(任意状态):

作用:Any State是一个特殊的状态,它可以作为过渡条件的来源状态。任何从AnyState发起的过渡都不需要特定的条件,可以在任何时候触发。

用途:主要用于实现一些在任何状态下都需要执行的逻辑,例如全局的输入检测或通用的过渡。

注意事项:在从Any State发起的过渡中,不需要指定具体的条件,它会在任何状态下都触发。

Exit(退出状态):
作用:Exit是状态机中的默认结束状态,表示退出状态机时的状态。

用途:在Exit状态中可以定义一些退出状态机时需要执行的清理逻辑,例如保存状态、停止动画等

注意事项:只能有一个Exit状态,状态机退出时会自动转换到该状态。

2.子状态机

在动画器中可以创建子状态机,可以将类型相同的动画发在一个状态机中,子状态机之前可以相互过渡

3.权重

每个动画图层都有一个权重属性,该属性控制层对最终混合的动画的影响程度。通过脚本或动画状态机中的参数可以调整权重。

示例说明:现在新创建一个图层,为其添加一个手臂挥舞的动画,在旧的图层里面有一个站立的动画。由于新建的图层权重为0,当运行游戏时会只播放旧层的动画。

当把新的图层的权重调节到0.5时,当运行游戏时这两个动画都不会播放完整。

当把新图层的权重调节到1.0时,运行游戏时会完全覆盖旧的动画。

4.遮罩

图层遮罩可以更加精细地控制角色或对象的动画行为,使得在不同的图层上可以有不同的动画效果。比如a图层的中有跑步动画,b图层中挥手动画,现在希望挥手只是作为手臂上的挥手用b图层控制,而跑步动画作用于身体其他地方用a图层控制,要做到这个效果就得使用图层遮罩。

示例:

在项目目录下创建一个骨骼遮罩Avatar,其中绿色表示做动画的区域,默认是所有区域都做动画,点击绿色区域会切换为红色,红色表示该区域不做动画。

为了达到要求只需要将手臂设置为绿色,意思是只做手臂上的动画

使用方式,将这个创建的遮罩文件拖拽到对应图层设置中的遮罩区域。

这样当游戏运行时,手臂上会执行挥手的动画,其他部位执行跑步的动画,效果是一边跑步一边挥手。

二、反向动力学

在Unity中,反向动力学(Inverse Kinematics,简称IK)是一种计算手段,用于逆向求解骨骼系统中末端效应器(End Effector)的位置,以实现更自然、更符合预期的角色动画。反向动力学通常用于处理角色的手、脚、头部等部位的动作,以便它们能够正确地跟随目标位置。

示例说明:想让玩家头部一直看向某一个物体。

想要使用这个反向动力学,就必须在对应的图层中打开IK处理

在线场景中有一个球体,在人物的脚本里面获取这个球体
?public Transform Sphere;

然后使用 OnAnimatorIK (int layerIndex)方法,当要使用IK事件,就要把其相关的写在这个方法里。

?private void OnAnimatorIK(int layerIndex)
? ? {
? ? ? ? //设置头部
? ? ? ? animator.SetLookAtWeight(1);
? ? ? ? animator.SetLookAtPosition(Sphere.position);
? ? }

运行游戏后,无论人物如和移动,头部都会看向球体,直到无法看见

文章来源:https://blog.csdn.net/2301_79022588/article/details/134840971
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。