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");

后记

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

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中实现2D平台跳跃的方法有很多种,以下是其中一种实现方式: 1. 创建一个2D角色和一个平台,确保它们都有刚体组件。 2. 在角色上添加一个 Box Collider 2D 组件,并将其设置为触发器。 3. 在平台上添加一个 Box Collider 2D 组件,并将其设置为非触发器。 4. 在角色上添加一个 Rigidbody 2D 组件,并启用重力。 5. 在角色的脚下添加一个 Empty GameObject 作为 Ground Check,并将其命名为 "GroundCheck"。 6. 在 Ground Check 上添加一个 Box Collider 2D 组件,并将其设置为触发器。 7. 创建一个名为 "PlayerMovement" 的 C# 脚本,并将其附加到角色上。 8. 在 PlayerMovement 脚本中添加以下代码: ``` public class PlayerMovement : MonoBehaviour { public float speed = 5f; public float jumpForce = 10f; public Transform groundCheck; public float groundRadius = 0.2f; public LayerMask whatIsGround; private bool isGrounded; private Rigidbody2D rb; void Start() { rb = GetComponent<Rigidbody2D>(); } void FixedUpdate() { float moveHorizontal = Input.GetAxis("Horizontal"); rb.velocity = new Vector2(moveHorizontal * speed, rb.velocity.y); isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, whatIsGround); } void Update() { if (isGrounded && Input.GetKeyDown(KeyCode.Space)) { rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse); isGrounded = false; } } } ``` 9. 在 Unity 中选择角色并检查 PlayerMovement 脚本。将 Speed 和 Jump Force 设置为所需的值。 10. 运行游戏并尝试跳跃。如果一切正常,你的角色应该可以在平台上自由移动,并且可以通过按空格键来跳跃

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值