《游戏-03_2D-开发》

基于《游戏-02_2D-开发》,

继续制作游戏:

首先要做的时切割人物Idle空闲状态下的动画,

在切割之前我们需要创建一个文件夹,用来存放动画控制器AnimatorContoller,

再创建一个人物控制器文件夹用来存放人物控制器,

创建人物动画控制器PlayerAC(PlayerAnimatorController)

为Player添加人物组件Animator

将新建动画器PlayerAC拖拽至组件Animator中,

双击PlayerAC(自定义人物动画控制器)即可打开进行设置,

注意:鼠标中键可以移动 动画框,鼠标滚轮可以放大或缩小,

打开动画时间轴调整 动画时间轴 与 动画控制器的位置,

在动画时间轴中我们可以创建 动画单元Animation Clip

选择存放位置创建文件夹,命名为BlueIdle

将Idle 1-5动画拖拽至 动画时间轴中,

点击开始播放动画可以看到Player抽动,

接下来设置 动画时间轴的时间帧率显示,

将帧率设置为10,运行或者播放动画,人物在Idle就有了动画效果,

接下来创建人物的跑动动画,

存放位置与命名,

可以看到人物跑动是第三排,

 将人物跑动动画拖拽至 动画时间轴 中,

设置跑动的动画帧率,

此时在动画控制器中也会增加了一个人物跑动的动画方框,

创建连线,

点击线会变成蓝色,

注意:在退出时间 为 0.58 代表 动画在播放了百分之58就切换到下一个动画中

我们在这里把退出时间改为1 代表 动画在播放了一次百分之百就切换到下一个动画,

接下来我们创建 转换(连线)变量,

设置线,

创建脚本,

编写代码:

using UnityEngine;
public class PlayerAnimation : MonoBehaviour{
    Animator anim;
    Rigidbody2D rb;
    void Awake(){
        anim = GetComponent<Animator>();        
        rb = GetComponent<Rigidbody2D>();
    }
    void Update(){
        SetAnimation();
    }
    public void SetAnimation() {
        anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));
    }
}

注意velocityX是我们在unity动画控制器 转换变量自定义设置的变量,

同样手法做返回Idle空闲的连线,

此时运行项目停止跑动后即停止,

接下来在做走路的动画,

首先创建一个走路动画文件夹,

走路动画在第二张图片,

对第二张图片进行切割设置,

进行切割,

切割好之后留意第二张图0-9就是走路动画,

拖拽至 新建的走路 动画时间轴中,设置帧率为14,

设置线,

以上是通过摇杆 控制人物走路 以及跑步的操作,

接下来稍微改动 动画器 以及 脚本 就可以换成键盘输入控制人物移动以及跑步动画的操作,

首先修改人物动画控制器,

新增bool变量isRun

设置连线,这样设置停止方向键的移动控制没有了速度,人物就会停止,

速度大于0.1 也就是对键盘方向键有水平的操作就会移动让人物进入行走状态,

通过人物由行走到跑步的状态 设置 isRun = true

反之,

修改代码:

using UnityEngine;
public class PlayerAnimation : MonoBehaviour{
    Animator anim;
    Rigidbody2D rb;
    void Awake(){
        anim = GetComponent<Animator>();        
        rb = GetComponent<Rigidbody2D>();
    }
    void Update(){
        SetAnimation();
    }
    public void SetAnimation(){
        anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));
        if (Input.GetKeyDown(KeyCode.Q))
            anim.SetBool("isRun", !anim.GetBool("isRun"));
    }
}
即可实现按方向键左/右 进行移动并由Idle动画切换为Walk动画,

按一下Q键,即可切换成跑步准备动画,再按方向键可以实现跑步的移动,

再按一下Q键,即可取消跑步准备动画,

接下来创建人物跳跃动画,

在下图中跳跃分为五个阶段,

我们需要对其修改名字进行区分是哪个阶段,

对前两个进行重命名,

重命名之后保存,

接下来创建这五个阶段跳跃的动画,

以此类推,

五个跳跃阶段分别代表:

我们不希望这五个动画都在Base Layer层级中,将新建的五个动画在Base Layer层级中删除,

接下来创建一个混合树,

重命名为Jump,

双击Jump进入Jump层级,

因为跳跃是对纵向的位移,所以我们需要创建一个float类型的转换变量velocityY

点击velocityY在motion运动下添加动画,

将Jump1-4添加进来,因为Jump5阶段已经着陆,所以在y轴不进行移动,

混合树的velocity变量可以在0-1之间通过数值的转变来切换动画,拖动velocity即可发现,

接下来需要设置这个值来进行切换,我们可以取消勾选进行自己设定值,

如何设定可以在游戏中自行进行跳跃查看其中的变化数值,

可以看出范围大致为-14~14之间,其中最高点大致为0,

即跳跃这个过程的数值变化 (14 减小 0 减小 -14),

即我们可以这样设置数值,

修改代码:

 

using UnityEngine;
public class PlayerAnimation : MonoBehaviour{
    Animator anim;
    Rigidbody2D rb;
    void Awake(){
        anim = GetComponent<Animator>();        
        rb = GetComponent<Rigidbody2D>();
    }
    void Update(){
        SetAnimation();
    }
    public void SetAnimation(){
        anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));
        anim.SetFloat("velocityY", rb.velocity.y);
        if (Input.GetKeyDown(KeyCode.Q))
            anim.SetBool("isRun", !anim.GetBool("isRun"));
    }
}
保存代码后,回到Base Layer层级中,

新增bool类型的转换变量,

设置线,

由于我们从 Any State进行连线,在任何状态下有一些额外的选项,

我们在设置时,Can Transition To 这个选项一定要取消勾选,不然进到这里的动画会出不来,

   

我们需要添加Jump5的落地动画与 Idle状态做连接,

设置线,

设置线,这里我们想跳跃动作播放完执行着陆动画,所以设置退出时间为1,

一旦跑步就可以打断跳跃,

修改代码:将实时的true / false 传递给动画控制器的isGround转换变量中,

using UnityEngine;
public class PlayerAnimation : MonoBehaviour{
    Animator anim;
    Rigidbody2D rb;
    PhysicsCheck physicsCheck;
    void Awake(){
        anim = GetComponent<Animator>();        
        rb = GetComponent<Rigidbody2D>();
        physicsCheck = GetComponent<PhysicsCheck>();
    }
    void Update(){
        SetAnimation();
    }
    public void SetAnimation(){
        anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));
        anim.SetFloat("velocityY", rb.velocity.y);
        anim.SetBool("isGround",physicsCheck.isGround);
        if (Input.GetKeyDown(KeyCode.Q))
            anim.SetBool("isRun", !anim.GetBool("isRun"));
    }
}
运行即可完成跳跃,

End.

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

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

相关文章

【Ubuntu 22.04.3 LTS】apt-get下载安装有关问题可能原因及解决方法

ubuntu 22.04.3 LTS unaccountably error 装啥啥没依赖 可能是用了不合适的源&#xff0c;换个就好了 Now, let’s take a look at the lsb_release output, with a special focus on the Codename, which could be a crucial piece of information. The lsb_release comm…

认识BPMN2.0

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;说在前面 …

STM32单片机基本原理与应用(四)

直流电机驱动控制原理 1、电机正反转控制 在STM32中&#xff0c;直流电机的正反转控制主要通过改变电机输入电源的极性来实现。当电机的电压极性发生变化时&#xff0c;电机的旋转方向也会相应改变。在硬件电路中&#xff0c;可以通过继电器或晶体管等电子开关来切换电机的电源…

查找二叉树(tree_a)

时间限制&#xff1a;1秒 内存限制&#xff1a;128M 题目描述 已知一棵二叉树用邻接表结构存储&#xff0c;中序查找二叉树中值为x的结点&#xff08;x在二叉树中是唯一的&#xff09;&#xff0c;并指出是第几个结点。 输入描述 第一行n为二叉树的结点个树&#xf…

【TCP】重传与超时机制

前言 在网络通信的世界里&#xff0c;传输控制协议&#xff08;TCP&#xff09;扮演着一个至关重要的角色。它确保了数据的可靠传输&#xff0c;就像邮差确保每一封信都能准确无误地送达收件人手中一样。但是&#xff0c;网络环境充满了不确定性&#xff0c;数据包可能会因为各…

新书速览|Docker与Kubernetes容器运维实战

帮助读者用最短的时间掌握Docker与K8s运维技能 内容简介 随着云计算和容器技术的发展&#xff0c;Docker与Kubernetes已经成为各个企业首选的部署工具&#xff0c;使用它们可以提高系统的部署效率和运维能力&#xff0c;降低运维成本。本书是一本为初学者量身定制的Docker与Kub…

Android PMS——PMS服务启动流程(二)

PackageManagerService 既然是系统服务&#xff0c;那么肯定是通过 SystemServer 启动的&#xff0c;所以我们首先看一下 SystemServer 服务中启动 PackageManagerService 相关代码。 一、PMS启动 1、SystemServer 源码路径&#xff1a;/frameworks/base/services/java/com/…

iPhone手电筒不能工作的几种修复办法,总有一种适合你

这篇文章解释了为什么你的iPhone的手电筒不工作以及如何修复它。 手电筒不工作的原因 iPhone手电筒功能可能不起作用的原因有几个。通常&#xff0c;软件错误或小故障会导致该功能出现故障&#xff0c;但可能是你处于错误的电源模式或只需要充电。其他时候&#xff0c;确切的…

STM32F407移植OpenHarmony笔记4

上一篇写到make menuconfig报错&#xff0c;继续开整。 make menuconfig需要/device/soc/*下面有对应的Kconfig文件。 直接去gitee下载stm32的配置文件拿来参考用。 先提取Kconfig文件&#xff0c;后面再添加其它文件。https://gitee.com/openharmony/device_soc_st/tree/Open…

arcgis 如何将线路转为路面

在出外业的时候&#xff0c;用手机软件测出来的路&#xff08;线要素&#xff09;&#xff0c;需要转换成路面。具体操作如下&#xff1a; 1.打开线图层 2.菜单-地理处理-缓冲区 在缓冲区中&#xff0c;输入要转换的线要素&#xff0c;在线性单位下方填写要转换的面的宽度&am…

[E模拟] lc2670. 找出不同元素数目差数组(哈希表+状态压缩)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;2670. 找出不同元素数目差数组 2. 题目解析 哈希计数统计就行了&#xff0c;题解里有看到用 long 64 位进行状态压缩的&#xff0c;可以参考下。这类题就不纠结写法了。 思路&#xff1a; 两个哈希表&#x…

回响科技二面面试题解答

面试题 1、你们的数仓中DWD层为什么要划分数据域&#xff1f;划分数据域之后会对ADS层造成什么影响&#xff1f;是可以提效还是可扩展性强&#xff1f;你们是如何考虑的呢&#xff1f; 2、AZkaban和dolphinScheduler的区别是什么&#xff1f;如果选型会从哪几个方面来考虑呢&a…

《Numpy 简易速速上手小册》第10章:Numpy案例研究和实践技巧(2024 最新版)

文章目录 10.1 实际案例分析10.1.1 基础知识10.1.2 完整案例&#xff1a;天气数据分析10.1.3 拓展案例 1&#xff1a;股票价格分析10.1.4 拓展案例 2&#xff1a;信号处理 10.2 Numpy 最佳实践10.2.1 基础知识10.2.2 完整案例&#xff1a;高效数组操作10.2.3 拓展案例 1&#x…

vue-cli初始化项目很慢?

第一种情况 大部分是由于npm的镜像源不是淘宝的 cmd输入npm config get registry查看是不是淘宝的&#xff0c;是的话看第二种情况试试不是的话输入npm config set registry https://registry.npm.taobao.org 第二种情况 vue-cli配置文件不是使用淘宝镜像源的 找到文件.vue…

已实现:vue、h5项目如何使用echarts实现雷达图、六边形图表

说实话&#xff0c;要说图表里&#xff0c;最强的应该属于echarts了&#xff0c;不管是接入难度上&#xff0c;还是样式多样性上&#xff0c;还有社区庞大程度上&#xff0c;都是首屈一指的&#xff0c;反观有的人习惯用chart.js了&#xff0c;这个无可厚非&#xff0c;但是如果…

从C向C++5——友元和string

一.对象特性&#xff08;续&#xff09; 1.空指针访问成员函数 C中空指针也是可以调用成员函数的&#xff0c;但是也要注意有没有用到this指针。 如果用到this指针&#xff0c;需要加以判断保证代码的健壮性。 如果调用的成员函数不访问成员属性&#xff0c;那么空指针可以调…

C语言中大小写字母的转化

在C语言中&#xff0c;大小写字母的转化是一个非常基础且常用的功能。C语言中的字符是以ASCII码的形式存储的&#xff0c;而ASCII码中&#xff0c;小写字母和大写字母之间相差32。因此&#xff0c;可以通过简单的数学运算来实现大小写字母的转换。 一、数学运算转化 大写字母…

微信小程序如何实现实时显示输入内容

如下所示&#xff0c;在许多场景中需要实时显示用户输入&#xff0c;具体实现见下文。 .wxml <input type"text" placeholder"请输入{{item.value}}(必填)" style"width:80%;" bindinput"get_required_value" data-info"{{it…

科技云报道:新趋势下,国产数据库或“春山可望”

科技云报道原创。 从540亿元到1286亿元——这是中国通信标准化协会大数据技术标准推进委员会针对中国数据库行业给出的一份预测报告。 报告指出&#xff0c;未来五年&#xff0c;中国数据库行业将从百亿级市场跨越成为千亿级市场。 最近两年&#xff0c;中国的数据库行业似乎…

【PyRestTest】PyRestTest入门引导

pyresttest环境安装完毕之后&#xff0c;进行如下操作&#xff0c;快速入门pyresttest。 第一步&#xff1a;创建一个简单的REST服务 1、进行如下命令clonepyresttest项目: git clone https://github.com/svanoort/pyresttest.git2、安装运行Rest服务的依赖包 (Django and D…