Unity2D 解决空中无限跳跃以及黏墙问题

28 阅读2分钟

一、解决空中无限跳跃

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

在文件夹内新建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文档:docs.unity3d.com/cn/2022.3/S…

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