首页 > 其他分享 >Unity引擎2D游戏开发,解决空中无限跳跃以及黏墙问题

Unity引擎2D游戏开发,解决空中无限跳跃以及黏墙问题

时间:2023-12-13 15:47:42浏览次数:57  
标签:groundLayer 检测 2D checkRadius Unity Player 黏墙 public

一、解决空中无限跳跃

解决空中无限跳跃的根本就是添加落地检测,即在地面上才能进行跳跃(二段跳功能以后再开发)

在文件夹内新建PhysicsCheck物理检测脚本

在里面开发人物物理检测相关功能

image

添加isGround布尔值变量,接触地面则为1,空中则为0。

以及两种检测变量:checkRadius检测半径 groundLayer检测对象层

[Header("状态")]
public Boolean isGround;
[Header("检测参数")]
// 检测半径
public float checkRadius;
public LayerMask groundLayer;

新建Check方法,由于是要持续监测,所以需要在Update方法内进行调用检测方法

private void Update()
{
    Check();
}
public void Check()
{
    // 检测地面
    isGround = Physics2D.OverlapCircle((Vector2)transform.position + buttonOffset, checkRadius, groundLayer);
}

Physics2D.OverlapCircle文档:https://docs.unity3d.com/cn/2022.3/ScriptReference/Physics2D.OverlapCircle.html

transform.position即以人物Player刚体轮廓的基准点为检测中心点,该基准点也是裁切人物素材时,圆圈的那一点。
image

buttonOffset为检测中心偏离人物中心y轴时,加入的偏移量。

checkRadius检测半径,值越小,检测严格程度越高。

groundLayer检测层级,此处功能则是以地面为检测层。

创建自定义的groundLayer检测层级

因为要以地面进行碰撞检测,所以将platform列为检测层

image
选中platform,选中Layer下拉菜单,点击Add Layer
image
然后,在列表中,写入Ground,则新建了一个自定义的层级
image
即可在PlatForm中选中Ground
最后,选择人物Player,在刚刚创建的物理检测脚本的Component中,GroundLayer选择刚刚新建的层级——Ground
image

二、黏墙问题

由于给人物Player创建了2D刚体,所以会赋予物理属性——摩擦力,于是碰撞在墙壁时,会因为摩擦力无法受到重力的影响

在Settings文件夹中,创建PhysicsMaterial文件夹,并创建Physics Material 2D
image

将Friction设置为0,即光滑表面,没有摩擦力
image

将此Material赋予人物Player的2D刚体
image

标签:groundLayer,检测,2D,checkRadius,Unity,Player,黏墙,public
From: https://www.cnblogs.com/xinlindeyu/p/17899168.html

相关文章

  • Unity升级到2022版本后,打开Spine会卡住
    1)Unity升级到2022版本后,打开Spine会卡住2)iPhone在同时播放多个音效的时候会压低某些音源的音量3)在Y77手机上出现IMGSRV:GetMainShaderConstantBufferBaseAddress:Unsupported4)UE4打包后在部分安卓机型出现“花屏”这是第364篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖......
  • Unity引擎2D游戏开发,C#实现人物跳跃
    一、Component内,实现变量参数分栏[Header("XXXX")]二、在新建的InputActions中添加跳跃绑定三、在2D刚体所绑定的C#代码中调用InputActions中新建的跳跃动作在unity中,跳跃动作相当于对2D刚体施加Y轴方向的力。因此,增加一个力数值的变量jumpForce。publicfloatjumpF......
  • Unity3D 第一人称角色控制器,第一人称相机,摄像机的关系详解
    Unity3D是一款强大的游戏开发引擎,可以用于创建各种类型的游戏。在游戏中,第一人称角色控制器、第一人称相机和摄像机是密切相关的组件,它们共同协作来实现游戏的第一人称视角。下面将详细解释它们之间的关系,并给出代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游......
  • 如何在Unity 3D项目中新建URP项目(Unity版本2021.3.29)
    Step1在UnityHub中新建3D项目Step2在新建好Unity项目当中选择window=>PackageManager=>选择UnityRegistry并搜索UniversalRP点击Install安装Step3在PackageManager中安装完成后,回到Unity编辑器当中查看项目Package发现新增CoreRPLibrary和UniversalRP证明UR......
  • 「杂题乱刷」CF1272D
    题目链接CF1272DRemoveOneElement题意简述给定一个长度为\(n\)的序列,你需要求出至多删除一个数后的这个序列的最长上升子串。解题思路首先我们可以想一下这题的弱化版,给定一个长度为\(n\)的序列,你需要求出至多删除一个数后的这个序列的最长上升子序列。这题我们可以......
  • 【开源项目推荐】-支持GPT的智能数据库客户端与报表工具——Chat2DB
    2023年是人工智能爆火的一年,ChatGPT为首的一系列的大模型的出现,让生成式人工智能彻底火了一把。但有人会说,GPT对于我们数据开发来说并没有什么作用啊?今天为大家推荐的开源项目,就是GPT在数据领域的一个优秀实践项目。让我们一起来看看吧~Chat2DB是一个集成了ChatGPT功能的数据库S......
  • Unity3D帧同步的原理以及项目开发中可能遇到的问题与解决方案
    一、Unity3D帧同步的原理帧同步是指将游戏中的每一帧的状态数据同步给所有的客户端,使得所有客户端的游戏画面都保持一致。在Unity3D中,帧同步一般分为两种模式:客户端模式和服务器模式。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开......
  • unity判断点是否在长方体内部
    usingUnityEngine;publicclassCubeCheck:MonoBehaviour{//长方体的位置、旋转和尺寸publicVector3position=newVector3(0,0,0);publicQuaternionrotation=Quaternion.identity;publicVector3size=newVector3(1,1,1);public......
  • unity Transform 的 Rotate(xAngle: float, yAngle: float, zAngle: float, relativeT
    publicclassdemoword2:MonoBehaviour{//StartiscalledbeforethefirstframeupdatevoidStart(){//transform.Rotate(60,70,80,Space.World);//eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴//......
  • 说说Unity发布WebGL的那些事儿-优化篇
    1.下载Unity2020.1和更高的版本(因为Unity从这个版本之后对WebGL进行了优化)2.如果没有必须后台运行的必要就关闭后台运行P->ResolutionandPresentation->RunInBackGround3.修改一个合适的加载页面(尽量小加载页能让人时间感降低)因为加载的进度条是与数据加载有关与加载到引......