Programar el comportamiento de la mira de un personaje en videojuegos es una tarea esencial para lograr una experiencia inmersiva y fluida. El manejo adecuado de sensibilidad y rotación para los movimientos puede marcar la diferencia entre un juego bien ejecutado y uno sin pulir. En esta guía, desglosaremos paso a paso cómo ajustar estos aspectos en Unity para crear un funcionamiento adecuado en tu personaje.
¿Qué variables necesitas declarar en Unity?
Para comenzar, es indispensable declarar ciertas variables en tu script que facilitarán el manejo de la sensibilidad y rotaciones. Inicialmente, se requiere definir una variable flotante para la sensibilidad de movimiento de la mira:
public float sensitivity = 100f;
Esta variable determina con qué rapidez o lentitud la mira responde a los movimientos del mouse o joystick. La sensibilidad debe ajustarse a las preferencias del jugador, ya que algunos prefieren una mayor sensibilidad para movimientos más rápidos, mientras que otros optan por menos para tener más precisión y control.
Además, requerimos declarar un Transform para nuestra posición:
publicTransform player;
Y una variable para la rotación en el eje x:
private float xRotation = 0f;
Estas variables iniciales configurarán el juego para responder adecuadamente a la entrada del jugador desde el comienzo.
¿Cómo implementar las funciones de update?
La función Update, es indispensable para manejar la lógica que se repetirá cada frame. Te guiaré en los pasos necesarios para manejar esta lógica:
Capturar el movimiento del mouse: Unity ofrece una función llamada Input.GetAxis que facilita obtener la dirección del movimiento en ambos ejes del mouse:
Actualizar la rotación: Usa el valor del mouse para ajustar la rotación en el eje x y limitar el ángulo de visión vertical. Esto se realiza utilizando la función Mathf.Clamp:
Esta configuración permite que el personaje no solo gire la cabeza para mirar hacia arriba y abajo, sino también de lado a lado eficientemente.
¿Cómo bloquear el cursor en Unity?
Un paso crucial al programar la cámara es asegurarse de que el cursor del mouse no interfiera con el juego bloqueándolo en el centro de la ventana del juego:
Cursor.lockState=CursorLockMode.Locked;
Este ajuste evita que el cursor pueda salir de la ventana del juego y que los movimientos de la cámara sean precisos y centrados.
Al seguir estos pasos, tendrás un script funcional que permite una experiencia de juego fluida y receptiva con respecto a los movimientos de la cámara y el personaje. Continúa explorando más conceptos en Unity para mejorar aún más tu proyecto. ¡El mundo del desarrollo de videojuegos es vasto y lleno de oportunidades para aprender!
Hola Profesor, tengo una pregunta, quizás estoy haciendo algo mal, ya tengo el Visual Studio, pero por alguna razón creo que no jala la librería de unity, creo que es eso ya que cuando voy poniendo el codigo no me salen las tentativas de código, ni tampoco se marcan con colores.
Hola houseperu :)
Si no sale lo que indicas, ni los colores, ni autocompletado y demás, lo más probable es que no hayas guardado el archivo. Crea una carpeta para el curso y guarda el archivo en ella con control + S desde VScode. Te debería funcionar.
Hola Johncardenasp, si tengo el proyecto guardado,pero nada, pregunta el Visual Studio es el de Microsoft verdad?
Por cierto los Scripts los abro directo de la carpeta de mi proyecto, creo que algo estoy haciendo mal.
Muchas gracias por tu ayuda
no me aparecen highlights en el codigo
En Unity debes asegurarte que el editor externo sea Visual Studio...
La ruta:
Edit > Preferences > External Tools > External Script Editor
Saludos, espero te funcione
También es importante cerrar el visual y volver a abrir el archivo para que te tome el cambio (por lo menos yo tuve que hacer esto). Saludos
Tal vez no sea algo super importante, pero me interesaria saber mas sobre como funciona Quaternion.Euler, entiendo que guarda rotaciones, pero que es una rotacion? xRotation no tenia guardada ya nuestra rotacion?
Otras dudas que me quedo del script.
transform.localRotation sobre que esta transform esta actuando? el del jugador? el de la camara?
player1.rotate entiendo que actua sobre el transform del player1 que declaramos al principio, entonces cual es la diferencia entre transform.localRotation y player1.rotate
Y la ultima, Vector3? que seria? y porque tengo que multiplicarlo por mousex?
el .LocalRotation es la rotacion del objeto en relacion a su padre mientras que el .Rotate es la rotacion absoluta del objeto en relacion con el mundo.
Si un objeto no tiene padre (es decir, existe en el nivel superior de la jerarquía de la escena) o si su padre no está rotado, la rotación local y la rotación serán iguales.
Parte de aprender a crear juegos igual es saber buscar en internet. Google siempre será tu mejor aliado.
Para el que no entendió el código.
Para aquellos que no quieren pagar o descargar la prueba de Visual Studio, pueden descargar VS Code totalmente gratis y no llega ni a los 100 megas de peso, y dotNet como compilador.
Linea x linea el mismo codigo de Brackeys en Youtube :rofl
Si no les sale el menu de atajos cuando estan codeando en visual studio cosas del unity, lo que tienen que hacer es ir al editor de unity, en edit, buscar el menu de preferences y ahi en external tools, escoger el visual studio como editor
Tengo un problema y cunado coloco el código no me sirve el asistente alguien me podria ayudar porfavor
{Cursor.lockState=CursorLockMode.Locked;}// Update is called once per framevoidUpdate(){ float mouseX =Input.GetAxis("Mouse X")*Sensitivity*Time.deltaTime; float mouseY =Input.GetAxis("Mouse Y")*Sensitivity*Time.deltaTime; xRotation =-mouseY; xRotation =Mathf.Clamp(xRotation,-90, 75f); transform.localRotation=Quaternion.Euler(xRotation, 0f, 0f); player1.Rotate(Vector3.up* mouseX);}}
Holaas, de casualidad alguien me podria recomendar unas buenas extensiones para trabajar en visual con C#, veo que al profe se le completan algunas cosas, pero no se exactamente cuales tiene él, graciasss :)
oigan, esto sale en el curso de C# de la carrera de videojuegos?
Hola, el curso de C# es básico, es casi desde cero, pero es el inicio de esta carrera.
Hola, profesor.
Tengo un problema con la mira de mi juego.
Hay un error que dice ''Assets/scripts /Mira. Cs(23,23): error CS0103: The name imput doesn't exist in the current context'' y no sé qué hacer. No sé si debo definir '' imput'' o ''imput'' no aparece en la biblioteca del visual studio Code. ¿Qué debería hacer?
Hola, la palabra correcta es "Input" en mayúscula y con 'n' en vez de 'm'. Viene de entrada en inglés.
Si sigues teniendo problemas puedes compartir el código. Saludos.
Hola, porque usa localrotation?
Alguien me puede ayudar con este error:
"Library\PackageCache\com.unity.textmeshpro@3.0.6\Scripts\Editor\TMP_PackageUtilities.cs(1008,84):error CS0103: The name 'VersionControlSettings' does not exist in the current context".
holaaa!! para los que cuando escriban el codigo por ejemplo el "Transform" y les salga en blanco como texto nromal, es decir, VS code no lo esta reconociendo, asi como me paso a mi, solo deben de colocar el visual studio code como editor predetermido en : EDDIT + PREFFERENCES + EXTERNAL TOOLS y le pinchan donde dice external scrip editor y lo cambian a su version de VS code y listo :D
No me gusta quejarme pero que clase tan mala... Las explicaciones son totalmente insuficientes. Despues de haber pasado clases completas de temas casi irrelevantes ahora mete un monton de conceptos sin ninguna claridad ni orden... Es terrible que uno tenga que ir a google a buscar aclaraciones cuando se supone que este contenido pagado tiene que ser mejor que el contenido gratuito que se encuentra en internet.
Una pregunta ¿Por qué se establece esta instrucción?