Unity动画丨1、通过 StringToHash ,控制人物前进、奔跑

大家好,我是SKODE。

小提示:选中左侧目录,可快速找到所需内容

本系列博客地址:传送门

 

一、效果展示

 

 

二、基础配置

1、模型的下载

传送门

场景介绍:

Origin为初始场景,我们可以从这个场景开始一步步往下做。

AnimationDemo为已经实现所有功能的场景。

Unity动画丨1、通过 StringToHash ,控制人物前进、奔跑_第1张图片

 

2、打开场景

a、将package拖入Unity,完成导入package

b、打开 Origin 场景即可

Unity动画丨1、通过 StringToHash ,控制人物前进、奔跑_第2张图片

 

 

二、模型的骨骼模式Rig

模型运动起来,是Unity通过Unity的内置骨骼,去驱动模型的骨骼进行运动。

但Unity内置骨骼也有好几种模式的骨骼,因此要设置模型应该用哪种骨骼模式来驱动。

本篇博客主要讲述通过 StringToHash ,控制人物前进、奔跑。因此分享的模型已配置完毕。后面博客我们详解这部分内容。

详解可看这篇博客:传送门

 

 

三、人物配置

1、将人物放置到场景

在 Project - Character 文件夹下,将 DefaultAvatar 拖到层级面板 Hierarchy 即可

 

2、创建AnimatorController

作用:

AnimatorController中可包含很多 AnimationClip,AnimationClip是一个个的动画片段,控制模型这样运动。AnimatorController就像一个容器。

操作:

a、Project,右键 Create-AnimatorController

b、将该 AnimatorController 拖到层级面板人物的 Animator 上

Unity动画丨1、通过 StringToHash ,控制人物前进、奔跑_第3张图片

 

3、配置AnimatorController

双击 上面创建的 AnimationController,进入AnimationController的面板

a、添加clip

将Project中 DefaultAvatar@Idle、DefaultAvatar@Walk、DefaultAvatar@Run三个动画下的 AnimationClip,都拖到 AnimationController 面板。

Unity动画丨1、通过 StringToHash ,控制人物前进、奔跑_第4张图片

 

b、clip连线

右键各个clip,Make Transition,完成下图所示连线

注意箭头方向。

Unity动画丨1、通过 StringToHash ,控制人物前进、奔跑_第5张图片

 

c、添加Parameters

如图所示,添加 float类型的 Speed 、bool 类型的 isSpeedup

Unity动画丨1、通过 StringToHash ,控制人物前进、奔跑_第6张图片

 

d、配置clip切换条件

  • 下方展示了Idle-Walk的切换条件,是Speed>0.1。Walk-Idle的切换条件,是Speed<0.1
  • 配置 Walk-Run切换条件,是 isSpeedup为true。
  • 配置 Run-Walk切换条件,是 isSpeedup为false。
  • 取消所有连线的 Has Exit Time。若勾选,则意味着,只有当播放完该片段,才能切换到下一片段。而我们想立刻切换,当然要取消勾选。

Unity动画丨1、通过 StringToHash ,控制人物前进、奔跑_第7张图片

 

 

四、实现人物行走

创建如下脚本,挂载到层级面板的 DefaultAvatar 身上,运行游戏,按下W看看效果吧。

代码如下: 

using UnityEngine;

public class Player : MonoBehaviour
{
    Animator anim;
    int speedID = Animator.StringToHash("Speed");

    void Start()
    {
        anim = GetComponent();
    }

    void Update()
    {
        anim.SetFloat(speedID, Input.GetAxis("Vertical"));
    }
}

 

 

五、完成人物奔跑

将上方创建的player脚本,改为如下内容,运行游戏,按下 Shift+W,看看效果吧。

using UnityEngine;

public class Player : MonoBehaviour
{
    Animator anim;
    int speedID = Animator.StringToHash("Speed");
    int isSpeedupID = Animator.StringToHash("isSpeedup");

    void Start()
    {
        anim = GetComponent();
    }

    void Update()
    {
        anim.SetFloat(speedID, Input.GetAxis("Vertical"));

        if (Input.GetKeyDown(KeyCode.LeftShift))
        {
            anim.SetBool(isSpeedupID, true);
        }

        if (Input.GetKeyUp(KeyCode.LeftShift))
        {
            anim.SetBool(isSpeedupID, false);
        }
    }
}

 

 

一起成长,

我是SKODE。

 

你可能感兴趣的:(#,动画系统)