首页 > 其他分享 >跳跃系统的完善

跳跃系统的完善

时间:2024-07-10 18:28:40浏览次数:17  
标签:Collision2D 完善 角色 Grouding 系统 collision 跳跃 amp col

 Jump()
private void Jump()
{
    if (Input.GetKey(KeyCode.Z))
    {
        jumpTimer -= Time.deltaTime;
        if (jumpTimer > 0)
        {
            rigi.AddForce(new Vector2(0, jumpForce), ForceMode2D.Force);
            animator.SetTrigger("jump");
        }   
    }
}


1.功能:这个方法用于处理角色的跳跃行为。
2.详细分析:
3.当按住键盘上的 Z 键时,Input.GetKey(KeyCode.Z) 返回 true。
4.jumpTimer 是一个倒计时器,每帧减去 Time.deltaTime 的时间。
5.如果 jumpTimer 大于 0,表明角色仍然可以执行跳跃。
6.使用 rigi.AddForce(new Vector2(0, jumpForce), ForceMode2D.Force); 给角色施加向上的力,以实现跳跃效果。
7.调用 animator.SetTrigger("jump"); 触发动画中的跳跃状态。

方法 OnCollisionEnter2D(Collision2D collision)
private void OnCollisionEnter2D(Collision2D collision)
{
    Grouding(collision, false);
}


8.功能:处理角色与其他物体发生碰撞时的逻辑。
9.详细分析:调用了 Grouding(collision, false);,传递了碰撞信息和一个布尔值 false,表示角色不是离开状态。

方法 OnCollisionStay2D(Collision2D collision)
private void OnCollisionStay2D(Collision2D collision)
{
    Grouding(collision, false);
}


10.功能:处理角色在与其他物体保持碰撞时的逻辑。
11.详细分析:同样调用了 Grouding(collision, false);,表示角色没有离开状态。

方法 OnCollisionExit2D(Collision2D collision)
private void OnCollisionExit2D(Collision2D collision)
{
    Grouding(collision, true);
}


12.功能:处理角色与其他物体结束碰撞时的逻辑。
13.详细分析:调用 Grouding(collision, true);,传递了碰撞信息和一个布尔值 true,表示角色离开了地面

 

方法 Grouding(Collision2D col, bool exitState)
private void Grouding(Collision2D col, bool exitState)
{
    if (exitState)
    {
        if (col.gameObject.layer == LayerMask.NameToLayer("Terrain"))
            isOnGround = false;
    }
    else
    {
        if (col.gameObject.layer == LayerMask.NameToLayer("Terrain") && !isOnGround && col.contacts[0].normal == Vector2.up)
        {
            isOnGround = true;
            JumpCancle();
        }
        else if (col.gameObject.layer == LayerMask.NameToLayer("Terrain") && !isOnGround && col.contacts[0].normal == Vector2.down)
        { 
            JumpCancle();
        }
    }
    animator.SetBool("isOnGround", isOnGround);
}


14.功能:用于检测角色是否在地面上,并根据碰撞信息和 exitState 处理不同的逻辑。
15.详细分析:
16.如果 exitState 为 true,表示角色离开地面,将 isOnGround 设置为 false。
17.如果 exitState 为 false,表示角色在地面上,根据碰撞的法线方向判断角色是否接触到地面。
18.如果角色从上往下碰到地面 (col.contacts[0].normal == Vector2.up),将 isOnGround 设置为 true,并调用 JumpCancle() 取消跳跃动画触发。
19.如果角色从下往上碰到地面 (col.contacts[0].normal == Vector2.down),只调用 JumpCancle()。

方法 JumpCancle()
private void JumpCancle()
{
    animator.ResetTrigger("jump");
    jumpTimer = 0.5f;
}


20.功能:取消跳跃动画的触发,并重置 jumpTimer。
21.详细分析:
22.调用 animator.ResetTrigger("jump"); 取消跳跃动画的播放状态。
23.将 jumpTimer 重置为 0.5 秒,以限制跳跃的持续时间。

总结
这段代码实现了基本的角色跳跃和地面检测逻辑。通过检测角色与地面(或其他指定层的物体)的碰撞,控制角色的跳跃行为,并通过动画系统(animator)来管理角色的动画状态。确保在使用时,碰撞层和动画触发器的命名与实际场景中的设置相匹配,以确保功能的正确性和稳定性。

标签:Collision2D,完善,角色,Grouding,系统,collision,跳跃,amp,col
From: https://blog.csdn.net/2301_80679764/article/details/140303697

相关文章

  • 基于springboot牙科就诊管理系统源码
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本牙科就诊管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事......
  • 基于springboot滑雪场管理系统源码和论文
    滑雪场管理系统的设计与实现摘要近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设计系统有一个初步的认识与了解,确定滑雪场管理系统的总体功能模块。然后,详细设计系统的主要功能模块,通过数据库设计过程......
  • 重置DedeCMS系统管理员账号与密码
    DedeCMS 系统的管理员账号与密码都是存储在数据库中的。如果发生密码丢失或其它情况,我们可以通过重写数据库(数据表)的方式来重置 DedeCMS 的账号与密码。如此操作的前置条件是可以登录并管理数据库。如果没有或拿不到数据库的管理权限,那就行不通了。第一步:登录数据库​如果是......
  • 你真的懂多线程吗?多线程 并行处理 CPU 操作系统
    了解多线程、并行处理首先需要了解什么CPU、CPU核数、操作系统CPU物理数即电脑拥有的物理CPU数量,普通电脑一般只有一个CPU插槽,也就是只有一个物理CPU。我们日常说的CPU,就是指封装好的一个物理CPU,作为商品进行售卖。但在编程讨论时,某些情况下,我们说的CPU含义又是指其中一个运算......
  • 推送单据信息到第三方系统(NC65)
    此处以预付款申请单推动付款结算单到NC系统为例 目录一、Action二、Service三、ServiceImpl四、 FcVoucherUtil的 settlementXML方法(json转xml的方法)五、 FcVoucherUtil的doPost方法(推送NC的方法)一、ActionpublicActionFormgetZhiwu(ActionMapping......
  • 基于8255 8253电子琴仿真系统
    1.设计内容硬件模拟:使用Proteus提供的8086处理器模型进行仿真。模拟外部RAM和ROM,以存储程序代码、音频样本和临时数据。使用虚拟的输入设备模拟琴键按下和释放的输入信号。功能实现:琴键输入模拟:通过逻辑开关或者按钮模拟琴键的按下和释放动作。音频生成模拟:使用808......
  • 撸包小游戏对接广告联盟APP系统开发源码搭建
    “撸包小游戏广告联盟APP”源码搭建涉及多个关键步骤,以下是一个简化的流程:市场调研与需求分析:对市场进行深入调研,了解目标用户群体和他们的需求。分析竞争对手的小游戏和广告策略,确定自己小游戏的特色和定位。游戏开发:根据市场调研的结果,设计并开发具有吸引力的撸包小......
  • springboot公寓租赁系统-计算机毕业设计源码03822
    目 录摘要1绪论1.1研究背景与意义1.2选题背景1.3论文结构与章节安排2 公寓租赁系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3系统用例分......
  • Java计算机毕业设计生鲜仓储管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着生鲜电商的蓬勃发展和消费者对食品新鲜度、安全性的日益重视,生鲜仓储管理成为了保障供应链顺畅与产品质量的关键环节。然而,传统的生鲜仓储管理模......
  • PLM是什么?一文读懂PLM系统的定位、价值、特点、功能(流程行业&离散行业)、实施、以及发
    随着全球制造业向智能化、数字化转型,产品生命周期管理(PLM)系统已成为企业优化研发流程、加速产品上市速度的关键工具。本文将带您深入了解PLM,了解研发管理的最佳实践。01、PLM系统的定位PLM即产品生命周期管理,ProductLifecycleManagement的简称。PLM系统包括三个方面的意涵:......