项目01《游戏-03-开发》Unity2D

2024-02-01 05:20
文章标签 项目 开发 游戏 01 03 unity2d

本文主要是介绍项目01《游戏-03-开发》Unity2D,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于      项目01《游戏-02-开发》Unity2D      ,

继续制作游戏:

首先要做的时切割人物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.

这篇关于项目01《游戏-03-开发》Unity2D的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666198

相关文章

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

C++入门01

1、.h和.cpp 源文件 (.cpp)源文件是C++程序的实际实现代码文件,其中包含了具体的函数和类的定义、实现以及其他相关的代码。主要特点如下:实现代码: 源文件中包含了函数、类的具体实现代码,用于实现程序的功能。编译单元: 源文件通常是一个编译单元,即单独编译的基本单位。每个源文件都会经过编译器的处理,生成对应的目标文件。包含头文件: 源文件可以通过#include指令引入头文件,以使

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

高仿精仿愤怒的小鸟android版游戏源码

这是一款很完美的高仿精仿愤怒的小鸟android版游戏源码,大家可以研究一下吧、 为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去,那种奇妙的感觉还真是令人感到很欢乐。而游戏的配乐同样充满了欢乐的感觉,轻松的节奏,欢快的风格。 源码下载

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

剑指offer(C++)--孩子们的游戏(圆圈中最后剩下的数)

题目 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去