2-5. 物理环境监测及绘制

物理环境监测代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PhysicsCheck : MonoBehaviour
{
    [Header("监测参数")]
    public Vector2 bottomOffset;
    public float checkRaduis;
    public LayerMask groundLayer;

    [Header("状态")]
    public bool isGround;

    void Update()
    {
        Check();
    }

    public void Check()
    {
        // 监测地面
        isGround = Physics2D.OverlapCircle((Vector2)transform.position + bottomOffset, checkRaduis, groundLayer);
    }

    private void OnDrawGizmosSelected()
    {
        // 绘制监测区
        Gizmos.DrawWireSphere((Vector2)transform.position + bottomOffset, checkRaduis);
    }
}

然后在 Jump 方法中判断,只有在地面上才能跳跃

    private void Jump(InputAction.CallbackContext context)
    {
        // Debug.Log("JUMP");
        if (physicsCheck.isGround)
        {
            // 只有在地面上才能进行跳跃

            // 这里使用的是 ForceMode2D.Impulse,表示瞬间修改人物上方向的速度为 jumpForce 对应的数值
            rb.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
        }
    }

最终结果如下图所示

项目相关代码

代码仓库:https://gitee.com/nbda1121440/2DAdventure.git

标签:20240224_0323

posted @ 2024-02-24 03:34  hellozjf  阅读(26)  评论(0编辑  收藏  举报