WindowsMacSoftwareConfiguraciónSeguridadProductividadLinuxAndroidRendimientoConfiguraciónApple Todo

Cómo implementar movimiento de personajes en Unity

Editado 1 hace un día por ExtremeHow Equipo Editorial

UnityDesarrollo de JuegosAnimación3DProgramaciónSecuencias de comandosC#FísicaControlesWindowsMacLinux

Cómo implementar movimiento de personajes en Unity

Traducción actualizada 1 hace un día

Introducción

Unity es una plataforma popular de desarrollo de videojuegos que permite a los creadores dar vida a sus ideas de juegos. Uno de los aspectos fundamentales de cualquier juego es el movimiento del personaje. Ya sea un simple juego de plataformas en 2D o un mundo complejo en 3D, la forma en que se mueve un personaje puede tener un gran impacto en la experiencia de juego. Esta guía está diseñada para guiarte a través de los pasos básicos para implementar el movimiento del personaje en Unity. Cubriremos diferentes métodos, incluidos los componentes RigidBody y CharacterController, la creación de guiones básicos de movimiento en C#, y ajustes para un óptimo sentimiento de juego.

Configura tu proyecto

Antes de comenzar a programar, necesitas configurar un nuevo proyecto en Unity. Abre Unity Hub y crea un nuevo proyecto. Puedes elegir una plantilla 2D o 3D según el tipo de juego que estás creando. Nombra tu proyecto y elige una ubicación para guardarlo. Una vez creado tu proyecto, puedes comenzar a implementar el movimiento del personaje.

Añade un nuevo GameObject a tu escena. Este será tu personaje. Puedes usar un modelo 3D, una forma simple como un cubo o una esfera, o un sprite 2D si estás trabajando en un juego 2D. Para simplificar, asumiremos que estás usando un cubo básico para un personaje en 3D.

Uso de Rigidbody para el movimiento

El componente RigidBody en Unity proporciona una manera de manejar el movimiento basado en la física. Esto puede incluir gravedad, arrastre y colisiones. Para añadir un RigidBody a tu personaje, selecciona el GameObject y haz clic en Añadir Componente, luego encuentra y añade RigidBody.

        // Ejemplo de Script de C# para Movimiento con Rigidbody
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
    public float speed = 5f;
    private Rigidbody rb;
    void Start() {
        rb = GetComponent<Rigidbody>();
    }
    void Update() {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        rb.AddForce(movement * speed);
    }
}
    

Este código establece el movimiento básico utilizando las teclas de flechas o WASD. La variable speed controla qué tan rápido se mueve el personaje. El componente RigidBody manejará automáticamente las colisiones y la gravedad. Recuerda ajustar configuraciones de RigidBody como masa y arrastre para obtener la sensación de movimiento que deseas.

Uso de CharacterController para el movimiento

El CharacterController de Unity es otra forma de implementar el movimiento del personaje. Este componente no está basado en física, lo que significa que no reacciona a fuerzas o torques, pero aún así puede colisionar con objetos. A menudo se usa para lograr un movimiento suave y controlado para los personajes jugadores.

Añade el componente CharacterController a tu objeto de juego seleccionándolo y haciendo clic en Añadir Componente, luego seleccionando CharacterController.

        // Ejemplo de Script de C# para Movimiento con CharacterController
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
    public float speed = 6.0f;
    public float jumpSpeed = 8.0f;
    public float gravity = 20.0f;
    private Vector3 moveDirection = Vector3.zero;
    private CharacterController controller;
    void Start() {
        controller = GetComponent<CharacterController>();
    }
    void Update() {
        if (controller.isGrounded) {
            float moveHorizontal = Input.GetAxis("Horizontal");
            float moveVertical = Input.GetAxis("Vertical");
            moveDirection = new Vector3(moveHorizontal, 0.0f, moveVertical);
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;
            if (Input.GetButton("Jump")) {
                moveDirection.y = jumpSpeed;
            }
        }
        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);
    }
}
    

En este ejemplo, el script es un poco más complejo. El CharacterController utiliza su propio método Move, que permite un control más sofisticado. Este ejemplo involucra saltos y utiliza gravedad para mantener el personaje en el suelo. Puedes cambiar los valores de velocidad, jumpSpeed y gravedad para adaptarlos a tus necesidades.

Programación lógica de movimiento

Tanto los métodos RigidBody como CharacterController requieren scripts para controlar el movimiento. Los scripts proporcionados anteriormente son puntos de partida, pero puedes expandirte para incluir más características, como correr, agacharse o interactuar con el entorno.

Una manera útil de refinar el movimiento es aplicar aceleración y desaceleración, permitiendo que el personaje gane o pierda velocidad gradualmente en lugar de detenerse o comenzar instantáneamente. Aquí se muestra una forma sencilla de incorporar aceleración:

        // Ejemplo de Script de C# con Aceleración
public class PlayerMovement : MonoBehaviour {
    public float speed = 6.0f;
    public float acceleration = 5.0f;
    private Vector3 velocity = Vector3.zero;
    private Rigidbody rb;
    void Start() {
        rb = GetComponent<Rigidbody>();
    }
    void Update() {
        float targetSpeed = Input.GetAxis("Vertical") * speed;
        velocity.z = Mathf.MoveTowards(velocity.z, targetSpeed, acceleration * Time.deltaTime);
        Vector3 move = transform.TransformDirection(velocity);
        rb.velocity = new Vector3(move.x, rb.velocity.y, move.z);
    }
}
    

Este script utiliza `Mathf.MoveTowards` para interpolar suavemente entre el movimiento actual y el objetivo, creando una experiencia de movimiento más refinada y realista.

Funciones avanzadas de movimiento

Después de haber implementado los movimientos básicos, es posible que desees añadir funciones más avanzadas a tu personaje. Estas pueden incluir correr, doble salto y trepar:

A continuación, se muestra cómo puedes implementar correr:

        // Ejemplo de Script de C# para Correr
public class PlayerMovement : MonoBehaviour {
    public float speed = 6.0f;
    public float sprintSpeed = 12.0f;
    public float acceleration = 5.0f;
    private Vector3 velocity = Vector3.zero;
    private Rigidbody rb;
    void Start() {
        rb = GetComponent<Rigidbody>();
    }
    void Update() {
        float currentSpeed = Input.GetKey(KeyCode.LeftShift) ? sprintSpeed : speed;
        float targetSpeed = Input.GetAxis("Vertical") * currentSpeed;
        velocity.z = Mathf.MoveTowards(velocity.z, targetSpeed, acceleration * Time.deltaTime);
        Vector3 move = transform.TransformDirection(velocity);
        rb.velocity = new Vector3(move.x, rb.velocity.y, move.z);
    }
}
    

Este script verifica si se está presionando la tecla shift izquierda para determinar si se debe aplicar una velocidad de sprint.

Ajuste y optimización

Al desarrollar un juego, pasarás mucho tiempo refinando el movimiento. La sensación del movimiento de un personaje puede definir la experiencia del jugador. Aquí tienes algunos consejos para refinar el movimiento:

Conclusión

Implementar el movimiento de personajes en Unity es una habilidad fundamental en el desarrollo de videojuegos. Ya sea que estés usando movimiento basado en física con RigidBody o movimiento controlado con CharacterController, lo principal es entender los conceptos básicos y extenderse con características avanzadas. A través de la programación y el ajuste de movimiento, puedes crear una experiencia de jugador impresionante y agradable.

Si encuentras algo incorrecto en el contenido del artículo, puedes


Comentarios