首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Unity动画☀️一、通过 StringToHash ,控制Animator

Unity动画☀️一、通过 StringToHash ,控制Animator

作者头像
星河造梦坊官方
发布2024-08-14 16:04:53
发布2024-08-14 16:04:53
52400
代码可运行
举报
运行总次数:0
代码可运行

🟥 本节效果展示

下面是本节要实现的目标:

  • 完成场景的搭建
  • 通过键盘,控制人物从静止状态,到走路,再到跑起来
  • 讲述控制物体运动的两种方式

🟧 Unity基础配置

这儿我们完成资源的导入,并打开场景。

模型的下载

模型:传送门

将package拖入Unity,完成导入package

双击,打开文件夹中的 Origin 场景即可。

下图所示Origin场景为初始场景,我们可以从这个场景开始做起。

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

🟨 配置人物的Animator组件

下面我们完成将我们要控制的人物放置到场景中,

并对他身上的Animator进行配置,方便我们使用代码,控制Animator,从而控制这个人物做出各种动作。

1️⃣将人物放置到场景

在 Project - Character 文件夹下,

将 DefaultAvatar 拖到层级面板 Hierarchy 即可

2️⃣ 创建AnimatorController

作用: AnimatorController中可包含很多 AnimationClip, AnimationClip是一个个的动画片段,控制模型这样运动。AnimatorController就像一个容器。 AnimationClip可以是美术同学做的,也可以是我们程序自己在Unity中做的动画。

若你的要控制的对象身上的Animator组件中,Controller属性中没有AnimatorController,就需要完成下面的操作:

创建AnimatorController:

在Project面板,右键 Create,创建AnimatorController。

将AnimatorController绑定在人物身上

拖动该 AnimatorController ,放置到拖到层级面板人物的 Animator 上

3️⃣ 配置AnimatorController

上面我们了解了,AnimatorController中有AnimationClip,

AnimationClip可由美术同学创建,也可由程序在Unity中创建。

下面我们使用的是美术同学做好的AnimationClip。

🚩 添加AnimationClip

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

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

🚩 设置切换AnimationClip的条件

unity播放Animator中的动画,有两种方式:

  • 直接播放AnimationClip
  • 通知Animator,告诉Animator可以切换到另一个AnimationClip

第二种方法和第一种方法相比,第二种方法动画会有融合,动画切换不生硬。

做游戏一般用第二种方法。

但我们要是做不那么需要柔和的效果(比如PLC),第一种方法足够了。

🟩 柔和控制Animator的方法

我们在Animator中设置参数,并设置动画片段切换的条件。

我们用代码改变这些参数,Animator就会自行完成动画片段的切换。

这样做两个Animation切换时会融合一部分,会使得动画切换更柔和。

1️⃣ 设置动画切换的连线

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

注意箭头方向。

比如Idle和Run的连线,箭头是指向Idle的,并且只有这一条线,没有从Idle指向Run的。

这意味着Run可以切换到Idle,Idle只能先切换到Walk,再切换到Run。

2️⃣ 设置动画切换的参数

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

这些参数下面我们会配置到上面的连线上。

动画只能满足了这些条件,才能切换。否则不能随意切换。

比如Idle到Walk,Speed的数值只有到0.5,才能切换到Walk。

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

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

代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
using UnityEngine;

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

    void Start()
    {
        anim = GetComponent<Animator>();
    }

    void Update()
    {
        anim.SetFloat(speedID, Input.GetAxis("Vertical"));
    }
}
5️⃣ 代码实现人物奔跑

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

代码语言:javascript
代码运行次数:0
运行
复制
using UnityEngine;

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

    void Start()
    {
        anim = GetComponent<Animator>();
    }

    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);
        }
    }
}

🟦 直接控制Animator的方法

这可用在不需要那么柔和显示动画效果上,

方法比 "四方法" 简单,容易操作。

当我们在Animator中配置好Animation后,Animator的配置部分就完成了。

不需要连线、设置参数什么的。

接下来只需要通过代码,就可以控制Animator了。

示例代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
private void Start()
{
    //Walk为你想播放的Animation动画名称
    GetComponent<Animator>().Play("Walk");
}

大家还有什么问题,欢迎在下方留言!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🟥 本节效果展示
  • 🟧 Unity基础配置
  • 🟨 配置人物的Animator组件
    • 1️⃣将人物放置到场景
    • 2️⃣ 创建AnimatorController
    • 3️⃣ 配置AnimatorController
      • 🚩 添加AnimationClip
      • 🚩 设置切换AnimationClip的条件
  • 🟩 柔和控制Animator的方法
    • 1️⃣ 设置动画切换的连线
    • 2️⃣ 设置动画切换的参数
    • 3️⃣ 配置clip切换的条件
    • 4️⃣ 代码实现人物行走
    • 5️⃣ 代码实现人物奔跑
  • 🟦 直接控制Animator的方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档