【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独游社,本文是社团出的二面题,后续有时间优化下可能会做成一个二维冒险小游戏。本文主要涉及相关代码,参考教程:《勇士传说》横版动作类游戏开发教程 效果演示 【Unity】2D角色跳跃模拟器 主要实现功能…...
Gradle vs Maven
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala,计划未来将支持更多的…...
Linux认证 | RHCA是什么等级的证书?考到工资能有多少?
RHCA就是红帽认证架构师,RHCA是红帽公司在红帽认证工程师(RHCE)和红帽认证技师(RHCT)认证推出之后又一个最新的顶级认证,在业界也是最受欢迎的、最成熟的linux认证。 那么RHCA是什么等级的证书?…...
SQLite System.Data.SQLite和sqlite-net-pcl之间的区别
System.Data.SQLite System.Data.SQLite是一个.NET数据提供程序,用于操作SQLite数据库。它是在SQLite C语言库之上构建的,提供了以.NET方式访问SQLite数据库的功能。System.Data.SQLite提供了ADO.NET接口,可以与其他关系型数据库一样使用Com…...
【Leetcode】【消失的数字】【C语言】
方法一:按位异或(找单身狗) 我们知道:按位异或^操作原则:相同为零,相异为一 所以 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的服务器上安装宝塔面板 安装宝塔面板 第一步,下载安装宝塔面板。 命令:cd /usr/local/src wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 注意:需要等几分钟来下载宝塔面…...
数据结构 - 全貌总结
目录 一. 前言 二. 分类 三. 常见的线性和非线性结构 一. 前言 数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或者存储效率。数据在内存中是呈线性排列的,但是我们可以使用指针等道具,构造出类似“树形”等复杂结构。 数…...
淘宝API商品详情接口丨关键词搜索接口丨用户评论接口丨淘宝销量接口
淘宝API商品详情接口,关键词搜索接口,用户评论接口,淘宝销量接口如下: 淘宝/天猫获得淘宝商品详情 API 返回值说明 item_get-获得淘宝商品详情 1.公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在…...
Android开机动画启动流程
首语 在Android设备开机启动时,会展示Android开机动画,用于增加用户体验和展示设备品牌等信息。它也是Android系统启动的一部分。开机动画是由bootanimation负责的,因此首先先了解下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工程讲解
原文:Practical Prompt Engineering 注:本文中,提示和prompt几乎是等效的。 这是一篇非常全面介绍Prompt的文章,包括prompt作用于大模型的一些内在机制,和prompt可以如何对大模型进行“微调”。讲清楚了我们常常听到的…...
虚拟机备份中的CBT技术
虚拟机备份的CBT( Changed Block Tracking)模式是一种备份模式,它能够识别和跟踪自上次备份后虚拟机中被修改过的块,这些修改会被存放到日志文件中。在启用CBT模式之后,备份软件会利用这个功能进行增量备份。 启用CBT…...
云服务器哪家便宜靠谱 | 简单了解亚马逊云科技发展史
云服务器哪家便宜又靠谱呢?为什么说亚马逊云科技在这道题答案的第一行,一篇故事告诉你。 1994年,杰夫贝索斯在西雅图创建了亚马逊,最初只是一个在线书店。 1997年,亚马逊在纳斯达克交易所上市,成为一家公…...
【LeetCode】每日一题 2023_11_6 最大单词长度乘积
文章目录 刷题前唠嗑题目:最大单词长度乘积题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode? 启动!!! 题目:最大单词长度乘积 题目链接:318. 最大单词长度乘积 题目描述 代码与解题思路…...
【小白专用】PHP中的JSON转换操作指南 23.11.06
一、JSON的基础知识 1.1JSON数据格式 JSON数据格式是一组键值对的集合,通过逗号分隔。键值对由“键”和“值”组成,中间使用冒号分隔。JSON数据格式可以嵌套,而且可以使用数组 二、PHP中的JSON函数 JSON的操作需要使用编程语言进行处理&am…...
Web3游戏的十字路口:沿用传统IP还是另起炉灶?
人们经常问我对 Web3 游戏有什么看法。因此,我想以书面形式概述一下我目前的想法。 让我先澄清一下:我不是专家。这不是一篇深入探讨游戏世界精细指标如 MAU 或 D14 等的全面分析。请把这看作是我根据个人交流和研究,这反映我在游戏领域关注…...
【系统架构设计】架构核心知识:4 系统可靠性分析与设计
目录 1 可靠性 2 系统可靠性 2.1 可靠性指标 2.2 可靠性计算 2.2.1 串联系统 2.2.2 并联系统</...
什么是站群服务器的优点?
什么是站群服务器的优点? 1. 主要作用 在网站数量增多的今天,对于站群服务器的需求自然也会变得越来越多,那么,它的主要作用都是什么呢?站群服务器,就好像它的名字一样,是一个群体,…...
图数据库Neo4j——SpringBoot使用Neo4j 简单增删改查 复杂查询初步
前言 图形数据库是专门用于存储图形数据的数据库,它使用图形模型来存储数据,并且支持复杂的图形查询。常见的图形数据库有Neo4j、OrientDB等。 Neo4j是用Java实现的开源NoSQL图数据库,本篇博客介绍如何在SpringBoot中使用Neo4j图数据库&…...
Poppler-Windows:Windows平台PDF处理工具包的高效部署方案
Poppler-Windows:Windows平台PDF处理工具包的高效部署方案 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 在数字化办公环境中…...
HoYo-Glyphs:11款米哈游游戏文字字体,轻松打造你的专属游戏世界
HoYo-Glyphs:11款米哈游游戏文字字体,轻松打造你的专属游戏世界 【免费下载链接】HoYo-Glyphs Constructed scripts by HoYoverse 米哈游的架空文字 项目地址: https://gitcode.com/gh_mirrors/ho/HoYo-Glyphs 你是否曾被《原神》中蒙德教堂的哥特…...
读懂 ABAP 调试器里的 ()XVBRP[]:这不是新语法,而是旧式内表加调试器命名表示法的组合
有朋友问我下面这个截图里的变量名是什么语法? 你这张截图里的 ()XVBRP[],结论上并不是一种新的 ABAP 变量声明语法。把它拆开看,更容易理解: XVBRP[] 这一段,核心含义是:XVBRP 是一个带 header line 的旧式内表,而 [] 明确表示你看到的是内表体 table body,不是同名的…...
libssh2非阻塞模式实战:单线程管理多个SSH连接的高效技巧
libssh2非阻塞模式实战:单线程管理多个SSH连接的高效技巧 在当今分布式系统和自动化运维的浪潮中,SSH协议作为远程管理的黄金标准,其性能瓶颈往往出现在需要同时管理大量连接时。传统多线程方案不仅资源消耗大,还面临线程同步的复…...
碧蓝航线自动化助手:5分钟掌握解放双手的终极解决方案
碧蓝航线自动化助手:5分钟掌握解放双手的终极解决方案 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 你是否曾为…...
软萌拆拆屋惊艳效果:多层叠穿服饰逐层展开结构图生成案例
软萌拆拆屋惊艳效果:多层叠穿服饰逐层展开结构图生成案例 1. 引言:当AI遇见“拆解美学” 想象一下,你有一件设计精巧的洛丽塔裙子,上面缀满了蕾丝、蝴蝶结和复杂的褶皱。你想向别人展示它的每一个精妙细节,但一张普通…...
Qwen3.5-4B-Claude-Opus-GGUF一键部署:CSDN镜像平台Web化推理服务上线指南
Qwen3.5-4B-Claude-Opus-GGUF一键部署:CSDN镜像平台Web化推理服务上线指南 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型,重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理…...
Amazon Q 从入门到实战,AWS 专属 AI 助手超全指南
目录 一、Amazon Q 到底是什么 二、Amazon Q 有两个版本 1、Amazon Q Developer(给开发者/运维) 2、Amazon Q Bussiness(给企业/业务人员) 三、Amazon Q能解决什么实际问题 四、Amazon Q 和 Chat GPT 同类助手的有什么区别 …...
Qwen2.5深度微调成果展示|像素剧本圣殿在武侠/赛博朋克题材表现
Qwen2.5深度微调成果展示|像素剧本圣殿在武侠/赛博朋克题材表现 1. 项目概览 像素剧本圣殿(Pixel Script Temple)是基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。这个独特的创作环境将先进的大语言模型能力与8-Bit复古美学完美融合…...
全网SEO推广如何提升网站流量
全网SEO推广如何提升网站流量 在当今互联网时代,网站流量的提升对于任何企业或个人来说都是至关重要的。网站流量直接影响到网站的曝光度、销售转化和品牌知名度。全网SEO推广作为一种有效的提升网站流量的方法,越来越受到关注。全网SEO推广究竟是如何提…...
