using UnityEngine;

[RequireComponent(typeof(Rigidbody2D))]

public class PlayerMovement2D : MonoBehaviour

{

public float 走速 = 5f;

public float 跳跃力 = 12f;

public float 跌落速度 = 2.5f;

// 检测是否在地面上的变量
public Transform 地面检测点;

public float 检测半径 = 0.15f;

public LayerMask 地面层;

// Rigidbody2D
private Rigidbody2D rb;

private bool 是否在地面上 = false;

void Awake()

{

    rb = GetComponent<Rigidbody2D>();

    rb.freezeRotation = true;

}

void Update()

{

    // 检测是否在地面上
    是否在地面上 = 地面检测点 != null && Physics2D.OverlapCircle(地面检测点.position, 检测半径, 地面层);

    float h = 0f;

    if (Input.GetKey(KeyCode.A)) h -= 1f;

    if (Input.GetKey(KeyCode.D)) h += 1f;

    // 纵向速度
    Vector2 v = rb.linearVelocity;

    v.x = h * 走速;

    rb.linearVelocity = v;

    // 如果按下W键并且在地面上
    if (Input.GetKeyDown(KeyCode.W) && 是否在地面上)

    {

        v = rb.linearVelocity;

        v.y = 跳跃力;

        rb.linearVelocity = v;

    }

}

void FixedUpdate()

{

    // 如果纵向速度小于0
    if (rb.linearVelocity.y < 0f)

    {

        rb.linearVelocity += Vector2.up * Physics2D.gravity.y * (跌落速度 - 1f) * Time.fixedDeltaTime;

    }

}

}