60.3D动画2D混合

60.3D动画-动画2D混合


60.1 知识点

1D混合和2D混合

  • 1D混合是用一个参数控制动画的混合,之所以叫1D是因为一个参数可以看做是1维线性的
  • 2D混合你可以简单理解是用两个参数控制动画的混合,之所以叫2D是因为两个参数可以看做是2维平面xy轴的感觉

2D混合的种类

  • 2D Simple Directional(2D简单定向模式): 运动表示不同方向时使用,比如向前、后、左、右走。如果只有一个动作用这个。
  • 2D Freeform Directional(2D自由形式定向模式): 同上,运动表示不同方向时使用,但是可以在同一方向上有多个运动,比如向前跑和走。如果一个方向上有走路和跑步用这个。
  • 2D Freeform Cartesian(2D自由形式笛卡尔坐标模式): 运动不表示不同方向时使用,比如向前走不拐弯、向前跑不拐弯、向前走右转、向前跑右转。
  • Direct(直接模式): 自由控制每个节点权重,一般做表情动作等。

2D混合的使用

  • 大体上和1D混合相似,只是多关联了一个参数。关联的动画也多设置了一个预制。拖动蓝色框上的红点就类似与1D混合的红色指针,就是修改参数值查看效果的。也可以拖混合树的进度条查看效果。

总结

  • 前三种方式只是针对动作的不同采用不同的算法来进行混合的。
  • 第四种可以用多个参数进行融合。
  • 混合树中还可以再嵌入混合树,使用上是一致的,根据实际情况选择性使用。

60.2 知识点代码

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

public class Lesson60_3D动画_动画2D混合 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 1D混合和2D混合
        //1D混合是用一个参数控制动画的混合,之所以叫1D是因为一个参数可以看做是1维线性的
        //2D混合你可以简单理解是用两个参数控制动画的混合,之所以叫2D是因为两个参数可以看做是2维平面xy轴的感觉
        #endregion

        #region 知识点二 2D混合的种类
        //1.2D Simple Directional     2D简单定向模式  运动表示不同方向时使用 比如向前、后、左、右走
        //2.2D Freeform Directional   2D自由形式定向模式   同上 运动表示不同方向时使用 但是可以在同一方向上有多个运动 比如向前跑和走
        //3.2D Freeform Cartesian     2D自由形式笛卡尔坐标模式  运动不表示不同方向时使用 比如向前走不拐弯 向前跑不拐弯 向前走右转 向前跑右转
        //4.Direct                    直接模式   自由控制每个节点权重,一般做表情动作等
        #endregion

        #region 知识点三 2D混合的使用

        #endregion

        #region 总结
        //前三种方式只是针对动作的不同采用不同的算法来进行混合的
        //第四种可以用多个参数进行融合

        //混合树中还可以再嵌入混合树,使用上是一致的,根据实际情况选择性使用
        #endregion
    }
}

60.3 练习题

通过2D混合树制作前进后退左右旋转的功能

创建animator文件并关联模型。添加混合树状态,关联好多个剪辑文件,设置阈值。

代码输入设置参数

private Animator animator;

void Start()
{
    animator = this.GetComponent<Animator>();
}

void Update()
{
    animator.SetFloat("x", Input.GetAxis("Horizontal"));
    animator.SetFloat("y", Input.GetAxis("Vertical"));
}

60.4 练习题代码

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

public class Lesson60_练习题 : MonoBehaviour
{
    #region 练习题一
    //通过2D混合树制作前进后退左右旋转的功能

    private Animator animator;

    void Start()
    {


        animator = this.GetComponent<Animator>();

    }

    void Update()
    {
        animator.SetFloat("x", Input.GetAxis("Horizontal"));
        animator.SetFloat("y", Input.GetAxis("Vertical"));
    }

    #endregion
}


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

×

喜欢就点赞,疼爱就打赏