Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Asri en Mayo 16, 2017, 11:48:23 PM

Título: Rotacion y movimiento con joystick
Publicado por: Asri en Mayo 16, 2017, 11:48:23 PM
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.
Título: Rotacion y movimiento con joystick
Publicado por: Harsel en Mayo 17, 2017, 01:27:09 PM
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.
 
(https://media.giphy.com/media/xUA7bfW9ceHiBcabgA/giphy.gif)
Título: Rotacion y movimiento con joystick
Publicado por: Asri en Mayo 17, 2017, 04:25:44 PM
Muchísimas gracias! Es perfecto y justo lo que necesitaba, te debo una cena