Cuando en la clase pasada vimos el
=-
Conocer el motor de juegos Unity en 3D
¿Qué vamos a aprender? Historia y evolución de los motores de videojuegos
¿Qué hay detrás de un videojuego? Arte, narrativa, mecánicas, sistemas
Instalación de Unity y Unity Hub
Iniciando nuestro proyecto en Unity
Mundo tridimensional: cómo funcionan los gráficos en una computadora
Mundo tridimensional: cómo procesa los movimientos la computadora
Creando nuestro terreno: importando paquetes y assets del asset store
Importando los standard assets para importar vegetación
Ajuste de cámara de nuestro terreno
Texturizando y agregando vegetación a nuestro terreno
Creando nuestro controlador de FPS
Creación del controlador de nuestro FPS
Programando nuestro script de mira
Revisión del código y bugfixing
Control y movimiento del personaje
Importando nuestra arma a Unity
Programando el comportamiento de nuestra arma con Raycast
Cómo funcionan los colliders
Creación de enemigos estáticos
Terminar los enemigos
¿Cómo continuar tu ruta de aprendizaje profesional?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
La calibración y gestión adecuada del mouse en Unity son elementos esenciales para garantizar una experiencia de usuario fluida y personalizada. A través del código en Unity, podemos ajustar cómo se reciben y procesan los movimientos del mouse. Esto es particularmente útil cuando se desarrollan juegos o aplicaciones inmersivas en 3D. Empezamos configurando la sensibilidad del mouse, que puede ser ajustada al gusto del jugador gracias a la creación de interfaces de usuario (UI), posibilitando una experiencia adaptada y personalizada.
El juego de transformaciones es vital en el desarrollo de videojuegos, especialmente en Unity, ayudando a manejar los movimientos y rotaciones de los objetos en 3D. El componente transform
es una poderosa herramienta que nos permite manipular la posición, rotación y escala de los objetos dentro del espacio tridimensional del juego. Es fundamental para mover o rotar la cámara y para desplazar a los personajes, haciendo que todo se sienta natural y responda correctamente a las interacciones del jugador.
Transform playerTransform;
float mouseX = Input.GetAxis("Mouse X");
playerTransform.Rotate(Vector3.up * mouseX * Time.deltaTime);
En el ejemplo anterior, utilizamos Input.GetAxis
para obtener la posición del mouse y su transformación en el eje 'X', lo que posteriormente permite rotar al personaje o cámara.
Input.GetAxis
en Unity?Unity facilita el manejo de entradas de usuario a través de la función Input.GetAxis
, que nos entrega un valor que representa el movimiento en un eje específico, sin tener que implementar manualmente cálculos sobre el desplazamiento del mouse. Esto es extremadamente valioso porque Unity se encarga del cálculo del desplazamiento del mouse, ahorrándonos la necesidad de crear funciones personalizadas para identificar la posición del mouse y cuánto se ha movido.
El clamping es una técnica utilizada para limitar los valores de una variable dentro de un rango específico. En el contexto de rotaciones en Unity, es útil para evitar que la cámara gire demasiado y rompa la ilusión de realidad visual del entorno. Específicamente, en nuestro ejemplo, ajustamos la rotación de la cámara para asegurarnos de que se mantenga dentro de un rango adecuado, como de -90 a 75 grados.
Para permitir que el script funcione correctamente, es necesario arrastrarlo al objeto deseado en el entorno Unity. Primero, aseguramos que nuestra cámara está adeudamente ubicada dentro del objeto 'player'. Luego, arrastramos el script hacia nuestro 'player', confirmando que el componente transform requerido esté vinculado.
Para facilitar la gestión de elementos en Unity y prevenir cambios no deseados mientras navegamos por el inspector, podemos utilizar el ícono de candado. Esto permite bloquear el inspector en el elemento actual sin alterar las configuraciones actuales mientras cambiamos entre distintos objetos del ambiente.
Encontrar y solucionar errores de lógica en el código es fundamental. Uno de los errores comunes es la incorrecta aplicación de operaciones aritméticas al calcular las rotaciones. En este caso, detectamos un error en la función que calcula el desplazamiento de la cámara en el eje Y debido a una operación incorrecta. Tras corregir la ecuación, probamos el comportamiento en Unity y verificamos que ahora la rotación lateral sea correcta y fluida.
// Error corregido
rotationY -= mouseY * sensitivity;
rotationY = Mathf.Clamp(rotationY, -90f, 75f);
Con estas correcciones, la experiencia visual del juego se mejora, y el jugador puede explorar su entorno debidamente sin sufrir problemas visuales o de control.
El siguiente paso lógico en el desarrollo del juego es programar el movimiento básico del personaje: adelante, atrás, izquierda y derecha. Este movimiento crea la base del movimiento del personaje en cualquier entorno de juego. Posteriormente, se avanzará a programar elementos interactivos como disparos y enemigos, integrando aún más elementos que harán el juego dinámico y emocionante para el jugador.
Con todo lo que hemos abordado, es evidente que ya estás en el camino correcto al explorar el mundo de la programación en Unity. ¡Sigue adelante con curiosidad y entusiasmo, y observa cómo tus ideas cobran vida en el mundo virtual!
Aportes 23
Preguntas 12
Cuando en la clase pasada vimos el
=-
Un consejo para encontrar y solucionar errores más fácilmente:
Tenia este error Assets\Scripts\Mira.cs(26,62): error CS1003: Syntax error, ‘,’ expected.
Para encontrar el fallo simplemente hay que fijarse en los números dentro del paréntesis (26,62).
El primer número indica la línea donde se encuentra el error, que en este caso es la línea 26.
El segundo número muestra el caracter donde esta el error, que es el caracter 62.
Espero les sirva 😃
Me sucedía que no podía girar a los lados a pesar de tener el código igual y de probar el código que mis compañeros compartían. Estuve probando y me di cuenta que con la misma función de localRotation se puede lograr el mismo resultado, sin embargo hay que crear otra variable de rotación. aquí les dejo el código de como me quedo:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class mira : MonoBehaviour
{
public float Sensitivity=0.1f;
public Transform player1;
float xRotation = 0f;
float yRotation = 0f;
// Start is called before the first frame update
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update()
{
float mouseY = Input.GetAxis("Mouse Y")*Sensitivity;
float mouseX = Input.GetAxis("Mouse X")*Sensitivity;
xRotation -= mouseY;
yRotation += mouseX;
xRotation = Mathf.Clamp(xRotation,-90f,75f);
transform.localRotation = Quaternion.Euler(xRotation,yRotation,0f);
}
}
Cuando le damos a play el cursor desaparece debido a la instrucción que le dimos en el script, para que vuelva a aparecer solo presiona la tecla esc
Un aporte pequeño :
Si van a Edit > Project settings > Input manager > Axes pueden ver los inputs que tenemos disponibles , aquie es de donde tomamos “Mouse X” y “Mouse Y”. 😄
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Mira : MonoBehaviour
{
public float Sensitivity = 100f;
public Transform player1;
float xRotation = 0f;
// Start is called before the first frame update
void Start()
{
//
Cursor.lockState = CursorLockMode.Locked;//bloquea el cursor al centro de la ventana del juego
}
// Update is called once per frame
void Update()
{
float mouseX = Input.GetAxis("Mouse X") * Sensitivity * Time.deltaTime;//
float mouseY = Input.GetAxis("Mouse Y") * Sensitivity * Time.deltaTime;
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 75f);
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);//Quaternion se ocupa para almacenar rotaciones
player1.Rotate(Vector3.up * mouseX);
}
}```
Corregí todo, puedo mover la cámara pero solo para arriba y para abajo (en el eje X) 😦 no puedo ir a los costados.
Esto cada vez se pone mejor.
Muy buen repaso y corrección de Bug. A Ricardo Izquierdo le hubiera gustado mucho esta clase.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Mouse : MonoBehaviour
{
public float Sensitivity = 100f;
public Transform player1;
float xRotation = 0f;
// Start is called before the first frame update
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update()
{
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);
}
}
Para colocar comentarios solo debes añadir // doble barra al inicio de la linea.
//Input.GetAxis("Mouse X") devuelve valores entre 1 y -1 dependiendo de
//la direccion a la que se mueva el mouse
float mouseX = Input.GetAxis("Mouse X") * sensibilidad * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * sensibilidad * Time.deltaTime;
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation,-80,75);
//Para rotar la camara
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
//Para rotar el personaje
player_1.Rotate(Vector3.up * mouseX);
Porfavor ayuda, alguien sabe que hacer en este caso, ya seguí todo y no entiendo porque falla lo estoy haciendo desde VS tal como dice el profesor.
Me sale este error :c
Aquí está lo que hice
me gustaria que no me fuera a 1 FPS jajaj
ayuda me sale eso:(
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Mira : MonoBehaviour
{
public float Sensitivity = 100f;
public Transform player1;
float xRotation = 0f;
// Start is called before the first frame update
void Start()
{
// bloquea el cursor al centro de la ventana de juego
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update()
{
// obtener el eje x del mouse
float mouseX = Input.GetAxis("Mouse X") * Sensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * Sensitivity * Time.deltaTime;
xRotation -= mouseY;
xRotation Mathf.Clamp(xRotation, -90f, 75f);
Transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
player1.Rotate(Vector3.up * mouseX);
}
}
Excelente Clase! Ya que todo funciona tratare de asimilar el codigo XD

{
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update()
{
float mouseX = Input.GetAxis("Mouse X") = Sensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") = Sensitivity * Time.deltaTime;
xRotation =- mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 75f);
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
player1.Rotate(Vector3.up * mouseX);
}
}
No me funciona! 😦 lo edito y guardo pero cuando agrego el script solo me aparece esto!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?