Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Rotacion y movimiento con joystick

Iniciado por Asri, Mayo 16, 2017, 11:48:23 PM

Tema anterior - Siguiente tema
Buenas, tengo un problema con un player controller que llevo días sin saber como solucionar.
 
Estoy haciendo un proyecto de estudios y tenemos que hacer un minijuego 3d.
 
Mi idea es que el personaje siempre se mueva hacia donde inclino el joystick del mando de xbox. Hasta ahí bien, pero también quiero que el personaje siempre camine hacia delante, por lo que el personaje deberia rotar dependiendo de donde ponga el joystick y su movimiento ser vector3.forward.
 
La cámara y pantalla de juego son fijas, es algo así como un minijuego del mario party, o uno del "Crash Bash". Mi idea es que el movimiento del personaje fuese como el de propio Crash Bandicoot, que siempre caminaba hacia delante, no tenia movimiento lateral o rotación progresiva.
 
Para que os pongais en situacion, en el juego se puede disparar hacia delante del personaje, por lo que si solo me pudiese mover en 4 direcciones perderia parte de la gracia.
 
Si alguien sabe como hacerlo, estaría muy agradecido. En caso de ser imposible, agradeceria consejos sobre como mover al personaje.

Mayo 17, 2017, 01:27:09 PM #1 Ultima modificación: Mayo 17, 2017, 01:32:35 PM por Harsel
Por aquí te dejo un pequeño script para resolver tu problema, según he entendido:
 

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }
    void Update()
    {
        float horizontalAxis = Input.GetAxis("Horizontal");
        float verticalAxis = Input.GetAxis("Vertical");
        Vector3 facingDir = new Vector3(horizontalAxis, 0, verticalAxis);
        if (facingDir.magnitude > 0.5f)
        {
            Quaternion rotacion = Quaternion.LookRotation(facingDir, Vector3.up);
            transform.rotation = rotacion;
        }
        Vector3 direccion = Vector3.zero;
        if(horizontalAxis !=0 || verticalAxis != 0)
        {
            direccion = transform.right;
        }
        controller.SimpleMove(direccion * 3);
    }

 
Vease, la dirección de movimiento, en mi caso es transform.right, cámbiala de ser necesario.
 

Muchísimas gracias! Es perfecto y justo lo que necesitaba, te debo una cena 

Etiquetas: