Jump to content
Sign in to follow this  
benigno p

Necesito que mi personaje vaya a donde el puntero del raton.

Recommended Posts

Buenas chicos, alguno me podria ayudar como hacer que mi personaje (que ya lo tengo programado con WASD) vaya a donde este el mouse, es decir, si yo coloco el mouse hacia delante,  y le doy a la S, el va a ir hacia atras, pero viendo hacia delante, y si voy a la derecha presionando D, , pero el mouse esta a la izquierda, que siempre mire a donde estoy apuntando, podria hacer eso?

Share this post


Link to post
Share on other sites

Buenas!! Bueno, se me ocurre algo rápido. Supongo que estamos hablando de un juego 3D, no? Si es así, podrías capturar una posición en el terreno con la función de Physics.Raycast. Entonces, con un transform.LookAt() en el objeto del personaje ya podrías hacer que la mirase. Después sería hacer el movimiento relativo en vez de global.

Confírmame si quieres un movimiento en 3D, y si es así puedo hacerte algún script rápido de ejemplo.

EDIT: He sacado un rato y te he hecho el script para un movimiento 3D. Te lo he comentado, aunque es bastante sencillito. Se puede optimizar, pero creo que ya es suficiente para que te hagas una idea de cómo lo haría yo. Ya me dices si te sirve!!

using UnityEngine;

namespace LookAtCursorMovement.Player
{
    public class PlayerMovement : MonoBehaviour
    {
        /*
         * El jugador debería estar compuesto de la siguiente manera:
         *
         * Player (con este script añadido)
         * |> Modelo 3D
         * |> Cámara
         */
        
        public Camera playerCamera;             // La cámara dentro del jugador.
        public GameObject playerModel;          // El modelo 3D del jugador.
        public float movementMultiplier = 1f;   // Variable para controlar la velocidad de movimiento.
        private Vector2 movementAxis;           // Posición a la que el jugador mirará y se moverá en relación.

        private void Update()
        {
            /*
             * Esto controlará con el cursor la posición a la que queremos mirar en el mundo.
             */
            var ray = playerCamera.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out var hit) && hit.transform.CompareTag("Terrain"))
                movementAxis = new Vector2(hit.point.x, hit.point.z);

            /*
             * Esto hace que el modelo 3D mire hacia la posición del cursor.
             */
            playerModel.transform.LookAt(new Vector3(movementAxis.x, 
                playerModel.transform.position.y, movementAxis.y));

            /*
             * Esto moverá a nuestro jugador pulsando las teclas WASD, relativas a la rotación del modelo 3D.
             */
            var inputX = Input.GetAxis("Horizontal");
            var inputY = Input.GetAxis("Vertical");

            var movementDir = 15 * Time.deltaTime * movementMultiplier *
                              (playerModel.transform.rotation * new Vector3(inputX, 0, inputY)); 
            
            transform.Translate(movementDir, Space.Self);
        }
    }
}

 

Edited by edgargaza

Share this post


Link to post
Share on other sites

Buenas amigo, si, total, es un personaje 3D, pero aun no le hago animacion de movimiento, pero la idea es que tenga, lo que quiero es que vea siempre a donde este el raton indiferentemente a donde me mueva.

 

Y hermanito, probe tu script, y me da fallo la camara.. xD no se que podria ser, ando resolviendo.

Edited by benigno p

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...