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

发布时间 2023-12-13 15:37:03作者: 心霖の雨

一、解决空中无限跳跃

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

在文件夹内新建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