Unity2D游戏制作入门 | 09(之人物动画制作)

news2024/11/24 19:53:23

上期链接:Unity2D游戏制作入门 | 08-CSDN博客

人物走路动画逻辑补充(该帖没有的内容,我给补充了请先看完这帖,再去看补充):人物按下shifit走路动画设定09(第九期先行补充)

上期我们聊到物体的物理环境检测和Gizmos的绘制,然后也解决了无限跳跃和粘墙上的问题。这期我们来看人物动画的制作,比如你在跑步那么人物应该要有跑步的动画,然后人物跑步动画配合你的速度要看起来变得更正常一些em…。

    private Animator anim;//创建好这个组件变量后,如果不知道如何通关代码控制组件,可以去看代码手册
    private Rigidbody2D rb;//这个2D不能忽略,不然不报错但是人物跑不起来。

    private void Awake()
    {
        anim = GetComponent<Animator>();
        rb= GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        SetAnimatons();//每帧时时检测,判断是否需要切换动画。
    }

    public void SetAnimatons()//需要做很多动画的切换,我们用这个函数来执行所有的动画切换。
    {
        anim.SetFloat("velocityX",math.abs(rb.velocity.x));
    
    }

正文:

制作人物动画,其实也是制作帧动画我们要了解Animator动画控制器,以及Animation动画。

在之前我们导入的素材中,就有人物动画的指南(guid)。在这些图片当中分别描述了哪些是什么动作(如有4帧明确了是用来做跑步动画的,到时你就全部导入即可),然后之前切割的人物要注意是以人物脚底中心为锚点。
在这里插入图片描述

我们先给人物添加新的组件,如下图的Animator(想对于Animator这个组件有更深入的了解,请看在线的官方手册),如果你在后面做好,运行游戏你可以打开并观察人物的sprite randerer下的sprite,它会切换渲染的图片(切换帧动画)。
在这里插入图片描述

我们除了人物动画,也要有敌人的动画。我们创建独立的文件来管理我们的人物动画(Animations动画集合)如果**你有许多的player,**你需要在Player目录下再创建和管理新的文件。
在这里插入图片描述

先给人物组件动画控制器加入刚刚创建的动画player,然后在window下开Animator动画控制器。

在这里插入图片描述

先说一下动画编辑,上方有三种系统默认给的状态:Entry是动画的进入,Exit是动画的退出,Any State是任何状态下都可以执行的动画。然后下面是创建新的动画文件,这里需要说一下,只有你某个GameObject身上的Animator组件挂载了动画控制器,当你点击那个GameObject,才会出现下面Animation的控制界面。比如我点击了Player我才能创建新的动画文件,如果我不点我的Create这个按钮是不亮的即不可编辑的。拖拽Animator的页面用滚轮键得一直按才能拖动,滚轮可放大缩小。

在这里插入图片描述

我们在player下保存新建的动画文件,人物是蓝色所以我们取名为蓝色,然后这是一个人物闲置(idle闲置之意,即站在原地)的动画。到了这里你是不是觉得文件 创建得太多了?我也是这么觉得,所以我们先捋一下思路,

我们给人物挂载动画控制器组件 -> 单独创建管理所有物体动画的文件 (根据需要的数量是否增加子文件夹) -> 将动画控制器拖拽到动画控制器组件中 -> 每个动画(动作)在创建一个小的文件去链接人物的动画控制器player这个过程确实有点绕,但是你可以这样直白的理解,有了组件,有了外部文件(动画控制器),它们可以形成一个联系,最后就好像这个组件有了许多小的功能,举例Python就像一个大类有许多小的方法供我们使用(也就是被调用了),动画也是这样的,只要触发一个条件,人物的动画就能被触发。
在这里插入图片描述

拖拽这前六张进去,如果你觉得不够直观就给图片改名这样能方便你找到它们(先点击一个图片再按下shift键再点击一张图片可以一个区域的图片帮你选择完)。

在这里插入图片描述

我们来到Scene窗口点击下面的播放键进行动画的查看,如果觉得动得太快,调节采样率Samples为10左右可能会比较合适。如果看不到采样率就右边下方的三个选项进行一个samples的显示,修改采样率记得按下回车键传入你的修改。**每次预览完后要点击console下的Previwe回到最初的样子。**运行游戏可以看到人物在抖动…。

在这里插入图片描述

ps:视频中的UP设置重力为4施加的力为16.5是因为这样可以跳到三格高的平台上,这些事情 是由策划是弄的,我们先忽略这些事情。

点击这里新建新的动画文件。
在这里插入图片描述

添加14到21作为跑步动画,
在这里插入图片描述

对每一个单元(也称为状态),点击右键选第一个选项可以链接到下一个状态(然后规定一些条件就可以切换了)。
在这里插入图片描述

然后点击这根线我们可以看到右边Exit Time是播放xx%就进行切换。然后也可以自己添加判断条件conditions,但是需要在左侧上边的parameters(参数)创创建的参数成为判断条件,一般是布尔值或trigger值。但是我们不需要播放完后就自动切换,我们需要固定条件,比如人物走动了我们才能跑或是干嘛干嘛。

在这里插入图片描述

我们选创建float变量velocityX,代表判断人物X方向上的速度变化,如果=0,我们就是idle(闲置)状态,如果!=0,我们可以跑或是走(即我们启动了其他的动画如跑步,停下时又会切换会idle状态)。
在这里插入图片描述

看下图,然后我们给这条线选择我们的x轴速度的判断条件,设置的值为0.1比较小,是因为计算机判断时不是那么的精准,所以设置了这样的数值,只要大于0.1就表示我要进入跑步的状态了。然后上方其他选择这样设置,不要缓冲时间和过渡,我们希望直接切换动画。

在这里插入图片描述

接下又要写代码来控制我们的Animator,先在Scrip下创建,在拖拽到人物里。打开我们的代码。
在这里插入图片描述

通过anim变量我们可以访问Animator中的每一个变量了。具体的访问操作看代码手册,在API搜Animator,也可以通过组件在线访问它的介绍用法等。

private Animator anim;//创建好这个组件变量后,如果不知道如何通关代码控制组件,可以去看代码手册


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

在这里插入图片描述

根据代码手册的例子,我们应该这样子用(如下图),这样可以用外部的传入的变量来连接到我们Animator里的变量从而能够修改Animator里面的参数变量。

private Animator anim;//创建好这个组件变量后,如果不知道如何通关代码控制组件,可以去看代码手册
    private Rigidbody2D rb;

    private void Awake()
    {
        anim = GetComponent<Animator>();
        rb= GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        SetAnimatons();//每帧时时检测,判断是否需要切换动画。
    }

    public void SetAnimatons()//需要做很多动画的切换,我们用这个函数来执行所有的动画切换。
    {
        anim.SetFloat("velocityX",math.abs(rb.velocity.x));//检测第一个参数名称是否和在Animator时创建的名称是否对应得上,对应不上就无法链接和修改anim内部的变量了。
    
    }

在这里插入图片描述

当我们停止跑步,一定要停下来,所以要切换idle的状态。
在这里插入图片描述

总结:

通过代码我们绑定了animator里面的变量,并把数值同步过去(外界传入的变量,如人物移动时x轴方向上的速度大小( 记得忽略正负号,直接取绝对值 ))。然后给动画之间的切换设置合理参数进行合适性地判断并切换我们想要的动画。熟悉动画组件,会做动作(要会适当调参),动画切换判断逻辑要合理清晰(可多多尝试),在代码中传入判断的参数。 嗯,我觉得再复习和实践下这些内容应该在脑海中会清晰起来。

待解决问题:

1、让人物走起来,可以通过按下特定的键强制进行走路状态。(解决的帖我放在该帖前面了,可以打开看看)

未尽事宜以后可能会补充。

------------------------结束线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1803959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git之解决重复输入用户名和密码(三十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

机器学习--损失函数

损失函数&#xff08;Loss Function&#xff09;&#xff0c;也称为代价函数&#xff08;Cost Function&#xff09;或误差函数&#xff08;Error Function&#xff09;&#xff0c;是机器学习和统计学中的一个重要概念。它用于量化模型预测值与真实值之间的差异。损失函数的值…

Mybatis04-使用注解开发

面向接口编程 面向接口编程 我们之前都学过面向对象编程&#xff0c;也学习过接口&#xff0c;但在真正的开发中&#xff0c;很多时候我们会选择面向接口编程 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大家都遵守共同的标准 , 使得开发变…

makefile与进度条

Linux项目自动化构建工具-make/makefile make是一个命令&#xff0c; makefile是一个文件&#xff0c;保存依赖关系和依赖方法。‘ touch Makefile/makefile mybin:mytest.c//依赖关系 目标文件&#xff1a;依赖文件列表 文件列表的文件之间以空格分隔 gcc -o mybin mytest.…

【Javascript系统学习】(二)

函数 定义函数 函数提升仅适用于函数声明&#xff0c;而不适用于函数表达式 函数声明 函数表达式 //例子1 const factorial function fac(n) {return n < 2 ? 1 : n * fac(n - 1); };console.log(factorial(3)); // 6 //factorial(n)、fac(n)、arguments.callee() ----…

【Python】解决Python报错:AttributeError: ‘list‘ object has no attribute ‘shape‘

​​​​ 文章目录 引言1. 错误详解2. 常见的出错场景2.1 使用列表代替NumPy数组2.2 错误的数据类型转换 3. 解决方案3.1 确保使用NumPy数组3.2 检查数据类型 4. 预防措施4.1 使用类型注解4.2 编写单元测试 结语 引言 在使用Python进行数据处理或科学计算时&#xff0c;可能会…

NodeJs实现脚本:将xlxs文件输出到json文件中

文章目录 前期工作和依赖笔记功能代码输出 最近有一个功能&#xff0c;将json文件里的内容抽取到一个xlxs中&#xff0c;然后维护xlxs文件。当要更新json文件时&#xff0c;就更新xlxs的内容并把它传回json中。这个脚本主要使用NodeJS写。 以下是完成此功能时做的一些笔记。 …

怎么换自己手机的ip地址

在互联网时代&#xff0c;IP地址已经成为了我们数字身份的一部分。无论是浏览网页、下载文件还是进行在线交流&#xff0c;我们的IP地址都在默默发挥着作用。然而&#xff0c;有时出于安全或隐私保护的考虑&#xff0c;我们可能需要更换手机的IP地址。那么&#xff0c;如何轻松…

工信部《工业和信息化领域数据安全风险评估实施细则(试行)》实行,行云管家数据产品助力企业数据安全

2024年6月1日&#xff0c;工信部颁布的《工业和信息化领域数据安全风险评估实施细则&#xff08;试行&#xff09;》&#xff08;以下简称《细则》&#xff09;开始实行&#xff0c;旨在引导工业和信息化领域数据处理者规范开展数据安全风险评估工作&#xff0c;提升数据安全管…

springboot3 一些听课笔记(1)

文章目录 一、日志框架二、springboot 自动配置三 、springweb3.13.2 自己编写一个messageconvert3.2.2 如果我们想让其支持yaml格式呢&#xff1f; 一、日志框架 springboot底层 默认使用logbacksjf4j作为日志框架。 1、每个 starter 场景&#xff0c;都会导入一个核心场景 …

3067. 在带权树网络中统计可连接服务器对数目 Medium

给你一棵无根带权树&#xff0c;树中总共有 n 个节点&#xff0c;分别表示 n 个服务器&#xff0c;服务器从 0 到 n - 1 编号。同时给你一个数组 edges &#xff0c;其中 edges[i] [ai, bi, weighti] 表示节点 ai 和 bi 之间有一条双向边&#xff0c;边的权值为 weighti 。再给…

驱动开发之设备树语法

目录 0.设备树由来 1.设备树概念 1.1.DTS、DTB 和 DTC 和 dtsi 概念 2.设备树语法 2.1.例子 2.2.设备节点 2.2.1.节点命名 2.2.2节点数据类型 2.2.3.根节点 2.2.4.属性介绍 2.2.4.1.compatible属性 2.2.4.2.name属性 2.2.4.3.status 属性 2.2.4.5.unit-address属性…

42【Aseprite 作图】梅花盆栽——拆解

1 花盆 是高度比较低的盆&#xff0c;只有一个下2&#xff1b;上面分两个 1 2 盆边缘颜色深&#xff0c;上面靠近外面的颜色浅&#xff0c;正面颜色稍微深一点&#xff0c;画两条竖的浅色线&#xff0c;作为装饰 2 花盆中的沙石 沙子颜色深一点&#xff0c;中间有浅一点的线…

C++学习/复习14--list的模拟实现(节点类/迭代器封装成类/list类/测试)

一、节点类 1.匿名对象 **在C中&#xff0c;匿名对象主要是通过构造函数直接生成的未命名对象实例&#xff0c;通常产生于以下三种情况&#xff1a;将对象作为值传递给函数、进行类型转换以及在函数需要返回一个对象时**。以下是对这三种情况的详细介绍&#xff1a; 1. **传…

全链路性能测试:Nginx 负载均衡的性能分析和调优

为什么性能测试很多同学觉得是一个比较难以自学上岸的测试领域,是因为真正做全链路的性能测试是比较难的。所谓的全链路就是在项目的整个链路上任何一环节都有可能存在性能测试瓶颈,我们都需要能够通过分析性能的监控指标找到对应的问题。 我们今天要讲的Nginx负载均衡就是…

基于协同过滤推荐的在线课程选修系统

基于协同过滤推荐的在线课程选修系统 demo 网站查看 http://course.qsxbc.com/all_course/ 点我查看 效果 功能 登录注册、点赞收藏、评分评论&#xff0c;课程推荐&#xff0c;热门课程&#xff0c;个人中心&#xff0c;可视化&#xff0c;后台管理&#xff0c;课程选修 …

【设计模式】JAVA Design Patterns——Servant(服务模式)

&#x1f50d;目的 仆人类被用于向一组类提供一些行为&#xff0c;区别于在每个类定义行为-或者当我们无法排除 公共父类中的这种行为&#xff0c;这些行为在仆人类被定义一次 &#x1f50d;解释 真实世界例子 国王、王后和其他宫廷皇室成员需要仆人为他们提供饮食、准备饮料等…

semaphore | 使用web界面的ansible来批量运维 linux、windows主机

Ansible 的现代化 UI &#xff0c;可以轻松管理和运行 Ansible playbook&#xff0c;功能强大&#xff0c;操作简单&#xff0c;支持中文。 文章目录 一、系统功能说明二、系统安装2.1 直接安装2.2 docker 安装 三、系统使用3.1 建立存储库3.2 编写代码3.3 建立主机配置3.3 建立…

Qt Window Dialog 无标题栏 ,无边框,可拖动

1.效果&#xff1a; 2. 主要实现步骤&#xff1a; 设置窗口 flag&#xff1a; this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); 创建变量存储位置 QPoint m_dragPosition; 对鼠标左键按下和移动事件做处理 void DraggableDialog::mousePre…

R语言探索与分析18-基于时间序列的汇率预测

一、研究背景与意义 汇率是指两个国家之间的货币兑换比率&#xff0c;而且在国家与国家的经济交流有着举足轻重的作用。随着经济全球化的不断深入&#xff0c;在整个全球经济体中&#xff0c;汇率还是一个评估国家与国家之间的经济状况和发展水平的一个风向标。汇率的变动会对…