当前位置: 首页 > news >正文

【Unity】2D角色跳跃控制器

最近加了学校的Nova独游社,本文是社团出的二面题,后续有时间优化下可能会做成一个二维冒险小游戏。本文主要涉及相关代码,参考教程:《勇士传说》横版动作类游戏开发教程

效果演示

【Unity】2D角色跳跃模拟器

主要实现功能:

  • 角色移动翻转
  • 地图周围空气墙
  • 角色跳跃与长按连跳
  • 地面判断与连跳限制
  • 滑块控制速度与弹跳力

人物素材

人物素材选用的是童年游戏《死神VS火影》中黑崎一护卍解形态,动作分帧图如下,进行扣绿处理后,可以导入到unity中进行自动切图。

在这里插入图片描述
本项目目前只用到前三个动作:待机动作、奔跑动作和跳跃动作。

动画关系

动画状态图如图所示,首先进入idol待机状态,播放待机动画,根据角色的速度切换奔跑状态。

在这里插入图片描述

任意状态按下空格键,则切换到跳跃状态。跳跃状态使用了混合树,细分成四个状态,jump1为起跳动作,jump2为上升动作,jump3为滞空动作,jump4为落地动作。

在这里插入图片描述

角色移动和翻转

角色的移动主要通过读取用户的输入对刚体的位置进行调整,如果输入为反方向,则沿x轴对人物进行翻转,代码如下:

void Movement(){float horizontalmove;//定义变量,当horizontalmove等于-1时向左,等于1时向右,等于0时不动;horizontalmove = Input.GetAxis("Horizontal");//绑定输入;if (horizontalmove != 0){rb.velocity = new Vector2(horizontalmove * speed, rb.velocity.y);//更新速度变量}float faceDir = transform.localScale.x;if (horizontalmove > 0)faceDir = (float)0.5;if (horizontalmove < 0)faceDir = (float)-0.5;// 人物翻转transform.localScale = new Vector3(faceDir, (float)0.5, (float)0.5);}

角色跳跃与长按连跳

角色蓄力跳主要通过计时器实现,按下空格时,倒计时启动,如果秒松开,isJumping设为False,执行普通跳跃,直接调整角色y轴位置。如果按住不松手,则持续执行跳跃,倒计时结束再执行普通跳跃,从而跳的更高,代码如下:

void Jump()
{   // 普通跳if (Input.GetKeyDown(KeyCode.Space) && physicscheck.isGround){isJumping = true;jumpTimeCounter = jumpTime;rb.velocity = new Vector2(rb.velocity.x, jumpForce);}// 蓄力跳if (Input.GetKey(KeyCode.Space) && isJumping == true){if(jumpTimeCounter > 0){rb.velocity = new Vector2(rb.velocity.x, jumpForce);jumpTimeCounter -= Time.deltaTime;}else{isJumping = false;}}if (Input.GetKeyUp(KeyCode.Space)){isJumping = false;}
}

地面判断相关代码:

public void Check()
{isGround = Physics2D.OverlapCircle(transform.position, checkRaduis, groundLayer);
}

滑块控制

滑块传参只需要在游戏的Canvas中设置Slider,在参数面板中绑定相关方法:

在这里插入图片描述

相关代码:

public void OnChangeSpeed(float newSpeed)
{speed = newSpeed * maxSpeed;
}public void OnChangeJumpForce(float newJumpForce)
{jumpForce = newJumpForce * maxJumpForce;
}

完整代码

PlayerController.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerController : MonoBehaviour
{public Rigidbody2D rb;  //添加Rigidbody[Header("基本属性")]public float speed = 10;  //速度public float jumpForce = 4; //跳跃力度private float jumpTimeCounter;public float jumpTime;private bool isJumping;// Slider相关private float maxSpeed = 50;private float maxJumpForce = 30;private PhysicsCheck physicscheck;private void Awake(){physicscheck = GetComponent<PhysicsCheck>();}// Update is called once per framevoid Update(){Movement();//移动Jump();}void Movement(){float horizontalmove;//定义变量,当horizontalmove等于-1时向左,等于1时向右,等于0时不动;horizontalmove = Input.GetAxis("Horizontal");//绑定输入;if (horizontalmove != 0){rb.velocity = new Vector2(horizontalmove * speed, rb.velocity.y);//更新速度变量}float faceDir = transform.localScale.x;if (horizontalmove > 0)faceDir = (float)0.5;if (horizontalmove < 0)faceDir = (float)-0.5;// 人物翻转transform.localScale = new Vector3(faceDir, (float)0.5, (float)0.5);}void Jump(){   // 普通跳if (Input.GetKeyDown(KeyCode.Space) && physicscheck.isGround){isJumping = true;jumpTimeCounter = jumpTime;rb.velocity = new Vector2(rb.velocity.x, jumpForce);}// 蓄力跳if (Input.GetKey(KeyCode.Space) && isJumping == true){if(jumpTimeCounter > 0){rb.velocity = new Vector2(rb.velocity.x, jumpForce);jumpTimeCounter -= Time.deltaTime;}else{isJumping = false;}}if (Input.GetKeyUp(KeyCode.Space)){isJumping = false;}}public void OnChangeSpeed(float newSpeed){speed = newSpeed * maxSpeed;}public void OnChangeJumpForce(float newJumpForce){jumpForce = newJumpForce * maxJumpForce;}
}

拓展

对于2D平面游戏来说,有的游戏会做更多优化,比如:

  • 跳跃缓冲(Jump Buffer):当玩家即将落地前按下跳跃键时,该次跳跃命令将被缓存,玩家落地后会直接执行缓存的跳跃命令;包含可以调整大小的 缓存时间;
  • 野狼时间(Coyote Time):当玩家刚刚离开地面几帧时,玩家按下跳跃键仍然可以起跳;包含可以调整大小的野狼时间;

实测发现,只要移动速度和弹跳值合适,手感本身就还不错,因此就没去实现这些有些花哨的设计,不过可以纳入之后拓展的一个考虑范畴。

相关文章:

【Unity】2D角色跳跃控制器

最近加了学校的Nova独游社&#xff0c;本文是社团出的二面题&#xff0c;后续有时间优化下可能会做成一个二维冒险小游戏。本文主要涉及相关代码&#xff0c;参考教程&#xff1a;《勇士传说》横版动作类游戏开发教程 效果演示 【Unity】2D角色跳跃模拟器 主要实现功能&#xf…...

Gradle vs Maven

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置&#xff0c;抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala&#xff0c;计划未来将支持更多的…...

Linux认证 | RHCA是什么等级的证书?考到工资能有多少?

RHCA就是红帽认证架构师&#xff0c;RHCA是红帽公司在红帽认证工程师&#xff08;RHCE&#xff09;和红帽认证技师&#xff08;RHCT&#xff09;认证推出之后又一个最新的顶级认证&#xff0c;在业界也是最受欢迎的、最成熟的linux认证。 那么RHCA是什么等级的证书&#xff1f…...

SQLite System.Data.SQLite和sqlite-net-pcl之间的区别

System.Data.SQLite System.Data.SQLite是一个.NET数据提供程序&#xff0c;用于操作SQLite数据库。它是在SQLite C语言库之上构建的&#xff0c;提供了以.NET方式访问SQLite数据库的功能。System.Data.SQLite提供了ADO.NET接口&#xff0c;可以与其他关系型数据库一样使用Com…...

【Leetcode】【消失的数字】【C语言】

方法一&#xff1a;按位异或&#xff08;找单身狗&#xff09; 我们知道&#xff1a;按位异或^操作原则&#xff1a;相同为零&#xff0c;相异为一 所以 0^aa a ^a0 a ^bb ^a int missingNumber(int* nums, int numsSize){ int i 0; int tem1 0,tem20; for (i 0;i < nu…...

在Linux中安装宝塔面板

在公网为x.x.x.x的服务器上安装宝塔面板 安装宝塔面板 第一步&#xff0c;下载安装宝塔面板。 命令&#xff1a;cd /usr/local/src wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 注意&#xff1a;需要等几分钟来下载宝塔面…...

数据结构 - 全貌总结

目录 一. 前言 二. 分类 三. 常见的线性和非线性结构 一. 前言 数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或者存储效率。数据在内存中是呈线性排列的&#xff0c;但是我们可以使用指针等道具&#xff0c;构造出类似“树形”等复杂结构。 数…...

淘宝API商品详情接口丨关键词搜索接口丨用户评论接口丨淘宝销量接口

淘宝API商品详情接口&#xff0c;关键词搜索接口&#xff0c;用户评论接口&#xff0c;淘宝销量接口如下&#xff1a; 淘宝/天猫获得淘宝商品详情 API 返回值说明 item_get-获得淘宝商品详情 1.公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在…...

Android开机动画启动流程

首语 在Android设备开机启动时&#xff0c;会展示Android开机动画&#xff0c;用于增加用户体验和展示设备品牌等信息。它也是Android系统启动的一部分。开机动画是由bootanimation负责的&#xff0c;因此首先先了解下bootanimation是如何启动的。 bootanimation 启动脚本分析…...

react_13

React Router //-dom代表给浏览器应用使用的 npm install react-router-dom 目前版本是 "react-router-dom": "^6.18.0" 使用 新建文件 src/router/MyRouter.tsx import { Navigate, RouteObject, useRoutes } from "react-router-dom"; imp…...

vscode git提交

...

LangChain+LLM实战---实用Prompt工程讲解

原文&#xff1a;Practical Prompt Engineering 注&#xff1a;本文中&#xff0c;提示和prompt几乎是等效的。 这是一篇非常全面介绍Prompt的文章&#xff0c;包括prompt作用于大模型的一些内在机制&#xff0c;和prompt可以如何对大模型进行“微调”。讲清楚了我们常常听到的…...

虚拟机备份中的CBT技术

虚拟机备份的CBT&#xff08; Changed Block Tracking&#xff09;模式是一种备份模式&#xff0c;它能够识别和跟踪自上次备份后虚拟机中被修改过的块&#xff0c;这些修改会被存放到日志文件中。在启用CBT模式之后&#xff0c;备份软件会利用这个功能进行增量备份。 启用CBT…...

云服务器哪家便宜靠谱 | 简单了解亚马逊云科技发展史

云服务器哪家便宜又靠谱呢&#xff1f;为什么说亚马逊云科技在这道题答案的第一行&#xff0c;一篇故事告诉你。 1994年&#xff0c;杰夫贝索斯在西雅图创建了亚马逊&#xff0c;最初只是一个在线书店。 1997年&#xff0c;亚马逊在纳斯达克交易所上市&#xff0c;成为一家公…...

【LeetCode】每日一题 2023_11_6 最大单词长度乘积

文章目录 刷题前唠嗑题目&#xff1a;最大单词长度乘积题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode? 启动&#xff01;&#xff01;&#xff01; 题目&#xff1a;最大单词长度乘积 题目链接&#xff1a;318. 最大单词长度乘积 题目描述 代码与解题思路…...

【小白专用】PHP中的JSON转换操作指南 23.11.06

一、JSON的基础知识 1.1JSON数据格式 JSON数据格式是一组键值对的集合&#xff0c;通过逗号分隔。键值对由“键”和“值”组成&#xff0c;中间使用冒号分隔。JSON数据格式可以嵌套&#xff0c;而且可以使用数组 二、PHP中的JSON函数 JSON的操作需要使用编程语言进行处理&am…...

Web3游戏的十字路口:沿用传统IP还是另起炉灶?

人们经常问我对 Web3 游戏有什么看法。因此&#xff0c;我想以书面形式概述一下我目前的想法。 让我先澄清一下&#xff1a;我不是专家。这不是一篇深入探讨游戏世界精细指标如 MAU 或 D14 等的全面分析。请把这看作是我根据个人交流和研究&#xff0c;这反映我在游戏领域关注…...

【系统架构设计】架构核心知识:4 系统可靠性分析与设计

目录 1 可靠性 2 系统可靠性 2.1 可靠性指标 2.2 可靠性计算 2.2.1 串联系统 2.2.2 并联系统</...

什么是站群服务器的优点?

什么是站群服务器的优点&#xff1f; 1. 主要作用 在网站数量增多的今天&#xff0c;对于站群服务器的需求自然也会变得越来越多&#xff0c;那么&#xff0c;它的主要作用都是什么呢&#xff1f;站群服务器&#xff0c;就好像它的名字一样&#xff0c;是一个群体&#xff0c…...

图数据库Neo4j——SpringBoot使用Neo4j 简单增删改查 复杂查询初步

前言 图形数据库是专门用于存储图形数据的数据库&#xff0c;它使用图形模型来存储数据&#xff0c;并且支持复杂的图形查询。常见的图形数据库有Neo4j、OrientDB等。 Neo4j是用Java实现的开源NoSQL图数据库&#xff0c;本篇博客介绍如何在SpringBoot中使用Neo4j图数据库&…...

Vulnhub-DC-1

1.信息收集 使用工具nmap扫描主机端口 这是Drupal是使用PHP语言编写的开源内容管理框架&#xff08;CMF&#xff09;&#xff0c;它由内容管理系统&#xff08;CMS&#xff09;和PHP开发框架&#xff08;Framework&#xff09;共同构成 Web指纹扫描 发现是&#xff1a;drupal…...

Transient、QuickEye、VerifyEye傻傻分不清?一文讲透Ansys里三种眼图仿真方法的适用场景与避坑指南

Transient、QuickEye、VerifyEye深度解析&#xff1a;Ansys眼图仿真技术选型实战指南 在高速数字系统设计中&#xff0c;眼图分析是评估信号完整性的黄金标准。面对Ansys工具链中三种截然不同的眼图生成方法&#xff0c;工程师常常陷入选择困境——是追求精确度的传统瞬态分析&…...

OpenClaw用户如何快速接入Taotoken并开始Agent工作流

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw用户如何快速接入Taotoken并开始Agent工作流 对于使用OpenClaw框架构建AI智能体的开发者而言&#xff0c;快速接入稳定、多…...

METSO A413248自动化系统

METSO A413248 自动化系统模块产品特点&#xff1a; 品牌归属&#xff1a;芬兰METSO&#xff08;美卓&#xff09;工业自动化系统原装备件。 产品类型&#xff1a;工业级自动化控制模块/接口模块。 核心功能&#xff1a;用于控制信号处理、数据采集及系统集成。 系统兼容&am…...

账务台账数据

银行里说的 “账务台账数据”&#xff0c;本质就是按会计规则把每笔业务逐笔、分户、分科目记下来的完整明细流水 余额 辅助信息&#xff0c;核心是 “可逐笔追溯、可对账、可审计” 的一套明细数据。下面用通俗、具体的方式拆开说&#xff1a;一、银行 “账务台账” 到底是什…...

从安装到排错:手把手解决Linux服务器上Nacos启动失败的十大常见问题

从安装到排错&#xff1a;手把手解决Linux服务器上Nacos启动失败的十大常见问题当你在Linux服务器上部署Nacos时&#xff0c;是否遇到过启动失败却无从下手的困境&#xff1f;作为阿里巴巴开源的服务发现和配置管理平台&#xff0c;Nacos在微服务架构中扮演着重要角色。然而&am…...

免费抓包工具选型指南:Wireshark、Fiddler、mitmproxy、Charles实战对比

1. 抓包工具不是“黑科技”&#xff0c;而是网络世界的显微镜很多人第一次听说“抓包”&#xff0c;脑子里立刻浮现出黑客电影里满屏滚动的绿色代码、键盘敲得噼啪作响、三秒破解银行防火墙的画面。其实完全不是这样——抓包&#xff08;Packet Capture&#xff09;本质上就是把…...

Matlab,plot绘图如何添加边框

matlab生成的图——编辑(E)——坐标区属性(A)——框样式——Box&#xff0c;勾选效果&#xff1a;...

Windows开机自动全屏打开指定网页?一个快捷方式参数就搞定(Chrome/Edge/Firefox教程)

Windows开机自动全屏展示网页的终极方案每次开机都要手动打开浏览器、输入网址、切换全屏模式&#xff1f;这种重复操作不仅浪费时间&#xff0c;还容易在重要演示时手忙脚乱。想象一下&#xff1a;电脑启动后自动全屏显示你的仪表盘、会议日程或是监控大屏&#xff0c;整个过程…...

3分钟搞定专业短视频!Pixelle-Video终极AI创作指南

3分钟搞定专业短视频&#xff01;Pixelle-Video终极AI创作指南 【免费下载链接】Pixelle-Video &#x1f680; AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 还在为视频制作发愁吗&am…...