Introducción

Este es el primer artículo del curso de programación básica en C# orientada a Unity. Vamos a ver lo necesario para empezar a estudiar programación básica y poder hacer que nuestros programas se ejecuten.

En qué consiste programar para Unity

Unity es un motor gráfico, esto quiere decir que muchos aspectos técnicos en el desarrollo de un videojuego ya vienen resueltos, dejándonos a nosotros la parte artística y la lógica de los elementos.

En general vamos a trabajar con Unity y un software auxiliar para edición de Scripts, en este curso vamos a utilizar Visual Studio como editor de código.

En un proyecto en Unity lo que haremos es crear objetos dentro de una escena, estos objetos se conocen como GameObjects (lee este artículo para saber más sobre GameObjects en Unity) y asignarle componentes que harán que se comporten como queremos, es decir componentes que se encargan de darle la lógica al objeto.

Algunas componentes vienen predefinidas en el motor gráfico, pero otras deberemos crearlas utilizando Scripts y conocimientos de programación.

Creación de un Script en Unity

Para programar en Unity tendremos que crear un nuevo Script, esto lo podemos hacer desde la pestaña «Project» haciendo clic derecho en alguna de las carpetas de la parte izquierda de la pestaña Project o en el explorador de archivos de la parte izquierda de la pestaña Project, luego vamos a «Create».

En la figura 1 podemos ver la ventana que nos permite crear un nuevo Script (Segunda opción, «C# Script» debajo de Folder).

creación de un nuevo script c# en unity
Fig. 1: Ventana para crear recursos en Unity.

Al crear un nuevo Script se nos pedirá ingresar un nombre, para esto le damos un nombre representativo de la función que va a desempeñar, por convención se comienza con mayúscula y utilizando la notación CamelCase (o InFixCaps) que consiste en quitar los espacios y colocar mayúsculas para separar las palabras, como se ilustra en la figura 2.

Fig. 2: Notación CamelCase para nombrar Scripts de programación.

Luego si hacemos doble clic en el Script se nos abrirá el editor de código y podremos ver y editar el contenido.

Fig. 3: Así se ve un Script genérico recién creado en Unity.

Asignación de Scripts en Unity

Una vez que hemos creado el Script podremos asignarlo a uno o más GameObjects de la jerarquía.

Para hacer esto seleccionamos el o los GameObjects a los que queremos asignar el Script, luego tomamos el Script de la pestaña Project y lo arrastramos al inspector.

Fig. 4: Con un GameObject seleccionado arrastrar Script al inspector.
Fig. 5: El Script se ha asignado al GameObject y ahora correrá el programa que escribamos dentro.

También podemos usar el botón Add Component y buscar el Script en la lista.

Fig. 6: Asignación de Script a GameObject usando el botón Add Component en el inspector.

Ejecución de Scripts

Para que nuestro Script se ejecute al hacer clic en el botón de Play en principio solo necesitamos que no contenga errores así Unity lo puede compilar, que esté asignado a un GameObject de la jerarquía y que este GameObject no esté deshabilitado.

Con esto basta para que la función Start se ejecute automáticamente al iniciar el juego, Update se llame en cada frame del juego y FixedUpdate cada 20 milisegundos.

Como vemos en la figura 3, al crear un nuevo Script por defecto nos trae definidas las funciones Start y Update.

Imprimir mensajes en consola

Vamos a usar la consola para mostrar los resultados de nuestros programas y comprobar que están funcionando correctamente.

La instrucción que nos permitirá escribir un mensaje en la consola de Unity es:

Debug.Log(«Este es un mensaje»);

Dentro de los paréntesis podremos poner textos, variables y crear un mensaje concatenando elementos.

Para ver en detalle la utilización de la instrucción Debug.Log te invito a leer este artículo.

En la figura 7 podemos ver un ejemplo de cómo utilizar Debug.Log.

Fig. 7: Instrucción Debug.Log para imprimir mensajes en consola.

Si el Script está asignado a un GameObject que no está deshabilitado, al pulsar Play el juego comenzará a correr y en un determinado momento se ejecutará la función Start del Script, que contiene la instrucción para imprimir el mensaje en pantalla.

Fig. 8: Presionar el botón Play para que el juego comience a correr.

Fig. 9: Aparece un mensaje en consola.

En la figura 9 vemos que hay una pestaña llamada «Console», si entramos en ella podremos ver mucha más información.

Fig. 10: En la ventana consola podemos ver el mensaje en detalle y obtener información extra.

Conclusión

En este primer artículo hemos visto algunas cosas básicas que necesitamos saber para programar en Unity, por ejemplo cómo crear Scripts, como asignarlos a los objetos y hacer que se ejecuten.

La instrucción Debug.Log nos permite imprimir mensajes en consola y de esa forma testear si nuestros programas están haciendo lo que deben hacer.


Artículo relacionado

Descripción del vídeo

En este video vamos a ver cómo acceder desde un Script a una variable y a una función que está definida en otro Script en Unity.

Resumen del procedimiento para leer una variable que está en otro Script:

1. Partimos de 2 scripts PRIMERO y SEGUNDO. En el SEGUNDO está la variable que queremos leer. En el PRIMERO vamos a leer la variable que está en SEGUNDO.

2. En SEGUNDO nos aseguramos que la variable está declarada como pública, sino no podremos acceder a ella desde un contexto externo a SEGUNDO (por ejemplo PRIMERO).

3. En PRIMERO declaramos un objeto de tipo SEGUNDO y debemos asegurarnos de inicializar ese objeto con la referencia apropiada. Esto va a depender de dónde estamos programando, en este caso vamos a hacerlo arrastrando el objeto que tiene asignado el script SEGUNDO en el capo del inspector del script PRIMERO.

4. Para leer la variable de SEGUNDO desde PRIMERO, usamos la referencia que definimos de SEGUNDO y con el operador punto podemos acceder a ella y utilizarla dentro de PRIMERO.

Índice de contenidos y tiempos de interés del video

0:00 – Introducción

0:49 – ¿Qué vamos a hacer?

1:32 – Ejemplo: Comunicación entre Sistema de Salud e Interfaz Gráfica

2:03 – No es una buena idea programar todo en un único Script

2:42 – Dividir responsabilidades es una mejor alternativa

3:47 – Pasamos a Unity a la parte de implementación de la comunicación entre Scripts

3:51 – Breve explicación sobre el ejemplo del artículo sobre comunicación entre Scripts

4:33 – Comenzamos a implementar el ejemplo propuesto en el video

4:48 – Cómo va a ser la interfaz gráfica

5:02 – Creación de la interfaz gráfica

6:53 – Objeto jugador y creación de Scripts «HealthSystem» y «UserInterface»

7:48 – Programación del Script de la interfaz gráfica. Definición de campos

8:30 – Programación del Script del sistema de salud. Definición de campos y métodos

9:19 – Métodos de daño y regeneración para decrementar o incrementar la salud

9:52 – Hard Coding no!

10:25 – Método Getter para leer la salud actual del jugador

10:50 – ¿Cómo vamos a encarar el problema?

11:28 – Pros y Contras de las dos alternativas propuestas

12:15 – Programación de la primera alternativa: La interfaz gráfica pregunta al sistema de salud cuánta vida tiene el jugador

12:17 – Distinción entre clase y objeto cuando en un Script

12:56 – Encontrar la referencia de un objeto

14:03 – Método Update de la interfaz de usuario, comunicación entre scripts interfaz de usuario y sistema de salud

14:33 – Operador punto para acceder a campos y métodos públicos en otros Scripts

15:29 – Asignación de Scripts y ajustes en el inspector para la prueba de funcionamiento

16:11 – Asignación de las funciones a los botones en Unity

17:03 – Prueba de funcionamiento de la primera alternativa

17:36 – Implementación de la segunda alternativa: El sistema de salud, cuando se produce una modificación en la vida del jugador, le avisa a la interfaz gráfica para que modifique su valor

18:19 – Definir y obtener la referencia del objeto Interfaz Gráfica desde el Script Sistema de Salud

19:16 – Métodos de la interfaz de usuario

19:48 – Comunicación entre Scripts sistema de salud e interfaz gráfica

20:21 – Ajustes en el inspector para la segunda alternativa

20:56 – Prueba de funcionamiento. Bug a causa de interfaz gráfica no inicializada

21:48 – Conclusión

Introducción

En este artículo presento una solución para crear de manera automática cables que cuelgan desde dos o más puntos. El sistema nos permite modificar el espesor del cable, la curvatura y más parámetros para lograr el resultado que queramos.

El cable se dibuja utilizando el componente Line Renderer de Unity por lo que se genera de manera procedural utilizando expresiones matemáticas.

Paquete de Unity para Descargar

La solución consiste en un paquete de Unity que puedes importar en tu proyecto, esto creará una nueva carpeta en tu proyecto con los Assets que vienen en el paquete.

Funcionamiento del Sistema de Cableado Automático

En la figura 1 se muestras los Assets que vienen dentro del paquete. En la escena puedes ver un tendido eléctrico que generé usando el sistema de cableado.

Para comenzar a usar el sistema podemos arrastrar el prefabricado «GDT Wire Container» a la jerarquía (cubo azul en la figura 1). Si no puedes crear un nuevo Empty GameObject y asignarle el Script «GDTWiringSystem» esto generará automáticamente todo lo necesario para el funcionamiento del sistema.

Fig. 1: El paquete para descargar contiene estos assets.

El objeto que tiene asignado el Script «GDTWiringSystem» será el encargado de dibujar el cable y sus hijos serán los puntos desde los cuales el cable estará colgado.

En la figura 2 vemos la componente «GDTWiringSystem», aquí está todo lo necesario para darle forma al cableado.

Fig. 2: En el inspector podemos modificar los parámetros del cableado.

Agregar un nuevo punto para el cable

Para crear un nuevo punto de sostén para el cable, simplemente haz clic derecho en el objeto contenedor y luego en Create Empty, como se observa en la figura 3. Esto creará un nuevo hijo y el Script automáticamente le asignará un nombre.

No recomiendo crear nuevos hijos duplicando los que ya existen, ya que esto produce errores internos.

Fig. 3: Para agregar un nuevo punto al cableado hay que crear un nuevo hijo en el GameObject contenedor.

Fig. 4: Se crea un nuevo punto de sostén para el cable.

En la figura 4 vemos como al crear un nuevo punto, aparece un nuevo tramo de cable.

Cable cerrado

Si queremos generar un cable con sus extremos unidos podemos activar la opción «loopWire», esto generará un nuevo tramo de cable que une el último punto con el primero.

Fig. 5: La opción loopWire hace que el último punto del cable se conecte con el primero.

En la figura 6 vemos que el cable se ha cerrado.

Fig. 6: Con la opción loopWire vemos que el cable forma una curva cerrada.

Suavidad del Cable

El parámetro subdivisiones nos permite elegir la cantidad de segmentos que habrán entre dos puntos del cable, inicialmente vale 1, lo cual implica que los puntos del cable se unen con líneas rectas, para que el cable tenga curvatura debemos elegir un parámetro de subdivisión mayor a 1.

Cuanto mayor sean las subdivisiones, más suave será la curvatura del cable. El máximo del rango está seteado en 15 pero puede aumentarse abriendo el Script y modificando la instrucción «[Range(1,15)]» con el valor que se necesite.

Fig. 7: Si aumentamos las subdivisiones conseguiremos curvas más suaves.

Curvatura del Cable

Para modificar la concavidad del cable, es decir qué tan intensa es su curvatura, tenemos los Sliders dentro del vector «Curvature Parameters», como vemos en la figura 8. Estos Sliders nos permitirán modificar la curvatura de cada tramo de cable de manera individual.

El rango de estos Sliders por defecto es de -3 a 3, pero si es necesario se puede modificar desde el Script en la instrucción «[Range(-3f,3f)]» escribiendo el valor que se necesite.

Fig. 8: Los parámetros de curvatura nos permiten ajustar la concavidad de cada tramo de cable.

Animación

En caso de necesitar animar el cable, agregué un bool llamado «isAnimatedWire», al activarlo el cable se dibujará en cada ejecución de FixedUpdate que por defecto se ejecuta cada 20 mili segundos.

Resultado

Utilizando esta solución podremos dibujar, de manera automática, cables suspendidos desde dos o más puntos. Podemos agregar tantos puntos como queramos y modificar la curvatura de cada tramo de manera individual.

El cable se generado con el componente LineRenderer y utilizando expresiones matemáticas.

Fig. 9: Al aumentar las subdivisiones se puede apreciar la curvatura del cable.

Introducción

En este artículo vamos a hablar sobre qué es MonoBehaviour en Unity, primero desde el punto de vista práctico para saber en términos generales de qué se trata y qué funciones cumple concretamente y luego desde el punto de vista de la programación.


¿Qué necesitamos saber sobre MonoBehaviour para trabajar en Unity?

Cuando creamos un nuevo Script en Unity, junto al nombre que le dimos aparece la palabra «MonoBehaviour», esto en términos simples nos está diciendo que el Script que hicimos se comportará como un MonoBehaviour.

Esto quiere decir que Unity se encargará de ejecutar ciertas funciones automáticamente. Para entender el concepto de función en programación te invito a leer este artículo o ver el video que lo resume.

Por ejemplo la función «Start» se ejecutará cuando el GameObject al cual asignamos nuestro Script aparezca en la escena (al comenzar el juego o cuando lo instanciemos).

Otra función que se ejecuta automáticamente es «Update», la cual se ejecuta antes de mostrar cada frame del juego, por lo cual es una función que nos permite actualizar el estado del juego y producir la dinámica.

Esas dos funciones vienen definidas por defecto cuando creamos un nuevo Script en Unity, pero además hay otras funciones que podemos definir y se ejecutarán automáticamente en determinado momento del tiempo de vida de un MonoBehaviour. Leer más sobre la función Update.

Una función útil que no viene definida por defecto es la función «FixedUpdate», la cual es similar a Update, pero se ejecutar de manera equiespaciada en el tiempo con una frecuencia por defecto de 20 milisegundos. Esto nos permite lograr cambios en el juego que deban ocurrir de manera regular en el tiempo, por ejemplo el movimiento de objetos.

Otras funciones útiles son «Awake», «LateUpdate», «OnDestroy», «OnEnable», «OnDisable»,

¿Qué es MonoBehaviour desde la programación?

Mono Behaviour es una «Clase de Programación», esto quiere decir que es un conjunto de variables, objetos y funciones que cumplen una determinada función.

Para saber más sobre qué es una clase y objeto en programación puedes consultar este artículo o también ver este video.

Cuando creamos un nuevo Script en Unity, lo que se hace de fondo es crear una nueva clase de programación que tendrá el mismo nombre que le dimos al Script y que además extenderá de MonoBehaviour, es decir que heredará su comportamiento de la clase MonoBehaviour. Esa es la razón por la cuál los métodos «Start», «Update» o »FixedUpdate» son ejecutados automáticamente cuando el juego empieza a correr.

Introducción

En este artículo vamos a ver distintas formas para calcular la distancia entre dos objetos en Unity, esto puede ser útil por ejemplo para saber a qué distancia está el personaje de un punto de interés y así poder llevar a cabo una acción como podría ser activar un mecanismo.

Tengo un vídeo en el que muestro cómo calcular la distancia entre dos objetos

En este vídeo muestro dos métodos para conocer la distancia entre dos objetos en Unity, junto con mucha información extra como por ejemplo datos sobre programación, cómo escribir la distancia entre dos objetos en consola y en la interfaz gráfica.


Preparar la escena

Vamos a armar una escena muy simple que tendrá dos esferas con textos en 3D para indicar el número de la esfera y la distancia que hay entre ambas.

Fig. 1: Estos son los GameObjects en la jerarquía de la escena.
Fig. 2: Script que se va a encargar de los cálculos.

La cámara tendrá asignado el Script Distances que es el que hará los cálculos de distancia y escribirá los valores en pantalla. Como extra tendrá un Line Renderer para dibujar una línea desde un objeto al otro. Hay campos para ambos objetos y para el indicador de distancia. Además tenemos un enum que nos permite elegir que tipo de distancia queremos calcular.

Fig. 3: Así se ve la escena con los objetos.

Preparar el script para calcular distancia – Nombre: «Distances»

El Script que va a resolver los cálculos lo he llamado Distances (Script completo al final del artículo), en la siguiente figura se muestran los campos definidos en este Script junto con el método Start.

Fig. 4: Campos y método Start del Script para calcular la distancia entre dos GameObjects.

Tenemos campos para asignar los dos objetos, un textmesh para el indicador de distancia, el enum que nos permite elegir qué distancia queremos medir,

Fig. 5: Código del método Update.

En el método Start encontramos la referencia del Line Renderer asignado al GameObject cámara.

En el método Update vamos a hacer los cálculos, podemos ver a continuación cómo está programado.

Fig. 6: Métodos para calcular distancias en el espacio y en el plano.

Por último tendremos dos métodos que devuelven la distancia en el espacio y en el plano XY, se observan en la siguiente figura.

Artículo sobre métodos en programación, tipos de métodos y ejemplos

Calcular distancia entre dos objetos en el espacio – Vector3

Para empezar vamos a ver cómo calcular la distancia que hay entre dos objetos en el espacio, es decir considerando las tres dimensiones de la escena.

El método CalculateDistanceInSpace de la figura 6 es el que se encarga de esto. Como se observa, se utiliza el método Distance de la clase Vector3 y como parámetros se envían los dos vectores de tres dimensiones que queremos saber a qué distancia están, estos vectores son la posición de cada objeto.

https://gamedevtraum.com/wp-content/uploads/es/desarrollo-de-videojuegos/tutoriales-y-soluciones-para-el-motor-unity/calcular-distancia-entre-dos-objetos/distancia-entre-dos-objetos-espacio-unity.mp4
Video 1: Distancia entre dos objetos en el espacio.

Calcular distancia entre dos objetos en el plano – Vector2

Si estamos trabajando en 2D o si nos interesa conocer la distancia entre dos objetos proyectados sobre un plano, podemos calcular esta distancia usando solamente dos dimensiones de la escena.

El método CalculateDistanceInXYPlane de la figura 6 es el que se encarga de esto. Como se observa, se utiliza el método Distance de la clase Vector2, se construyen dos vectores usando solo las componentes x e y de la posición de los objetos y se pasan como parámetros al método Distance de Vector2.

https://gamedevtraum.com/wp-content/uploads/es/desarrollo-de-videojuegos/tutoriales-y-soluciones-para-el-motor-unity/calcular-distancia-entre-dos-objetos/distancia-entre-dos-objetos-plano-unity.mp4
Video 2: Distancia entre dos objetos en el plano.

En el siguiente video podemos ver la diferencia entre estas dos formas de calcular distancias entre objetos en Unity.

https://gamedevtraum.com/wp-content/uploads/es/desarrollo-de-videojuegos/tutoriales-y-soluciones-para-el-motor-unity/calcular-distancia-entre-dos-objetos/distancia-entre-dos-objetos-unity.mp4
Video 3: Comparación distancia entre dos objetos en el plano y en el espacio.

Conclusión

Hemos visto cómo utilizar las clases Vector3 y Vector2 para calcular distancias entre objetos en el espacio y en el plano respectivamente.

En general en Unity se trabaja en el espacio 3D, por lo tanto para medir distancias en dos dimensiones es necesario proyectar los puntos en algún plano. Hay que tener en cuenta que hay varios planos que podemos tener en cuenta, en este caso vimos el plano XY, pero podríamos usar el plano XZ o YZ.

Anexo

Aquí se puede ver el Script completo que calcula la distancia entre dos objetos en Unity.

Fig. 7: Script Distances completo.

Introducción

En este artículo vamos a ver cómo se define la operación factorial de un número, cálculos y propiedades. Se trata de una operación útil que se aplica comúnmente en el desarrollo en serie de funciones.

Definición del Factorial de un Número

Esta operación se simboliza con el símbolo de admiración por delante del número a aplicarla, el factorial de 3 se simboliza !3.

Se aplica a los números naturales incluyendo el 0. Esto quiere decir que no podemos calcularle el factorial a un número negativo o a un número con decimales, ver conjuntos numéricos para más información.

El factorial de 0 es igual a 1, esto es !0 = 1.

El factorial es igual a ese número multiplicado por el factorial del número anterior. Esta propiedad la podemos seguir aplicando hasta llegar al factorial de 0.

Podemos representar esta operación usando el símbolo de productoria, de la siguiente manera:

(1)  

Una forma de calcular el factorial en programación es usando esta notación de productoria y resolverla en un bucle, tal como vimos en el artículo sobre sumatoria y productoria.

Ejemplos de utilización del factorial

Desarrollos en serie

Un ejemplo de utilización de esta operación es en el desarrollo en Serie de Taylor o de potencias, la cual consiste en una serie de términos infinitos a los que podemos ajustar los coeficientes para que se aproximen a una función que queramos y que cumpla las condiciones mínimas para que esto sea posible.

Fig. 1: Desarrollo en Serie de Taylor de una función f(x). Aplicación del factorial.

Observen en la figura 1 en el divisor del término de la sumatoria hay un número que va desde 0 a infinito y se le aplica el factorial.

La aproximación por series es algo muy útil porque permite encontrar soluciones numéricas a determinados problemas, en lugar de evaluar una función complicada o incluso una función no conocida, evaluamos polinomios.

Números Combinatorios

Los números combinatorios resultan útiles para varias aplicaciones, por ejemplo para saber cuántas combinaciones posibles existen entre ciertas cantidades. En la definición de números combinatorios se utilizan factoriales:

   

Conclusión

Hemos visto la operación factorial que se simboliza con el signo de admiración y se define como una multiplicación de un número por todos los números naturales anteriores a él.

El factorial se aplica a los números naturales incluyendo el 0.

El factorial de 0 es igual a 1, de ahí en adelante, el factorial de un número se define como el producto de todos los números naturales hasta llegar a ese número.

Introducción

En este artículo comparto un mix de rock instrumental ambiental que preparé para escuchar cuando estoy redactando artículos o para programar.

Para este mix he seleccionado 16 canciones de la biblioteca de YouTube. El mood de las canciones por momentos es calmo, en otras ocasiones más movido, sin llegar a ser extremos, lo que me permite aislarme del entorno sin distraerme.

Mix de Rock Instrumental

Sin más preámbulo aquí puedes escuchar el mix de rock instrumental, espero que te guste 😀

Nombres de las Canciones y Artistas por orden de aparción

00:00 – 03:32 Without A Sound – Letter Box
03:32 – 06:15 Open Highway – Silent Partner
06:15 – 09:53 Lay It Down – Silent Partner
09:53 – 14:20 Don’t Look – Silent Partner
14:20 – 16:59 Silver – Riot
16:59 – 23:22 1973 – Bruno E.
23:22 – 26:05 Double You – The Mini Vandals
26:05 – 30:28 Town of 24 Bars – Unicorn Heads
30:28 – 34:34 Remembering Her Face – Silent Partner
34:34 – 38:04 Promises – Letter Box
38:04 – 41:03 In the Shadows – Ethan Meixsell
41:03 – 46:09 To the Sun and Back – TrackTribe
46:09 – 48:55 The Big Conference – DJ Williams
48:55 – 53:35 Heading West – Audionautix
53:35 – 57:45 We Could Reach – Freedom Trail Studio
57:45 Texas Napkin – Freedom Trail Studio

Introducción

En este artículo vamos a ver cómo funciona el método OnTriggerExit en Unity. Esta función nos permitirá saber cuándo el Collider de un GameObject sale de otro Collider que está configurado como detector. OnTriggerEnter y OnTriggerExit son métodos muy similares pero cambia el momento en el que sucede la ejecución de estos métodos, entender estas funciones nos permitirá ejecutar acciones en el momento preciso en que lo necesitamos.

A continuación tienes dos vídeos que explican el funcionamiento de un prototipo para la detección de un objeto que entra dentro de un Collider. En el primer vídeo vemos cómo configurar los Colliders para que los eventos OnTrigger funcionen.


En el segundo vídeo analizamos el código del Script donde están definidas las funciones OnTriggerEnter y OnTriggerExit.



OnTriggerExit en Unity

El método OnTriggerExit se encuentra definido en la clase MonoBehaviour. Es decir que cualquier nuevo Script por defecto lo va a tener por herencia.

Para que ocurra la ejecución de OnTriggerExit deben darse varias condiciones.

La primera es que deben haber dos GameObjects con Colliders involucrados, uno de los Colliders debe estar en modo Trigger, para esto se debe tildar la casilla «Is Trigger» en el inspector.

Además al menos uno de los GameObjects involucrados debe tener asignado un componente RigidBody, porque OnTriggerExit está relacionado a la parte física del motor.

Declarar OnTriggerExit

El hecho de que esté definido en la clase MonoBehaviour y un nuevo Script por defecto la implemente no significa que automáticamente tendremos a OnTriggerExit en nuestro Script, debemos declararlo y lo hacemos de la siguiente manera:


private void OnTriggerExit(Collider c){

//Acciones a realizar cuando se detecta una entrada al Trigger.

}

Si las condiciones se dán, este método se ejecutará automáticamente, así que en su interior escribimos todo lo que sea necesario hacer cuando eso pase.

El parámetro «Collider c» que recibe el método, es el Collider del GameObject que dejó de estar en contacto con el Trigger. Podemos usar este parámetro para hacer muchas cosas, por ejemplo obtener el GameObject que tiene asignado ese collider, esto lo hacemos simplemente con:

c.gameObject

A partir de ahí podemos leer cualquier otra componente que tenga asignado el GameObject, su tag, su layer, modificar lo que necesitemos y se nos permita modificar, ejecutar métodos definidos en Scripts que pueda tener asignados y muchas más acciones.

Para saber más sobre métodos o funciones de programación con parámetros te invito a ver este vídeo o leer su artículo correspondiente.

Conclusión

El método OnTriggerExit nos permite detectar cuándo un GameObject deja de estar en contacto con un Collider en modo Trigger y podemos ejecutar las acciones deseadas cuando eso pase.

OnTriggerExit se ejecuta automáticamente, para para esto deben darse algunas condiciones, la primera es que deben haber dos GameObjects con Colliders involucrados y uno de ellos en modo Trigger y la segunda es que al menos uno de los GameObjects debe tener asignada una componente RigidBody.

Paquete para descargar:

A continuación puedes descargar el paquete de Unity que al importarlo en tu motor, recuperarás los Assets que usamos y podrás probarlo en tu propia computadora.

Introducción

En este artículo vamos a ver cómo funciona el método OnTriggerEnter en Unity. Esta función nos permitirá saber cuándo el Collider de un GameObject ha entrado en la región de otro Collider que está configurado como detector. OnTriggerEnter y OnTriggerExit son métodos muy similares pero cambia el momento en el que sucede la ejecución de estos métodos, entender estas funciones nos permitirá ejecutar acciones en el momento preciso en que lo necesitamos.

Este artículo incluye un paquete de Unity para descargar:

He creado un prototipo que permite analizar el funcionamiento de los eventos Trigger en Unity, más abajo encontrarás dos vídeos que hablan del funcionamiento de este prototipo. Si lo deseas puedes descargar el paquete de Unity e importarlo en tu propio proyecto para verlo en acción.

NOTA: He actualizado el paquete y no se ve exactamente igual que en los vídeos pero el funcionamiento es el mismo.

Vídeos que explican el funcionamiento del prototipo anterior:

En este primer vídeovemos cómo configurar los Colliders para que los eventos OnTrigger funcionen.




En la segunda parte analizamos el código del Script donde están definidas las funciones OnTriggerEnter y OnTriggerExit.


Cómo funciona OnTriggerEnter en Unity

El método OnTriggerEnter se encuentra definido en la clase MonoBehaviour. Es decir que cualquier nuevo Script por defecto lo va a tener por herencia.

Para que ocurra la ejecución de OnTriggerEnter deben darse varias condiciones.

La primera es que deben haber dos GameObjects con Colliders involucrados, uno de los Colliders debe estar en modo Trigger, para esto se debe tildar la casilla «Is Trigger» en el inspector.

Además al menos uno de los GameObjects involucrados debe tener asignado un componente RigidBody, porque OnTriggerEnter está relacionado a la parte física del motor.

Declaración de la función OnTriggerEnter

El hecho de que esté definido en la clase MonoBehaviour y un nuevo Script por defecto la implemente no significa que automáticamente tendremos a OnTriggerEnter en nuestro Script, debemos declararlo y lo hacemos de la siguiente manera:


private void OnTriggerEnter(Collider c){

//Acciones a realizar cuando se detecta una entrada al Trigger.

}

Si las condiciones se dán, este método se ejecutará automáticamente, así que en su interior escribimos todo lo que sea necesario hacer cuando eso pase.

El parámetro «Collider c» que recibe el método, es el Collider del GameObject que entró en contacto con el Trigger. Podemos usar este parámetro para hacer muchas cosas, por ejemplo obtener el GameObject que tiene asignado ese collider, esto lo hacemos simplemente con:

c.gameObject

A partir de ahí podemos leer cualquier otra componente que tenga asignado el GameObject, su tag, su layer, modificar lo que necesitemos y se nos permita modificar, ejecutar métodos definidos en Scripts que pueda tener asignados y muchas más acciones.

Para saber más sobre funciones de programación con parámetros te invito a ver este vídeo o leer su artículo correspondiente.



Conclusión

El método OnTriggerEnter nos permite detectar cuándo dos GameObjects solapan sus Colliders, de esa forma podremos aplicar todas las acciones que sean necesarias.

OnTriggerEnter se ejecuta automáticamente, para para esto deben darse algunas condiciones, la primera es que deben haber dos GameObjects con Colliders involucrados y uno de ellos en modo Trigger y la segunda es que al menos uno de los GameObjects debe tener asignada una componente RigidBody.

Introducción

En este artículo hay modelos 3D decorativos para descargar y utilizar en tus proyectos en Unity.

De cada modelo hay imágenes representativas y una descripción breve del modelo, indicando datos como la topología y la cantidad de materiales.

Los modelos están en formato .fbx y se pueden importar directamente en el motor Unity.

Puedes usar estos modelos para construir prototipos rápidamente. Espero que te sean de utilidad.

Reloj de Pared Funcional para Unity

Este reloj de pared para Unity tiene agujas funcionales que permiten ponerlo en hora, además he creado un Script que permite simplificar este proceso.

Haz clic en la imagen para ir a la página del reloj de pared, allí encontrarás el archivo de descarga e información extra.

Cuadros

Este set de cuadros está preparado para que lo importes en Unity y puedas ponerle cualquier imagen que desees, siempre que sean cuadradas o de relación de aspecto 16:9 o 9:16.

Además cuenta con varias texturas para los marcos.

Vértices: 36 Caras:  27

Mesa

Una mesa simple para 6 personas con texturas PBR.

Vértices: 184 Caras: 186

Silla

Una silla simple con texturas PBR.

Vértices: 132 Caras: 88

Estantería – 4 Estantes

Modelo de estantería con 4 estantes. En la descarga vienen incluidas las 3 texturas que se observan en la imagen.

Vértices: 72 Caras: 55

Estantería – 3 Estantes y cajones

Modelo de estantería con 3 estantes y un espacio para cajones o puertas. Este espacio no es funcional, es decir los cajones no pueden abrirse, es solo decorativo. En la descarga vienen las dos texturas que se ven en la imagen.

Vértices: 68 Caras: 56

Juego de Ajedrez

Set de piezas de ajedrez y mesa. Cada pieza es un modelo individual y se les puede dar movimiento.

Vértices: 4169 Caras: 4102

Candelabro

Vértices: 256 Caras: 231

Introducción

En esta entrada te puedes descargar una Texturas Seamless PBR de ladrillos para usarla en tus modelos 3D. La textura está hecha usando Substance Painter.

Una textura Seamless, es una textura con simetría horizontal y vertical de tal modo que se puede colocar una a continuación de la otra y que el resultado sea una textura continua. El término PBR es de «renderizado basado en física» en inglés y significa que estas texturas están preparadas para comportarse de manera adecuada con las fuentes de luz. Estas texturas en particular están adaptadas al motor Unity (Metallic Workflow).

De cada textura hay imágenes representativas y una descripción breve, indicando datos como la resolución

Las texturas cuentan con varios mapas cada una y están en formato PNG.

Puedes usar estas texturas para aplicar a tus modelos 3D en Unity y construir prototipos rápidamente. Espero que te sean de utilidad.

Descargar textura de suelo de ladrillos para Unity

Resolución: 1024 x 1024 – Mapas: 3 – Formato: PNG

Introducción

En este artículo hay modelos 3D de elementos de cocina para descargar y utilizar en tus proyectos en Unity.

De cada modelo hay imágenes representativas renderizadas en Blender 2.8 y una descripción breve del modelo, indicando datos de topología y materiales.

Los modelos están en formato .fbx y se pueden importar directamente en el motor Unity.

Puedes usar estos modelos para construir prototipos rápidamente. Espero que te sean de utilidad.

Olla

Vértices: 146 – Caras: 144

Cocina

Vértices: 663 – Caras:  527

Introducción

En esta sección podrás encontrar modelos 3D de herramientas para descargar y directamente importar en Unity, lista para usarlas en tus proyectos.

Dependiendo del modelo, algunas cuentan con texturas u otra característica en particular.

Los modelos están en formato .fbx y se pueden importar directamente en el motor Unity.

Puedes usar estos modelos para construir prototipos rápidamente. Espero que te sean de utilidad.

Herramientas Varias

Este es un set con varias herramienta de mano pequeñas, cuenta con texturas y está pensado para funcionar como decoración.

Vértices: 379 – Faces:  375 – Texturas: Si

Barreta

Vértices: 108 – Faces:  107 – Texturas: No

Hacha

Vértices: 112 – Caras: 108 – Texturas: No

Pala

Vértices: 224 – Caras: 208 – Texturas: No

Azada

Vértices: 116 – Caras: 106 – Texturas: No

Introducción

En esta sección podrás encontrar modelos 3D de armas para descargar y directamente importar en Unity, lista para usarlas en tus proyectos.

Dependiendo del modelo, algunas cuentan con texturas u otra característica en particular.

Los modelos están en formato .fbx y se pueden importar directamente en el motor Unity.

Puedes usar estos modelos para construir prototipos rápidamente. Espero que te sean de utilidad.

Escopeta Corta

Esta modelo de escopeta corta viene en dos partes, una el cuerpo del arma y otra el sistema de recarga. El modelo cuenta con texturas PBR.

  Vértices: 450 Caras: 404 Texturas: Si

Cuchillo

Un cuchillo simple para utilizar en una mano o arrojar. El modelo cuenta con texturas PBR.

  Vértices: 147 Caras:  144 Texturas: Si

Katana

Espada japonesa con texturas PBR.

Vértices: 558 Caras:  574 Texturas: Si

RPG-7 – Lanza misiles

Este modelo de lanza cohetes viene separado, por un lado el cuerpo del arma y por otro el proyectil. Además cuenta con texturas PBR hechas por mi.

  Vértices: 775 Caras: 694 Texturas: Si

Introducción

En este artículo hay modelos 3D de mesas para descargar y utilizar en tus proyectos en Unity.

De cada modelo hay imágenes representativas renderizadas en Blender 2.8 y una descripción breve del modelo, indicando datos de topología y materiales.

Los modelos están en formato .fbx y se pueden importar directamente en el motor Unity.

Puedes usar estos modelos para construir prototipos rápidamente. Espero que te sean de utilidad.

Mesa rectangular

Se trata de una mesa rectangular para seis personas, tiene dos materiales, uno para las patas y partes del cuerpo y el segundo material para la parte superior.

Vértices: 204 – Caras: 206 – Materiales: 2

Mesa Oval

Mesa con parte superior oval para seis personas, las patas están pensadas para ser de metal y la parte superior de vidrio.

Vértices: 792 – Caras: 724 – Materiales: 2

Mesa Ratona

Mesa pequeña para sala de estar, pensada con una estructura metálica y dos piezas de vidrio.

Vértices: 168 – Caras: 156 – Materiales: 2

Mesa de Luz

Mesa para de luz para el dormitorio, tiene un cajón decorativo (no se abre).

Vértices: 120 – Faces: 122 – Materiales: 2

Esquinero

Esquinero con dos piezas de vidrio.

Vértices: 78 – Caras: 53 – Materiales: 2

Salir de la versión móvil
Secured By miniOrange