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;
}
}
}
评论 (0)