Julio Armando Torres Minera
El mio se dispara solo : C
Juan Carlos Padilla Climaco
:C
Programar el disparo de un arma en un first person shooter requiere entender cómo detectar colisiones a distancia. Unity ofrece una herramienta poderosa llamada raycast que permite proyectar un rayo invisible desde un punto del espacio y determinar con qué objetos colisiona. A continuación se explica paso a paso cómo implementar esta mecánica directamente en el motor.
¿Qué es un raycast y para qué sirve en Unity?
Un raycast es una utilidad de Unity que proyecta una línea invisible —un rayo— desde un punto específico en una dirección determinada [0:06]. Al colisionar con otros elementos del escenario, devuelve información sobre el objeto impactado. Sus aplicaciones son enormes:
En este caso se utiliza en su forma más sencilla: disparar desde la cámara del jugador y registrar qué objeto fue impactado.
¿Cómo se configura el script de disparo con raycast?
El primer paso es crear un nuevo script en C# dentro de la carpeta de scripts del proyecto [1:30]. Dentro de este script se necesitan dos elementos fundamentales.
¿Qué variables se deben declarar?
Se declara una variable de tipo RaycastHit llamada hit. Esta variable almacenará toda la información de salida cuando el rayo colisione con algo [1:38]. También se declara una variable pública de tipo Camera llamada playerCam, que representa la cámara del jugador desde la cual se lanzará el rayo [2:28]. Es importante usar un nombre descriptivo como playerCam en lugar de solo cam, para que cualquier persona que edite el código entienda a qué se refiere.
¿Cómo se construye la llamada a Physics.Raycast?
Dentro de un bloque if, se invoca Physics.Raycast con los siguientes parámetros [2:50]:
hit.El orden lógico es claro: primero se invoca el raycast, luego se le indica desde dónde sale, en qué dirección viaja, dónde guarda los datos y qué alcance tiene.
¿Cómo se prueba el raycast en el editor de Unity?
Dentro del bloque if, se coloca un Debug.Log que imprime hit.transform.name en la consola [3:50]. Esto permite verificar exactamente a qué objeto del mundo le está pegando el rayo cada vez que se dispara.
Una vez guardado el script, se asigna al objeto del jugador (player) desde el inspector de Unity. Al agregarlo, el motor solicita la referencia a la cámara, así que se arrastra la cámara correspondiente al campo playerCam [4:18].
Para visualizar los raycasts durante la ejecución, conviene activar la opción de Gizmos en la vista de escena [4:30]. Al dar play y hacer clic con el mouse, el raycast se dispara hacia donde apunta la cámara.
¿Cómo verificar que funciona correctamente?
Al abrir la consola de Unity después de disparar, se puede ver el nombre del objeto impactado [4:50]. Por ejemplo, si se dispara hacia el terreno, la consola mostrará el nombre de ese terreno. Unity además agrupa los mensajes repetidos con un contador: si aparece un número quince junto al mensaje, significa que se disparó quince veces contra el mismo objeto [5:10].
Este debug es solo el primer paso. A partir de aquí se puede construir toda la lógica de daño, efectos visuales y mecánicas de combate sobre la base sólida que proporciona el raycast.
Si tu consola muestra el nombre del objeto al que disparaste, todo está funcionando perfectamente. ¿Qué mecánica te gustaría implementar sobre este raycast? Comparte tu avance y tus ideas.
| Input en unity | Static Properties |
|---|---|
| acceleration | Last measured linear acceleration of a device in three-dimensional space. (Read Only) |
| accelerationEventCount | Number of acceleration measurements which occurred during last frame. |
| accelerationEvents | Returns list of acceleration measurements which occurred during the last frame. (Read Only) (Allocates temporary variables). |
| anyKey | Is any key or mouse button currently held down? (Read Only) |
| anyKeyDown | Returns true the first frame the user hits any key or mouse button. (Read Only) |
| backButtonLeavesApp | Should Back button quit the application?Only usable on Android, Windows Phone or Windows Tablets. |
| compass Property | for accessing compass (handheld devices only). (Read Only) |
| compensateSensors | This property controls if input sensors should be compensated for screen orientation. |
| compositionCursorPos | The current text input position used by IMEs to open windows. |
| compositionString | The current IME composition string being typed by the user. |
| deviceOrientation | Device physical orientation as reported by OS. (Read Only) |
| gyro | Returns default gyroscope. |
| imeCompositionMode | Controls enabling and disabling of IME input composition. |
| imeIsSelected | Does the user have an IME keyboard input source selected? |
| inputString | Returns the keyboard input entered this frame. (Read Only) |
| location | Property for accessing device location (handheld devices only). (Read Only) |
| mousePosition | The current mouse position in pixel coordinates. (Read Only) |
| mousePresent | Indicates if a mouse device is detected. |
| mouseScrollDelta | The current mouse scroll delta. (Read Only) |
| multiTouchEnabled | Property indicating whether the system handles multiple touches. |
| simulateMouseWithTouches | Enables/Disables mouse simulation with touches. By default this option is enabled. |
| stylusTouchSupported | Returns true when Stylus Touch is supported by a device or platform. |
| touchCount | Number of touches. Guaranteed not to change throughout the frame. (Read Only) |
| touches | Returns list of objects representing status of all touches during last frame. (Read Only) (Allocates temporary variables). |
| touchPressureSupported | Bool value which let's users check if touch pressure is supported. |
| touchSupported | Returns whether the device on which application is currently running supports touch input. |
| Input en unity | Static Methods |
|---|---|
| GetAccelerationEvent | Returns specific acceleration measurement which occurred during last frame. (Does not allocate temporary variables). |
| GetAxis | Returns the value of the virtual axis identified by axisName. |
| GetAxisRaw | Returns the value of the virtual axis identified by axisName with no smoothing filtering applied." |
| GetButton | Returns true while the virtual button identified by buttonName is held down. |
| GetButtonDown | Returns true during the frame the user pressed down the virtual button identified by buttonName. |
| GetButtonUp | Returns true the first frame the user releases the virtual button identified by buttonName. |
| GetJoystickNames | Retrieves a list of input device names corresponding to the index of an Axis configured within Input Manager. |
| GetKey | Returns true while the user holds down the key identified by name. |
| GetKeyDown | Returns true during the frame the user starts pressing down the key identified by name. |
| GetKeyUp | Returns true during the frame the user releases the key identified by name. |
| GetMouseButton | Returns whether the given mouse button is held down. |
| GetMouseButtonDown | Returns true during the frame the user pressed the given mouse button. |
| GetMouseButtonUp | Returns true during the frame the user releases the given mouse button. |
| GetTouch | Call Input.GetTouch to obtain a Touch struct. |
| IsJoystickPreconfigured | Determine whether a particular joystick model has been preconfigured by Unity. (Linux-only). |
| ResetInputAxes | Resets all input. After ResetInputAxes all axes return to 0 and all buttons return to 0 for one frame. |
Julio Armando Torres Minera
El mio se dispara solo : C
Juan Carlos Padilla Climaco
:C
Acerca del resumen, veo que también depende si será en Mobile o en Computadora, sin embargo me parece que el apartado mas interesante es el de Statics Methods, dejo una SS por si a alguien le interesa leerlo y les ahorra ir a buscarlo jaja.
jose daniel lopez cataño
creo muchachos que me emocione un poquito disparando a todo
Antonio Demarco Bonino
19 tiros y contando... Vamos sumando paso a paso!
Franco David Oliva
Muy contento con este curso de introducción a Unity. Alguno sabe si hay que configurar el Visual Code para que me autocomplete códigos al escribir? porque a diferencia de los vídeos, a mi no se me autocompleta nada ni me muestra descripciones.
Carlos Andres Dominguez Dominguez
https://www.youtube.com/watch?v=g3sHbFmzq3I en este video lo arreglan hay que instalar en el mismo visual studio un suport para unity y luego configurar unas cosas en unity si no saben ingles solo repitan lo que el hace a mi me sirvio miren hasta el final porque al principio no le sirve hasta el final solo dura como 2 minutos el video
Octa Luna Vargas
ivan martin grosso vazques
oigan una pregunta.porque es que no me salen las recomendaciones como a nuestro profe por ejemplo cuando escribio el GetMouseButtonDown que visual studio le recomendo a mi no me sale,hay alguna forma de arreglarlo?
Jhon Edward Bedoya
🟢 Hello!
¿Podrías subir una captura de pantalla para guiarte de una manera precisa? 🤗
Un abrazo de gol! 🦾
Joan Camilo López Castro
lo que hice yo fue mirar algunas extensiones que se instalan en Virtual Studio Code y ahi te aparecerán
Isabel Cristina Beltrán González
Hola de nuevo, profesor. Gracias por resolver una de mis dudas en la clase de antes. Ahora necesito su ayuda porque tengo un error en el script de mi pistola. El error dice así : '' [11:47:59]Assets \Scripts \WeaponFire. cs(29,6): errorCS1513:} expected. Perdón si no tengo una imagen para mostrárselo;no se si se puede poner imágenes en preguntas. Espero que usted o alguien más pueda resolver mi duda. Un saludo y hasta luego.
Erik Elyager
Parece ser un error de sintaxis, lo que ahí dice es que esperaba un } hay algo mal en la estructura de tú código, lo más probable es la falta de un corchete de cierre.
Erik Elyager
Y claro que puedes poner imágenes en los comentarios, solo arrastra y suelta la imagen desde tu computadora hasta la caja de comentarios.
Alex Leonardo Rodriguez Carvajal
hola!, no se me autocompletan las acciones en VS alguien sabe que puede ser?
Axel Alberto Aguilar Navas
Debes entrar a la configuración de Unity y definir Visual Studio como la herramiente externa por default. La ruta seria: Edit > Preferences > External Tools > External Script Editor En "External Script Editor", debes seleccionar el visual studio, cerrar y volver a abrir el editor de código y ahora si debería funcionar correctamente y el Intellisense ya te mostraría las opciones...
Saludos, espero te funcione
Duvan Mauricio Rodriguez Penagos
Hola a todos una pregunta, al raycast se le puede dar la opción de que contra que objetos validar el impacto, en este caso lo hago con el layer
La pregunta en si es: puedo agregar capas independientes a los objetos que esten dentro del terreno?
Wilder Rojas
tengo un bug el personaje vuela y no cae con fisica
Jonny Fernando Caballero Caballero
Tengo el siguiente error:
ArgumentException: Input Button fire1 is not setup. To change the input settings use: Edit -> Settings -> Input WeaponFire.Update () (at Assets/Scripts/WeaponFire.cs:16)

Jonny Fernando Caballero Caballero
Tengo el siguiente error:
ArgumentException: Input Button fire1 is not setup. To change the input settings use: Edit -> Settings -> Input WeaponFire.Update () (at Assets/Scripts/WeaponFire.cs:16)
Reviso el código, pero no encuentro la novedad.
Imágenes: https://drive.google.com/drive/folders/1TUXb9MPzBbs-8GKEQS2dNY_Oum4HnCcb?usp=sharing
Marwan El Ouarti
Mayúsculas
michael 1
no me detecta el disparo
Mayra Lopez
Te marca algún error ? Nos puedes pasar una captura de cómo está configurada tu escena / código?
Jose Portez Castro
me sale ventana de editor un error hasy no se por que no me deja poner los scripts
Korpi delfin
¡Hola!
¿Puedes compartir captura de pantalla del error?
Marcos Flores Jimenez
porfavor AYUDA¡¡ me sale este error
quito el debug pero ahora me sale esto
a la hora de escribir no me da las opciones como en la clase, no puedo ver que hace cada cosa, puede que no este reconociendo algunas funciones? no me había causado problemas en las otras clases
Carlos José Vargas Barrios
estas en archivos varios ve a herramientas preferencias y elige solo unity
Aldo Roberto Talavera Zempoaltecatl
Hola! Alguien me podría orientar el por que me sale este error? Se los agradecería mucho
Diego Fernando Charfuelan Burbano
Hola, tengo el mismo error lograste resolverlo??
Christian Ceferino
Hola amigo,yo lo arregle importando el Debug propio de Unity, con esta linea "using Debug = UnityEngine.Debug;" es importante que sea en conjunto con los demas using. Un saludo espero que funcione
Abel rolon
antes de hacer el script pongan using Debug = UnityEngine.Debug; esto para mi arreglo el tema de que el arma se me disparace solo sin embargo si lo haces despues de hacer el scrip no se aregla o al menos así me paso ami
Carlos David Zamora Gutiérrez
Algo importante para ver el nombre del objeto al que disparan deben habilitar los mensajes para que Debug.Log funcione
Miguel Angel Velazquez Romero
Y como se habilitan los mensajes? Ya ubiqué esos iconos, pero al presionarlos y al correr el programa no me muestra los mensajes del Debug.Log.
Carlos David Zamora Gutiérrez
En mi caso fue presionando el ícono, el primero es el de los mensajes de Debug.Log ¿Ese te muestra algún número? en el caso de mi imagen es 8. Si no es así, entonces podrías revisar el código. Saludos