Unity2D横版游戏之平台跳跃效果

Unity2D横版游戏之平台跳跃效果

简单介绍

平台跳跃效果。玩家允许在平台下方跳跃到平台上方,并且可以在平台上方站立,同时玩家在平台上方允许通过下跳操作到达平台下方。

实现步骤

(一)将玩家的图片设置为 Player、将平台的图层设置为 Platform。

(二)为平台游戏对象创建 XXXCollider2D 组件,并勾选 Used By Effector。

(三)为平台游戏对象创建 Rigidbody2D 组件,设置 BodyType 为 Static。

(四)为平台游戏对象创建 PlatformEffector2D 组件。

(五)编写脚本,实现思路如下:当玩家进行下跳操作时修改 PlatformEffector2D 组件的 colliderMask 的值,禁用平台对玩家的碰撞图层,当玩家下跳操作完成时再恢复平台对玩家的碰撞图层。通过在玩家头顶发出射线并检测是否与平台图层发生碰撞,如果碰撞则说明下跳操作完成。参考代码如下。

public class DemoFSMState : BaseFSMState
{
    private Collider2D _platformCollider;
    private PlatformEffector2D _platformEffector;

    public DemoFSMState(FiniteStateMachine fsm, DemoParameter parameter) : base(fsm, parameter)
    {
    }

    public override void OnEnter()
    {
        _platformCollider = Parameter.platformCollider;
        _platformEffector = Parameter.platformEffector;
        _platformEffector.colliderMask &= ~(1 << LayerMask.NameToLayer("Player"));
    }

    public override void OnUpdate()
    {
        Vector3 position = Parameter.transform.position;
        Vector2 origin = new Vector2(position.x, position.y + Parameter.collider.size.y);
        if (Physics2D.Raycast(origin, Vector2.up, 1f, LayerMask.GetMask("Platform")).collider == _platformCollider)
        {
            _platformEffector.colliderMask |= 1 << LayerMask.NameToLayer("Player");
        }
    }
}

禁用碰撞图层

XXX.colliderMask &= ~(1 << LayerMask.NameToLayer("XXX"))

开启碰撞图层

XXX.colliderMask |= 1 << LayerMask.NameToLayer("XXX");

后记

由于个人能力有限,文中不免存在疏漏之处,恳求大家斧正,一起交流,共同进步。

posted @ 2024-05-01 17:01  珂霖  阅读(5)  评论(0编辑  收藏  举报