Unity crea un personaje 2D móvil

Crea personajes y escenas.

Primero creamos un personaje, aquí creé una nueva cápsula para usar como jugador y un cuadrado para usar como suelo.
Insertar descripción de la imagen aquí
A continuación, agregue un colisionador y un cuerpo rígido al personaje, y un colisionador al suelo. Luego agregamos una restricción del eje Z al cuerpo rígido del jugador para evitar que se incline. Como se muestra abajo:
Insertar descripción de la imagen aquí

Al mismo tiempo, agrega un objeto vacío como subobjeto al personaje para emitir rayos al suelo y detectar si toca el suelo.
Coloca el Ground Check debajo de los pies del personaje.

crear terreno

A continuación necesitamos crear una nueva capa para representar el suelo.
Cambie el nombre del cuadrado a Tierra y modifique su capa a Tierra.
Insertar descripción de la imagen aquí

Guión de control de personajes

Luego cree un nuevo script CharacterController2D para controlar el personaje. Monte este script en el reproductor.

revisa el suelo

Para implementar la función de salto, necesitamos detectar la existencia del suelo, si el jugador está en el suelo y presiona la tecla de salto, podrá saltar.
Hay varias formas de detectar el suelo, como agregar un disparador de subobjeto al personaje y usar el disparador para detectar el suelo. También puedes emitir rayos a tus pies o puedes realizar una detección de colisión en un área para ver si hay algún terreno. Este artículo adopta el último método.

Necesitamos utilizar el método Physics2D.OverlapCircle, que se utiliza para detectar colisiones 2D. Crea un área circular en una ubicación específica de la escena y luego detecta si hay colisiones con otros objetos en esta área.

Una de las sobrecargas de este método se muestra a continuación, que es la sobrecarga que usaremos:

public static Collider2D OverlapCircle(Vector2 point, float radius, int layerMask)

Los significados de los parámetros son los siguientes:

  • punto: Un vector bidimensional que representa la posición central del círculo. Este parámetro especifica las coordenadas del punto central de detección del área circular. Es decir, con el punto como centro y el radio dado como radio, se crea un área circular para la detección de colisiones.

  • Radio: Representa el radio del área circular. Este parámetro determina el tamaño del rango para la detección de colisiones. Cuanto mayor sea el radio, mayor será la probabilidad de que se detecten objetos en colisión.

  • LayerMask: especifica la capa que se utilizará para la detección de colisiones. Las capas son un mecanismo en Unity para controlar la visibilidad de los objetos y las interacciones de colisión. Utilice LayerMask para limitar o excluir capas específicas de la detección de colisiones.

Entre ellos, el punto y el radio son parámetros obligatorios, mientras que LayerMask es opcional. Pero necesitamos usarlo aquí para detectar el terreno por separado.

Para el punto, usamos la posición del subobjeto de carácter creado antes. Para el radio, creamos un atributo separado para indicar el rango que puede detectar. Por supuesto, este valor debe ser menor. Si es demasiado grande, la detección será inexacto, incluso si salta. También puede detectarse en el suelo.
La definición de raius es la siguiente:

private float groundCheckRadius = 0.2f;

Luego escribimos el código de detección de la siguiente manera:

// 检测角色是否与地面接触
isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);

A continuación se muestra el código completo, cópielo directamente en su script y luego podrá ejecutarlo.

using UnityEngine;

public class CharacterController2D : MonoBehaviour
{
    
    
    public float speed = 5f;
    public float jumpForce = 5f;
    public Transform groundCheck;
    public LayerMask groundLayer;

    private Rigidbody2D rb;
    private bool isGrounded;
    private float groundCheckRadius = 0.2f;

    void Start()
    {
    
    
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
    
    
        // 检测角色是否与地面接触
        isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);

        // 获取水平输入
        float moveInput = Input.GetAxisRaw("Horizontal");

        // 应用水平速度
        rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);

        // 角色跳跃
        if (Input.GetButtonDown("Jump") && isGrounded)
        {
    
    
            rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
        }
    }
}

A continuación, arrastre el subobjeto Ground Check del jugador a la propiedad Ground Check del componente y luego seleccione la capa de suelo que configuramos previamente para Ground Layer.
Insertar descripción de la imagen aquí

resultado de la operación

El resultado de la carrera se muestra en la siguiente figura: puedes correr y saltar:
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_44499065/article/details/132539951
Recomendado
Clasificación