57.3D动画使用

  1. 57.3D动画-3D动画的使用
    1. 57.1 知识点
      1. 使用导入的3D动画
        1. 将模型拖入场景中,直接拖模型文件
        2. 为模型对象添加Animator脚本
        3. 为其创建Animator Controller动画控制器(状态机)
        4. 将想要使用的相关动作Animation文件拖入Animator Controller动画控制器(状态机)窗口
        5. 在Animator Controller动画控制器(状态机)窗口编辑动画关系(使用之前学习的状态机相关知识)
        6. 代码控制状态切换
        7. 注意,假如发现没有用代码设置,对象会自己通过动画进行实际移动,那么可以检查对应模型文件的Animation页有没有关联根移动,假如不想所有动画的移动的话点开场景中的模型对象的Animator组件取消勾选应用根运动,这样播动画的时候不会有任何实际移动
      2. Animator窗口中每个动画状态设置相关参数
        1. Motion:分配给此状态的动画剪辑
        2. Speed 速度:动画的默认速度
        3. Multiplier 乘数:控制速度的乘数,如果要使用需要勾选的Parameter选中配合的参数float类型
        4. Motion Time:运动的时间,如果要使用需要勾选的Parameter选中配合的参数float类型
        5. Mirror 镜像:是否为状态生成镜像,仅适用于人形动画,如果要配合参数使用选中旁边的Parameter关联参数,参数是bool类型
        6. Cycle Offset 周期偏移:循环偏移时间,如果要配合参数使用选中旁边的Parameter关联参数,参数是float类型。比如填0.5,动画就会从中间一般开始播放
        7. Foot IK:是否遵循Foot IK,适用于人形人形动画
        8. Write Defaults:AnimatorStates 是否为其运动执行未动画化的属性写回默认值。默认勾选就行
        9. Solo:仅播放该过渡 条件都满足的动画优先切换选择了Solo动画
        10. Mute:禁用过渡 就算条件满足也不切换
        11. Solo和Mute如果一起选择,Mute优先执行
        12. Add Behaviour:添加状态机行为脚本,之后会专门讲解
      3. Animator窗口中连线设置相关参数
        1. 动作和动作之间连线
          1. 连线名
          2. Has Exit Time 是否有退出时间
          3. Exit Time 退出时间
          4. Fixed Duration 固定持续时间
          5. Transition Duration(s/%) 过渡持续时间
          6. Transition Offset 过渡偏移
          7. Interruption Source 中断源
          8. Ordered Interruption 有序中断
          9. Conditions:过渡条件
        2. AnyState和动作之间连线
      4. 总结
    2. 57.2 知识点代码
    3. 57.3 练习题
      1. 请使用资料区的模型,设置它的状态机,我们可以通过W键控制其前进,S键控制其后退,空格键控制其跳跃,AD键可以控制其转向
        1. 把模型文件拖拽到场景,创建一个Animator文件和他关联
        2. 拖入Animation文件,设置连线,注意因为是AnyState的连线,要取消切换到自己的勾选。可以拖拽同一个文件进来,改名字后,往后退动画可以把播放速度改成-1,就反向播放了。添加参数,设置连线条件。
        3. 在动画添加一个关键帧,准备进行函数的绑定
        4. 创建脚本,添加输入切换动画的逻辑
        5. 注意,发现动画参数设置不了的原因,可能和动画模型参数的曲线有关,可能设置了同名的参数导致切换不了
    4. 57.4 练习题代码

57.3D动画-3D动画的使用


57.1 知识点

使用导入的3D动画

将模型拖入场景中,直接拖模型文件

为模型对象添加Animator脚本

为其创建Animator Controller动画控制器(状态机)

将想要使用的相关动作Animation文件拖入Animator Controller动画控制器(状态机)窗口

注意不要直接拖大的,可以展开来拖下面三角形形状的文件

在Animator Controller动画控制器(状态机)窗口编辑动画关系(使用之前学习的状态机相关知识)

代码控制状态切换

注意,假如发现没有用代码设置,对象会自己通过动画进行实际移动,那么可以检查对应模型文件的Animation页有没有关联根移动,假如不想所有动画的移动的话点开场景中的模型对象的Animator组件取消勾选应用根运动,这样播动画的时候不会有任何实际移动


Animator窗口中每个动画状态设置相关参数



  • 我们可以选中状态机窗口中的某一个状态为其设置相关参数
  • 我们可以称之为动画状态设置
  • 主要设置的是当前状态的播放速度等等细节

Motion:分配给此状态的动画剪辑

Speed 速度:动画的默认速度

Multiplier 乘数:控制速度的乘数,如果要使用需要勾选的Parameter选中配合的参数float类型


Motion Time:运动的时间,如果要使用需要勾选的Parameter选中配合的参数float类型



一般是0-1的数字,用了这个参数动画就不会自己动了,要设置参数值才会动。比如设置成0.1,动画就卡在进度播放到0.1的位置,假如在Update不断加大参数值可以一帧一帧播完动画

Mirror 镜像:是否为状态生成镜像,仅适用于人形动画,如果要配合参数使用选中旁边的Parameter关联参数,参数是bool类型

Cycle Offset 周期偏移:循环偏移时间,如果要配合参数使用选中旁边的Parameter关联参数,参数是float类型。比如填0.5,动画就会从中间一般开始播放

Foot IK:是否遵循Foot IK,适用于人形人形动画

Write Defaults:AnimatorStates 是否为其运动执行未动画化的属性写回默认值。默认勾选就行

Solo:仅播放该过渡 条件都满足的动画优先切换选择了Solo动画

Mute:禁用过渡 就算条件满足也不切换

Solo和Mute如果一起选择,Mute优先执行

Add Behaviour:添加状态机行为脚本,之后会专门讲解

Animator窗口中连线设置相关参数

  • 我们可以选中状态机窗口中的某一条箭头为其设置相关参数
  • 我们可以称之为动画过渡设置
  • 主要设置的是从一个状态切换到另一个状态时的表现效果和切换条件

动作和动作之间连线


连线名


可以在这里为动画过渡改名,如果不改对应的名字就是”某一状态名”->”某一状态名”,一般不改

Has Exit Time 是否有退出时间

如果勾选,当切换动画时,动画一定是播放到下方的Exit Time(百分比)的时间时才过渡到下一个动画,没什么特殊需求的话像立刻切动画就不勾选这个选项

Exit Time 退出时间

当选择上方的Has Exit Time时,该值决定了过渡生效的确切时间。该值可以大于1,如果小于1,比如0.85,表示当动画播放到了85%的动画时,就会过渡。如果大于1,比如4.5,那么动画将循环4.5次后过渡到下一个动画

Fixed Duration 固定持续时间

选中后,下方的Trnaition Duration过渡持续时间将以秒为单位解读过渡时间,如果不选中,则以百分比解读过渡时间

Transition Duration(s/%) 过渡持续时间


相当于从该状态切换到下一状态的过渡动画持续的时间,对应下方两个蓝色箭头包裹区域

Transition Offset 过渡偏移


过渡到目标状态的起始播放的时间偏移。如果是0则从要切换到的目标状态开头开始播放,如果是0.5则从要切换到的目标状态的一半开始播放,你可以理解为切入下一个状态的切入点

Interruption Source 中断源


该过渡中断的情况

  • None:不在添加任何过渡
  • Current State:将当前状态过渡排队
  • Next State:使下一个状态的过渡进行排队
  • Current State Then Next State:将当前状态的过渡和下一个状态的过渡都依次排队
  • Next

State Thne Current State:将下一状态的过渡和当前状态的过渡依次排队

Ordered Interruption 有序中断

当前过渡是否可在不考虑顺序的情况下被其它过渡中断

  • 选中时,找到有效过渡或当前过渡时,会中断
  • 不选中时,找到有效过渡,会中断
Conditions:过渡条件

如果没有过渡条件,只会考虑Exit Time

AnyState和动作之间连线


  • Can Transition To self:是否可以过渡到自己 一般取消勾选
  • Preview source state:预览各种过渡状态,可以查看从任意状态切换到当前状态的过渡效果

总结

  • 注意点
    • Has Exit Time是否启用 如果希望瞬间切换动画不需过多等待,取消该选项
    • Can Transition To self是否启用 如果希望自己不要打断自己,取消该选项

57.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson57_3D动画_3D动画的使用 : MonoBehaviour
{    
    void Start()
    {
        #region 知识点一 使用导入的3D动画
        //1.将模型拖入场景中
        //2.为模型对象添加Animator脚本
        //3.为其创建Animator Controller动画控制器(状态机)
        //4.将想要使用的相关动作 拖入Animator Controller动画控制器(状态机)窗口
        //5.在Animator Controller动画控制器(状态机)窗口编辑动画关系(使用之前学习的状态机相关知识)
        //6.代码控制状态切换
        #endregion

        #region 知识点二 Animator窗口中每个动画状态设置相关参数
        //我们可以选中状态机窗口中的某一个状态为其设置相关参数
        //我们可以称之为动画状态设置
        //主要设置的是 当前状态的播放速度等等细节
        #endregion

        #region 知识点三 Animator窗口中连线设置相关参数
        //我们可以选中状态机窗口中的某一条箭头为其设置相关参数
        //我们可以称之为动画过渡设置
        //主要设置的是 从一个状态切换到另一个状态时 的表现效果和切换条件
        #endregion

        #region 总结
        //注意点
        //1.Has Exit Time是否启用 如果希望瞬间切换动画不需过多等待,取消该选项
        //2.Can Transition To self是否启用 如果希望自己不要打断自己,取消该选项
        #endregion
    }

}

57.3 练习题

请使用资料区的模型,设置它的状态机,我们可以通过W键控制其前进,S键控制其后退,空格键控制其跳跃,AD键可以控制其转向

把模型文件拖拽到场景,创建一个Animator文件和他关联

拖入Animation文件,设置连线,注意因为是AnyState的连线,要取消切换到自己的勾选。可以拖拽同一个文件进来,改名字后,往后退动画可以把播放速度改成-1,就反向播放了。添加参数,设置连线条件。

在动画添加一个关键帧,准备进行函数的绑定

创建脚本,添加输入切换动画的逻辑

// 存储机器人动画组件的变量
private Animator animator;

// 控制机器人旋转的速度(每秒360度)
public float roundSpeed = 30;

void Start()
{
    // 获取机器人上的 Animator(动画控制器)组件
    animator = this.GetComponent<Animator>();
}

void Update()
{
    // 根据垂直方向的上下键,切换机器人的奔跑和后退动画
    animator.SetInteger("Speed", (int)Input.GetAxisRaw("Vertical"));

    // 按下空格键,控制机器人跳跃
    if (Input.GetKeyDown(KeyCode.Space))
        animator.SetBool("Jump", true);

    // 根据水平方向的左右键,控制机器人旋转
    this.transform.Rotate(Vector3.up, Input.GetAxisRaw("Horizontal") * roundSpeed * Time.deltaTime);
}

// 跳跃完成后触发的事件函数
// 在Animator控制器中定义了此事件,在机器人跳跃动画播放期间触发
public void JumpOver()
{
    animator.SetBool("Jump", false);
}

注意,发现动画参数设置不了的原因,可能和动画模型参数的曲线有关,可能设置了同名的参数导致切换不了


57.4 练习题代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson57_练习题 : MonoBehaviour
{
    #region 练习题一
    // 本练习的主要目的是通过机器人的控制与动画来练习状态机的操作和使用。

    // 机器人具有跑、跳、转向等功能,可以通过键盘来控制机器人的各种动画。

    // 存储机器人动画组件的变量
    private Animator animator;

    // 控制机器人旋转的速度(每秒360度)
    public float roundSpeed = 30;

    void Start()
    {
        // 获取机器人上的 Animator(动画控制器)组件
        animator = this.GetComponent<Animator>();
    }

    void Update()
    {
        // 根据垂直方向的上下键,切换机器人的奔跑和后退动画
        animator.SetInteger("Speed", (int)Input.GetAxisRaw("Vertical"));

        // 按下空格键,控制机器人跳跃
        if (Input.GetKeyDown(KeyCode.Space))
            animator.SetBool("Jump", true);

        // 根据水平方向的左右键,控制机器人旋转
        this.transform.Rotate(Vector3.up, Input.GetAxisRaw("Horizontal") * roundSpeed * Time.deltaTime);
    }

    // 跳跃完成后触发的事件函数
    // 在Animator控制器中定义了此事件,在机器人跳跃动画播放期间触发
    public void JumpOver()
    {
        animator.SetBool("Jump", false);
    }
    #endregion
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏