Character Controller Unity – Gravedad

Character Controller Unity – Gravedad

Seguimos con nuestro tutorial para aprender a usar el Character Controller y mover a tu personaje en Unity 3D 2018!!
En este video aprenderemos a aplicar la fuerza de la gravedad a nuestro jugador, haciendo que se comporte como es debido tanto si esta tocando el suelo como si está en el aire.

Script PlayerController:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour {

    float horizontalMove;
    float verticalMove;

    private Vector3 playerInput;

    public CharacterController player;
    public float playerSpeed;
    public float gravity;  
    public float fallVelocity;

    public Camera mainCamera;
    private Vector3 camForward;
    private Vector3 camRight;
    private Vector3 movePlayer;


    // Use this for initialization
    void Start()
    {
        player = GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update() {

        horizontalMove = Input.GetAxis("Horizontal");
        verticalMove = Input.GetAxis("Vertical");

        playerInput = new Vector3(horizontalMove, 0, verticalMove);
        playerInput = Vector3.ClampMagnitude(playerInput, 1);

        CamDirection();

        movePlayer = playerInput.x * camRight + playerInput.z * camForward;

        movePlayer = movePlayer * playerSpeed; 

        player.transform.LookAt(player.transform.position + movePlayer);

        SetGravity();  

        player.Move(movePlayer * Time.deltaTime);  

        Debug.Log(player.isGrounded);

    }

    //Funcion para determinar la direccion a la que mira la camara. 
    public void CamDirection()
    {
        camForward = mainCamera.transform.forward;
        camRight = mainCamera.transform.right;

        camForward.y = 0;
        camRight.y = 0;

        camForward = camForward.normalized;
        camRight = camRight.normalized;
    }

    //Funcion para la gravedad.
    public void SetGravity()         
    {
        if (player.isGrounded) 
        {                       
            fallVelocity = -gravity * Time.deltaTime; 
            movePlayer.y = fallVelocity; 
        }
        else
        {
            fallVelocity -= gravity * Time.deltaTime; 
            movePlayer.y = fallVelocity; 
        }        
    }
}

No te pierdas esta serie de tutoriales en los que aprenderemos juntos a utilizar el motor Unity 3D y crearemos nuestros propios videojuegos!

1 comentario en “Character Controller Unity – Gravedad”

  1. Hola, he seguido toda la lista de reproducción del tutorial y me he encontrado dos problemas:
    1) Esto de la gravedad, no me funciona bien cuando lo aplico. Tras hacer varios debugs me he encontrado con que IsGrounded devuelve true y false continuamente (fisicamente estando en el suelo). La forma de solucionarlo es quitando el time.deltatime de la gravedad cuando toco suelo, o bien subiendo la gravedad a más de 60…

    2) Eso me preocupa menos ya que de alguno de los dos modos se puede solucionar. Lo que me tiene loco es el video de “moverse con plataformas moviles”. Por más que lo he intentado mi personaje no se mueve con las plataformas (creo que tiene que ver con el problema anterior).

    He revisado el código varias veces y lo he rehecho todo desde cero 3 veces (porque las primeras puse cosas a mi manera).

    Te agradecería la ayuda, no sé si tiene que ver algo las nuevas versiones de Unity, o si depende del pc (tal vez no pueda simularlo bien) o qué, es rarísimo. Estoy haciendo un juego bastante chulo y hasta ahora usaba un personaje con Rigibody, pero me gustaría cambiarlo por el Character Controler si consigo hacer esto.

    Un saludo y gracias

Deja un comentario