目录
零.简介
在 Unity 中,动画控制器的过渡是实现不同动画状态之间平滑切换的关键部分。
一、过渡的概念
过渡是指从一个动画状态切换到另一个动画状态的过程。在动画控制器中,过渡可以基于各种条件触发,例如动画参数的变化、时间的流逝、事件的发生等。通过设置过渡条件和过渡属性,可以控制动画的切换方式和过渡时间,以实现自然流畅的动画效果。
二、过渡的创建
- 在动画控制器编辑器中,选择一个源动画状态,然后右键点击并选择 “Make Transition”(创建过渡)。
- 将鼠标指针拖动到目标动画状态上,释放鼠标即可创建一个过渡。
三、过渡的属性
- 过渡条件:过渡条件是触发过渡的条件。可以通过设置动画参数的阈值、时间的流逝、事件的发生等条件来控制过渡的触发。例如,可以设置一个 “速度” 参数,当角色的速度超过一定值时,触发从行走状态到奔跑状态的过渡。
- 过渡时间:过渡时间是指从源动画状态切换到目标动画状态所需的时间。可以设置过渡时间来控制动画的切换速度,使其更加自然流畅。过渡时间可以是固定的时间值,也可以是基于动画参数的动态时间值。
- 过渡曲线:过渡曲线用于控制过渡的插值方式。可以选择不同的过渡曲线类型,如线性、平滑、加速、减速等,以实现不同的过渡效果。过渡曲线可以在动画控制器编辑器中进行可视化编辑,以便更好地调整过渡的效果。
- 过渡中断:过渡中断是指在过渡过程中是否可以被其他过渡中断。可以设置过渡中断属性来控制过渡的中断行为。例如,可以设置过渡中断为 “允许中断”,这样在过渡过程中如果满足其他过渡条件,就可以中断当前过渡并切换到新的动画状态。
创建参数
点击参数页面
选择参数类型
我这里选择了bool类型
命名为Jump,后面的这个是默认状态false,勾选上就是默认状态true
给过度加参数
点击过渡,然后点击这里的加号
选择过渡的条件
点击加号之后,选择刚才创建的bool.默认为true的情况下,才会运行
这时候我们点击运行游戏,就会发现人物动作不在调转到跳跃动画了
四、过渡的触发方式
- 基于动画参数:可以通过设置动画参数的变化来触发过渡。例如,可以设置一个 “速度” 参数,当角色的速度超过一定值时,触发从行走状态到奔跑状态的过渡。可以在脚本中通过修改动画参数的值来触发过渡。
- 基于时间:可以设置过渡在一定时间后自动触发。例如,可以设置一个过渡在 2 秒后自动从站立状态切换到行走状态。
- 基于事件:可以通过触发特定的事件来触发过渡。例如,可以在角色的攻击动画中设置一个事件,当攻击动画播放完成时,触发从攻击状态切换到站立状态的过渡。可以在脚本中通过触发事件来触发过渡。
这里还是用是上一步创建的bool参数.也可以根据前面的步骤来做一个跑步的动画.创建一个int或float类型的参数,然后用大小来判断是否过渡动画.用户按下键位要跑的时候,代码更改这里的参数大小,来实现动画的过渡.
这里还是继续bool的跳跃,经过前面现在人物已经默认不自动切换到跳跃了.这里我们代码控制下.
五. 代码控制过渡
1.API介绍
在 Unity 中,Animator
类的 SetBool
、SetInteger
和 SetFloat
等方法是用于设置动画参数以控制动画状态机的重要 API。
a、SeBool
方法
SetBool
方法用于设置布尔类型的动画参数。这个参数可以在动画控制器中作为过渡条件或用于控制动画的某些特性。
animator.SetBool("IsRunning", true);
上述代码将名为 “IsRunning” 的布尔参数设置为 true
。如果在动画控制器中有基于这个参数的过渡条件,那么可能会触发相应的动画过渡。
b、SetInteger
方法
SetInteger
方法用于设置整数类型的动画参数。
例如:
animator.SetInteger("AttackType", 1);
这里将名为 “AttackType” 的整数参数设置为 1。可以根据不同的整数值在动画控制器中进行不同的动画状态切换或控制。
c、SetFloat
方法
SetFloat
方法用于设置浮点类型的动画参数。
例如:
animator.SetFloat("Speed", 5.0f);
此代码将名为 “Speed” 的浮点参数设置为 5.0。可以利用这个参数来控制动画的速度、强度等特性,比如根据角色的移动速度设置这个参数来实现不同速度下的动画过渡。
2.实例
首先获取组件,
private Animator animator;
void Start()
{
animator = GetComponent<Animator>();
}
然后获取键盘输入来改吧参数
if (Input.GetKeyDown(KeyCode.Space))
{
animator.SetBool("Jump",true);
}
3.运行效果
按一下空格键,等前面的动作走完就可以跳跃了.
4.完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AbunatorCon : MonoBehaviour
{
private Animator animator;
// Start is called before the first frame update
void Start()
{
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
animator.SetBool("Jump",true);
}
}
}
这个只是例子代码.实际用的时候需要再加一下,判断落到地面再把这个bool的jump参数设置为false.
六、过渡的优化
- 合理设置过渡条件:过渡条件应该根据游戏的需求和逻辑进行合理设置。避免设置过于复杂的过渡条件,以免影响性能。同时,过渡条件应该具有明确的触发逻辑,以便在游戏中能够准确地控制动画的切换。
- 优化过渡时间:过渡时间应该根据动画的特点和游戏的需求进行合理设置。过长的过渡时间可能会导致动画切换不流畅,影响游戏体验;而过短的过渡时间可能会导致动画切换过于突然,也会影响游戏体验。可以通过调整过渡时间和过渡曲线来优化动画的切换效果。
- 减少过渡数量:过多的过渡可能会导致动画控制器变得复杂,影响性能。应该尽量减少过渡的数量,只在必要的情况下设置过渡。可以通过合并相似的动画状态或使用动画混合来减少过渡的数量。
- 测试和调试:在设置过渡后,应该进行充分的测试和调试,以确保动画的切换效果自然流畅。可以使用 Unity 的动画预览窗口和调试工具来检查过渡的触发条件、过渡时间和过渡曲线等属性,以便及时调整和优化过渡的效果。