当前位置: 首页 > 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图数据库&…...

Poppler-Windows:Windows平台PDF处理工具包的高效部署方案

Poppler-Windows&#xff1a;Windows平台PDF处理工具包的高效部署方案 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 在数字化办公环境中&#xf…...

HoYo-Glyphs:11款米哈游游戏文字字体,轻松打造你的专属游戏世界

HoYo-Glyphs&#xff1a;11款米哈游游戏文字字体&#xff0c;轻松打造你的专属游戏世界 【免费下载链接】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非阻塞模式实战&#xff1a;单线程管理多个SSH连接的高效技巧 在当今分布式系统和自动化运维的浪潮中&#xff0c;SSH协议作为远程管理的黄金标准&#xff0c;其性能瓶颈往往出现在需要同时管理大量连接时。传统多线程方案不仅资源消耗大&#xff0c;还面临线程同步的复…...

碧蓝航线自动化助手:5分钟掌握解放双手的终极解决方案

碧蓝航线自动化助手&#xff1a;5分钟掌握解放双手的终极解决方案 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 你是否曾为…...

软萌拆拆屋惊艳效果:多层叠穿服饰逐层展开结构图生成案例

软萌拆拆屋惊艳效果&#xff1a;多层叠穿服饰逐层展开结构图生成案例 1. 引言&#xff1a;当AI遇见“拆解美学” 想象一下&#xff0c;你有一件设计精巧的洛丽塔裙子&#xff0c;上面缀满了蕾丝、蝴蝶结和复杂的褶皱。你想向别人展示它的每一个精妙细节&#xff0c;但一张普通…...

Qwen3.5-4B-Claude-Opus-GGUF一键部署:CSDN镜像平台Web化推理服务上线指南

Qwen3.5-4B-Claude-Opus-GGUF一键部署&#xff1a;CSDN镜像平台Web化推理服务上线指南 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型&#xff0c;重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理…...

Amazon Q 从入门到实战,AWS 专属 AI 助手超全指南

目录 一、Amazon Q 到底是什么 二、Amazon Q 有两个版本 1、Amazon Q Developer&#xff08;给开发者/运维&#xff09; 2、Amazon Q Bussiness&#xff08;给企业/业务人员&#xff09; 三、Amazon Q能解决什么实际问题 四、Amazon Q 和 Chat GPT 同类助手的有什么区别 …...

Qwen2.5深度微调成果展示|像素剧本圣殿在武侠/赛博朋克题材表现

Qwen2.5深度微调成果展示&#xff5c;像素剧本圣殿在武侠/赛博朋克题材表现 1. 项目概览 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。这个独特的创作环境将先进的大语言模型能力与8-Bit复古美学完美融合…...

全网SEO推广如何提升网站流量

全网SEO推广如何提升网站流量 在当今互联网时代&#xff0c;网站流量的提升对于任何企业或个人来说都是至关重要的。网站流量直接影响到网站的曝光度、销售转化和品牌知名度。全网SEO推广作为一种有效的提升网站流量的方法&#xff0c;越来越受到关注。全网SEO推广究竟是如何提…...