benigno p 0 Report post Posted March 29 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? Quote Share this post Link to post Share on other sites
edgargaza 1 Report post Posted March 30 (edited) 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 March 30 by edgargaza Quote Share this post Link to post Share on other sites
benigno p 0 Report post Posted March 30 (edited) 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 March 30 by benigno p Quote Share this post Link to post Share on other sites