首页 > 其他分享 > Unity进阶提升-2D游戏跳跃手感优化(跳起下落)

Unity进阶提升-2D游戏跳跃手感优化(跳起下落)

时间:2023-10-28 15:22:56浏览次数:35  
标签:进阶 物体 2D Unity 跳跃 velocity 下落

在进行2D游戏开发时,跳跃是不可缺少的一个重要功能。但是我们在Unity开发时Unity本身的物理引擎并不能提供很好的的手感,下落的时候轻飘飘的,这操作起来显然非常不舒服。所以,我们需要自己对跳跃进行优化,以此来获得更好的手感。我们不难发现,在绝大多数2D游戏的跳跃中,下落的速度比上升的速度要快上很多,下落的用时是上升的一半左右。

提示,在优化跳跃时,将使用刚体组件

首先,我们需要对Unity物体跳跃阶段进行分析:

图中,跳跃共分为两个阶段,第一阶段就是跳起,人物上升阶段,第二阶段就是下落阶段

在第一阶段中,刚体向上速度为正,即velocity.y>0;第二阶段下落,物体的velocity.y<0,所以我们可以通过velocity.y的正负来确定物体所处哪一个阶段,进而对物体可以有更精确的操作。

接下来,我们就要对物体跳跃阶段进行操作,首先我们需要判定物体受否在面上,并且按下了W或其它跳跃按键,触发跳跃后,我们给物体的velocity.y赋一个初始值V,代表初始速度,那么最终跳跃高度的变化为h=Vt-1/2gt2(g为重力加速度,t为时间),物体速度velocity.y=V-gt,当velocity.y=0时,物体到达最高点,此时物体高度(最高点)H=(V2)/(2g)。

接下来,物体仍然受到重力加速度的作用,物体速度velocity.y的值继续减小,变为了负值,而这也标志着物体开始下落。从图中可以看出当物体只具有一个向上的初速度并且只受重力时,它的上升时间和下落时间是一样的,T=V/g。所以,我们为了确保下落用时是上升的一半,所以我们需要改变物体的重力加速度,使它变为原来的二倍,即修改Physics2D.gravity的值,使它的y的值乘2。

这样我们就完成了一个跳跃的优化。代码如下:

//提示!本代码使用射线检测物体是否位于地面
//提示!各变量含义
//rb                   刚体组件
//jumpSpeed            跳跃初始速度
//fullSpeed            下落重力加速度倍数
//isGround             玩家是否在地面
//rayDistance          射线距离
//groundLayerMask      地面的图层
void Update()
    {
        Ground();
        if (Input.GetKeyDown(KeyCode.W) && isGround)
        {
            Jump();
        }
        if (rb.velocity.y <= 0)
        {
            Full();
        }
    }
    private void Jump()
    {
        rb.velocity = Vector2.up * jumpSpeed;
    }
    private void Full()
    {
        //重力加速度变为fullSpeed倍
        Physics2D.gravity = new Vector2(0, -9.8f * fullSpeed);
    }
    //射线检测,是否在地面
    private void Ground()
    {
        // 从物体下方投射一条射线,看它是否与地面碰撞
        RaycastHit2D hit=
        Physics2D.Raycast(transform.position,Vector2.down,rayDistance,groundLayerMask);
        if (hit.collider != null)
        {
            isGround = true;
        }
        else
        {
            isGround = false;
        }
    }

标签:进阶,物体,2D,Unity,跳跃,velocity,下落
From: https://www.cnblogs.com/CloudAndMist/p/17794105.html

相关文章

  • Java提升技术,进阶为高级开发和架构师的路线
    简介Java怎样提升技术?怎样进阶为高级开发和架构师?本文介绍靠谱的成长路线。首先点明,只写业务代码是无法成长技术的。提升技术的两个方法是:有技术大佬带有技术大佬的资料本文介绍靠谱的技术进阶资料,让你比其他人更有竞争力!Java设计模式实战链接:这里用生活例子帮助理解模式的思维,用实......
  • Java提升技术,进阶为高级开发和架构师的路线
    ​ 原文网址:Java提升技术,进阶为高级开发和架构师的路线-CSDN博客简介Java怎样提升技术?怎样进阶为高级开发和架构师?本文介绍靠谱的成长路线。首先点明,只写业务代码是无法成长技术的。提升技术的两个方法是:有技术大佬带有技术大佬的资料本文介绍靠谱的技术进阶资料,让你比......
  • 让物体动起来,Unity的几种移动方式
    一、前言在大部分的Unity游戏开发中,移动是极其重要的一部分,移动的手感决定着游戏的成败,一个优秀的移动手感无疑可以给游戏带来非常舒服的体验。而Unity中有多种移动方法,使用Transform,使用刚体Rigidbody,使用CharacterController,使用NavMesh导航系统等等等等。当然,对于新手来说,最常......
  • 类、事件与对象---Dad&Mom&Friends(进阶事件)
    接上一个笔记:https://www.cnblogs.com/StephenYoung/p/17792668.html现在增加了一个新的朋友类:Friends这个类构造如下:从上到下依次是:1、字段名称、2、要离开的事件、3、方法--离开主人家、4、Friends构造函数(方法)、5、属性---体重、6、方法--感谢、7、方法--吃席、Fri......
  • excel 2DB---excel数据批量写入数据库
    Excel2DB是一款读取excel数据自动入库的软件,支持读取xls、xlsx、csv格式。优点:1、绿色免安装2、无需单独打开软件运行、可直接cmd、rpa、python等第三方软件调用3、存储速度快、大数据读取4、可以添加自定义字段5、一次配置长期有效6、支持sheet分别(并表)存放7、支持自......
  • Unity 3D定点数物理引擎实战系列4
    1.4基于Unity整合BEPUphysicsint物理引擎实战 上一节我们详细的讲解BEPUphysicsint的物理事件。此物理引擎会产生了碰撞事件与非碰撞事件,碰撞事件大家好理解,非碰撞事件例如: 物理Entity的update事件,Entity的activation/deactivation事件等。本节课来实战如何编译BEPUphysics......
  • Unity DOTS系列之Aspect核心机制分析
      最近DOTS发布了正式的版本,我们来分享一下DOTS里面Aspect机制,方便大家上手学习掌握UnityDOTS开发。Aspect 机制概述当我们使用ECS开发的时候,编写某个功能可能需要某个entity的一些组件,如果我们一个个组件的查询出来,可能参数会写很长。如果我们编写某个功能的时候,需要enti......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(6) -- 窗口控
    在我们窗口新增、编辑状态下的时候,我们往往会根据是否修改过的痕迹-也就是脏数据状态进行跟踪,如果用户发生了数据修改,我们在用户退出窗口的时候,提供用户是否丢弃修改还是继续编辑,这样在一些重要录入时的时候,可以避免用户不小心关掉窗口,导致窗口的数据要重新录入的尴尬场景。本篇随......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(4) -- 实现Da
    在我们设计软件的很多地方,都看到需要对表格数据进行导入和导出的操作,主要是方便客户进行快速的数据处理和分享的功能,本篇随笔介绍基于WPF实现DataGrid数据的导入和导出操作。1、系统界面设计在我们实现数据的导入导出功能之前,我们在主界面需要提供给客户相关的操作按钮,如下界面所示......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表
    在我们展示一些参考信息的时候,有所会用树形列表来展示结构信息,如对于有父子关系的多层级部门机构,以及一些常用如字典大类节点,也都可以利用树形列表的方式进行展示,本篇随笔介绍基于WPF的方式,使用TreeView来洗实现结构信息的展示,以及对它的菜单进行的设置、过滤查询等功能的实现逻辑......