2-4. 实现人物跳跃

InputAction 添加跳跃键

代码实现

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Scripting.APIUpdating;

public class PlayerController : MonoBehaviour
{
    public PlayerInputControl inputControl;
    private Rigidbody2D rb;
    public Vector2 inputDirection;
    [Header("基本参数")]
    public float speed;
    public float jumpForce;

    private void Awake()
    {
        // 获取 Player 上面的刚体组件
        rb = GetComponent<Rigidbody2D>();

        inputControl = new PlayerInputControl();
        // 按下键盘上的空格键,或者手柄上的 EAST 键,就会触发 Jump 函数
        inputControl.Gameplay.Jump.started += Jump;
    }

    private void OnEnable()
    {
        inputControl.Enable();
    }

    private void OnDisable()
    {
        inputControl.Disable();
    }

    private void Update()
    {
        inputDirection = inputControl.Gameplay.Move.ReadValue<Vector2>();
    }

    private void FixedUpdate()
    {
        // 在 FixedUpdate 里面对刚体进行操作
        Move();
    }

    public void Move()
    {
        // 设置刚体的速度,这样刚体就能移动了
        rb.velocity = new Vector2(inputDirection.x * speed, rb.velocity.y);

        // 初始人物是面朝 x 轴正方向的
        int faceDir = 0;
        if (transform.localScale.x > 0)
        {
            faceDir = 1;
        }
        else if (transform.localScale.x < 0)
        {
            faceDir = -1;
        }
        // 输入是 x 轴正方向的时候面朝也是 x 轴正方向
        // 输入是 x 轴负方向的时候面朝也是 x 轴负方向
        if (inputDirection.x > 0)
        {
            faceDir = 1;
        }
        if (inputDirection.x < 0)
        {
            faceDir = -1;
        }

        // 人物翻转
        transform.localScale = new Vector3(faceDir * Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z);
    }

    private void Jump(InputAction.CallbackContext context)
    {
        // Debug.Log("JUMP");
        // 这里使用的是 ForceMode2D.Impulse,表示瞬间修改人物上方向的速度为 jumpForce 对应的数值
        rb.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
    }
}

我对参数的思考

我设定人物跑步的时候,最快速度是 5米/秒,垂直起跳的时候最高速度是 5米/秒,这样人物可以跳上1米高的平台,看起来更加符合现实,虽然游戏就是游戏,没必要按现实来

项目相关代码

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

标签:20240224_0258

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