Guía de recorrido por el Kit de juego en 3D

Tutorial

·

Beginner

·

+0XP

·

130 mins

·

Unity Technologies

Guía de recorrido por el Kit de juego en 3D

Esta es una guía detallada de orientación que abarca desde el desarrollo de un nivel mediante el uso de ProBuilder y PolyBrush hasta el uso de todas las funciones interactivas y de ambientación disponibles en el Kit de juego en 3D. La mayor parte de los pasos del tutorial se pueden utilizar como guías independientes, pero no dejes de consultar los tutoriales disponibles para comprender mejor.

Si quieres ponerte al día rápidamente, consulta la Guía de inicio rápido, dado que contiene tutoriales y ejemplos más breves y autónomos. Para comenzar, elabora una Escena nueva siguiendo las instrucciones en el Paso 2 de la Guía de inicio rápido.

Languages available:

1. Introducción a la Guía

Esta es una guía detallada de orientación que abarca desde el desarrollo de un nivel mediante el uso de ProBuilder y PolyBrush hasta el uso de todas las funciones interactivas y de ambientación disponibles en el Kit de juego en 3D.

La mayoría de los tutoriales se pueden utilizar como guías independientes, pero consulta los tutoriales disponibles para comprender mejor.

Si quieres ponerte al día rápidamente, consulta la Guía de inicio rápido, dado que contiene tutoriales y ejemplos más breves y autónomos.

Para comenzar, elabora una Escena nueva siguiendo la Guía de inicio rápido que se encuentra aquí.

2. ¿Cómo editar con ProBuilder?

La nueva Escena tendrá un cuadrado de suelo, alrededor del cual Ellen puede correr. Demosle un vistazo a esto:

  • Ve a la ventana Hierarchy.
  • Selecciona el GameObject llamado Plane.

Este Plane ha sido creado con ProBuilder, una herramienta que te permite crear y editar objetos 3D en Unity. La ventana ProBuilder está abierta, ya que tenemos un ProBuilder Mesh (Malla de ProBuilder) en la Escena.

Si no está abierta, puedes abrirla desde el menú superior:

  • Haz clic en Tools > ProBuilder > ProBuilder Window

Greyboxing

El «Greyboxing» o uso de cajas grises, es el arte de crear formas simples, o Geometría, en una Escena, para delinear y planificar un nivel que se quiere crear. En el desarrollo de juegos, estas son las etapas iniciales del diseño de un nivel, en las cuales es posible elaborar prototipos y probar ideas rápidamente. ProBuilder es una gran herramienta para Greyboxing, así que creemos una forma nueva en nuestra Escena:

  • Ve a la Ventana ProBuilder.
  • Haz clic en el signo + junto a New Shape (Forma Nueva).

Esto también abrirá la ventana Shape Tool (Herramienta de forma).

El menú desplegable Shape Selector (Selector de formas) permite crear muchas formas diferentes.

Por ahora crearemos un Cubo, que es la forma por defecto:

  • Selecciona Cube (Cubo).
  • Establece las Dimensions (Dimensiones) en 3,3,3.
  • Haz clic en Build Cube (Crear Cubo).

Ahora has creado un cubo en medio de la Escena. Dado que nuestro Plano es un poco más alto que el centro del cubo, se cruzará con el Plano.

Puedes mover el Cubo utilizando la herramienta Move. Haz clic en cualquiera de las flechas en la vista Escena para moverlo a donde quieras.

Puedes cambiar la forma del cubo utilizando varias herramientas de ProBuilder. Para obtener más información sobre la creación de modelos 3D dentro de Unity utilizando ProBuilder, consulta el tutorial ProBuilder101 y la documentación.

Por ahora eliminemos este cubo:

  • Selecciona Cube en la ventana Hierarchy.
  • Presiona la tecla Borrar (Cmd + Tecla suprimir en Mac) en el teclado.

A continuación pasaremos a editar y pintar nuestro plano del suelo.

3. ¿Cómo crear un charco de ácido?

Esta acción encontrará y enmarcará el Ácido en la vista eEscena.

El suelo está hecho de un Plano de ProBuilder. Estos generalmente son planos, pero, al utilizar PolyBrush, podemos crear una superficie irregular y pintar texturas para hacer que esta Malla parezca suelo. Crearemos un hundimiento en el suelo donde podemos agregar un charco de ácido como un peligro para Ellen.

Mesh (Malla): Una malla consta de triángulos dispuestos en el espacio 3D para generar la impresión de un objeto sólido. Un triángulo se define por sus tres esquinas o vértices.

Nota: PolyBrush actualmente está en versión Beta, así que es posible que se produzcan algunos errores al utilizar esta herramienta.

Podemos hacer un poco más grande este Plano para el nivel que desarrollaremos de esta manera:

  • Selecciona el Plane en la ventana Hierarchy.
  • Ve al Inspector.
  • Establece la opción Scale del Eje X en 2.
  • Mantén la Scale del Eje Y en 1.
  • Establece la Scale del Eje Z en 2.

Abramos la Ventana PolyBrush y empecemos a editar:

  • Ve a Tools > PolyBrush > Ventana PolyBush

Nota: PolyBrush actualmente está en versión Beta, así que el diseño puede cambiar.

Con el Plano seleccionado:

  • Haz clic en el icono Push/Pull (Empujar/Tirar) en la Ventana PolyBrush.

  • Selecciona el Plane y luego pasa el mouse sobre él en la vista de Escena.
  • El dispositivo para Push/Pull aparecerá siempre que muevas el mouse.

  • Haz clic con el botón izquierdo para elevar el suelo empujando los vértices hacia arriba;
  • O mantén presionado Ctrl y haz clic con el botón izquierdo para bajar el suelo empujando los vértices hacia abajo.

Ahora que conoces los aspectos básicos, crea un pequeño hundimiento en el plano utilizando Ctrl + Clic Izquierdo para empezar a formar un charco.

  • Haz clic en el icono Push/Pull cuando hayas terminado de editar para anular la selección de la herramienta.

Deberías tener algo similar a lo siguiente.

Para obtener más información sobre PolyBrush y cómo usarlo, visita los Tutoriales y la Documentación

Ahora continuemos con la creación de nuestro primer peligro.

¿Cómo agregar Ácido?

Para encontrar el Acid (Ácido), tenemos que ir a la ventana Proyecto. Allí es donde se guardan todas las herramientas y los Prefabs:

  • Ve a Assets > 3D GameKit > Prefabs > Interactables.
  • Haz clic con el botón izquierdo y arrastra el elemento Acid Prefab a la ventana Hierarchy.

El Ácido aparecerá en algún lugar de la Escena. En Unity, puedes ubicar un objeto rápidamente mediante la Selección de Marco:

  • Selecciona el Acid en la ventana Hierarchy.
  • Pasa el mouse sobre la vista de Escena.
  • Presiona F en el teclado.

Esta acción encontrará y enmarcará el Ácido en la vista de Escena.

El Ácido actualmente es demasiado grande, así que vamos a reducirlo un poco:

  • Con el Ácido seleccionado, presiona R en el teclado para la herramienta Scale.
  • Haz clic en la casilla blanca del medio y arrástrala para reducir el tamaño del Ácido.

El Ácido además está en una posición incorrecta. Usa la herramienta Move (selecciona el Ácido y presiona W) para colocar el Ácido justo debajo del Plane, haciendo que sobresalga un poco a través del lugar donde creaste el charco.

Puedes continuar posicionando y ajustando el tamaño del Ácido hasta que obtengas los resultados que desees.

Consejo: El Ácido solo tiene que ser un poco más grande que el espacio del charco.

  • Presiona Play y prueba la Escena para verificar el burbujeante charco de Ácido.

Nota: Al crear una nueva Escena mediante el menú de la barra de herramientas 3DGamekit, se agregará un área DeathVolume por defecto que tiene un tamaño muy grande para que tengas suficiente espacio de edición. Ten cuidado al bajar el terreno por debajo de esta área, dado que Ellen morirá al entrar.

Vista superior - Nivel por defecto del volumen de muerte

Vista lateral - Nivel por defecto del volumen de muerte

¿Cómo agregar un volumen de muerte?

En este momento, Ellen podría tomar un baño en el Ácido sin salir lastimada, lo que no lo convierte en un peligro importante.

Para hacer que el Ácido mate a Ellen (lo siento, Ellen) cuando ingrese en él:

  • Selecciona el Ácido en la ventana Hierarchy.
  • En el Inspector, haz clic en Add Component.
  • Escribe «death» (muerte) en el cuadro de búsqueda.
  • Selecciona el Script Death Volume.

Esto agregará la secuencia de comandos Death Volume al Ácido. Esta es una secuencia de comandos que hemos creado para indicarle al juego que haga que Ellen pierda toda su vitalidad.

  • Presiona Play y prueba tu nivel. Intenta correr hacia el charco de Ácido. Ellen morirá y se regenerará poco después.

4. Coloreado de vértices con Polybrush

PolyBrush ofrece una función de arte en 3D muy útil llamada Vertex Coloring (Coloreado de vértices) que permite pintar en el Vertex (Vértice, los puntos que se unen para componer una superficie) a diferencia de pintar directamente sobre la superficie del GameObject.

De un modo similar a como se utilizó la función Push/Pull para crear el charco de Ácido y el volumen de muerte, la pintura utilizará el vértice para pintar la superficie. Los vértices están resaltados en la captura de pantalla y las líneas representan los bordes del polígono entre ellos.

Esto puede resultar extraño al principio, ya que uno esperaría que se pueda pintar directamente sobre la superficie, mientras que con el pintado de vértices se requiere que el vértice y los vértices más cercanos a lo largo del borde de la superficie «mezclen» los colores/texturas entre sí.

Esto lo manejan los Materials (Materiales) que utilizan Shaders (Sombreadores) (secuencias de comandos) para agrupar Textures (Texturas) (imágenes de bitmap) y renderizarlas en un GameObject. Para ver una explicación más detallada de estos temas, ve a la página del Manual llamada Materials, Shaders and Textures (Materiales, Sombreadores y Texturas).

¡Empecemos ahora mismo y vamos a pintar para mostrar cómo se hace!

Pintura y Materiales

Cuando creaste la Escena anteriormente utilizando el Kit, el Plano ya estaba creado con un material sombreador adjunto. En los siguientes pasos, verás cómo se creó esto y entenderás más detalladamente qué compone el estilo visual y los materiales.

Empecemos configurando un plano básico y adjuntando un material.

  • A menos que ya esté abierto, abre ProBuilder desde Tools > ProBuilder > ProBuilder Window

  • Selecciona New Shape (Nueva forma) en la Ventana ProBuilder

  • En la ventana Shape, selecciona Plane en el menú desplegable

Esto agregará un plano a la vista de Escena con algunos valores por defecto adjuntos. Colócalo junto al plano por defecto creado anteriormente. Para que se vea como el de la demostración, configura los valores del Plane en la ventana ProBuilder de este modo:

  • Width (Ancho): 20
  • Height (Altura): 20
  • Width Segments (Segmentos de ancho): 10
  • Height Segments (Segmentos de altura): 10

En el Inspector, configura lo siguiente

  • Position (Posición): X: -30 Y: 0 Z: -10

Esto debería colocar el plano junto al plano generado en el nivel. Si no se alinea perfectamente utilizando los valores, ajusta según sea necesario.

Regresa a la ventana de la herramienta Shape y haz clic en Build Plane (Crear Plano).

Mirando el Inspector, podrás ver que el Shader que está adjunto actualmente es simplemente Standard Vertex Color (Color de vértice estándar), que se mostrará como inhabilitado.

Para cambiar esto puedes agregar los materiales creados en 3D Gamekit. Para ubicarlos, puedes usar el botón Search by Type (Buscar por tipo) en la vista Project y seleccionar Material en el menú desplegable.

Esto actualizará la vista Project para mostrar todos los materiales del proyecto.

En 3DGamekit, el Material por defecto adjunto al Plane principal es Default_Ground_Mat. Filtremos más los resultados.

  • Escribe default_ground_mat junto al texto t: Material en el campo de búsqueda.

  • Arrastra y suelta el Default_Ground_Mat.mat de la vista Project al Plane en la vista de Escena para agregarle el material.

Fíjate que, en el Inspector, el Material ahora se ha actualizado a Default_Ground_Mat.

Esto te permitirá utilizar el material para pintar en el Plane.

  • Ve a Tools > Polybrush > Polybrush Window

  • Selecciona la pestaña Paint vertex colors en la parte superior de la ventana Polybrush.

Fíjate cómo la textura aparece en mosaicos en el área de la superficie del plano con el patrón por defecto a la izquierda y la versión en la cual se pintaron los vértices a la derecha.

Para ver las texturas que están mapeadas actualmente, ve a Assets > 3DGamekit > Art > Textures > Environment > Ground en la vista Project.

Consejo: Para llegar allí más rápido, no obstante, puedes usar el Sombreador Default_Ground_Mat. Haz clic en la punta de la flecha junto a la vista previa de Material y selecciona una de las texturas. Ambos métodos te llevarán a la carpeta correcta en la vista Project.

Para comenzar a pintar el plano nuevo, selecciona la pintura Roja en la ventana Polybrush para configurar el Brush Color (Color de pincel).

Esto te permitirá utilizar las texturas mapeadas para pintar; en este caso, la Textura Moss_Albedo para pintar en los vértices.

Usando el dispositivo del pincel en la vista de Escena, moviéndolo hacia un vértice en el plano, podrás ver la mezcla de texturas en vivo en el Editor. Para que sea permanente, simplemente haz clic.

Si deseas agregar una textura de MuddyGround (Suelo con lodo), cambia el Color de pincel a Azul y, para una textura MuddyGround con SmallStone (Piedras pequeñas), cambia el Color de pincel a Verde en la Palette (Paleta). Esto le dará una buena variedad a la superficie.

¡Ahora es tu turno para ponerte creativo con el pincel! Combinando Push/Pull y cambiando el tamaño del pincel y las texturas de Color del pincel, puedes crear una gran variedad de mallas pintadas.

Consejo: A fin de probar los diferentes colores, puedes obtener una vista previa en vivo de ellos en el Editor, para ver las diferentes texturas y mezclas que se aplican en 3DGamekit.

¿Cómo eliminar los Scripts de ProBuilder de los objetos?

Cuando utilices objetos creados por ProBuilder en la Escena, es mejor eliminar las secuencias de comandos de ProBuilder al terminar de editar para prevenir cualquier reducción de recursos innecesaria en el juego. Esto elimina las secuencias de comandos de los objetos seleccionados individualmente o de todos los objetos de ProBuilder en la Escena.

  • Haz clic en Tools > ProBuilder > Actions y luego elige todas las secuencias de comandos o simplemente las de un objeto seleccionado individualmente.

Esta acción es permanente, así que asegúrate de haber hecho todos los cambios necesarios en las mallas y con el pintado de vértices antes de hacerlo. El Editor te advertirá antes de finalizar la acción.

5. ¿Cómo usar Prefabs de ambiente?

Hemos creado Geometría de Nivel para que puedas colocar algo donde lo desees. La encontrarás en Prefabs > Environment.

Como ejemplo, arrastremos un modelo de roca a la Escena:

  • En la ventana Project, ve a Prefabs > Environment > Rock.
  • Haz clic en CliffBig01.
  • Obtén una vista previa de este modelo en la Ventana Preview (Vista previa), en la parte inferior del Inspector.

  • Haz clic con el botón izquierdo sobre el modelo en la Ventana Preview y rótalo y míralo desde diferentes ángulos.

Consejo: Si no puedes ver esta ventana, haz clic en la barra gris ubicada en la parte inferior del Inspector y arrastra el mouse hacia arriba.

Nota sobre el desempeño

Cuando hagas girar el modelo, verás que le faltan partes. Esto es normal porque a muchos de los elementos geométricos les falta la parte de atrás. Esto hace que las escenas más grandes tengan un mejor desempeño e impide que tu computadora se vuelva más lenta.

Mientras más elementos geométricos y efectos especiales agregues a la Escena, más recursos necesitará tu computadora para procesarla. En algunos equipos, esto puede ser cantidades increíblemente grandes de elementos geométricos y efectos, mientras que, en otros, puede ser muy poco. Ten presente esto cuando desarrolles los niveles y, si tu computadora se empieza a volver más lenta cuando presionas Play, quizás debas eliminar algunos elementos geométricos.

Hemos utilizado algunas técnicas como las anteriores para permitirte crear tanto como puedas. El proyecto detectará automáticamente el hardware de tu computadora y determinará cuántos elementos geométricos y efectos puedes ver y qué nivel de detalle tienen, de un modo similar a como los juegos de PC cambian las configuraciones según la computadora. En caso de que necesites restablecer estos ajustes o de que no se configuren automáticamente, ve a Kit Tools > Auto Detect Quality Settings.

Si deseas cambiar esta configuración manualmente y ver el desglose de la configuración ve a Edit > Project Settings > Quality. Esto abrirá la información en el Inspector para que realices los ajustes que consideres necesarios.

Nivel de Detalle

Otra técnica que utilizamos para mejorar el desempeño es el uso de LOD Groups (Grupos de NDT). LOD es una sigla que significa Level of Detail (Nivel de Detalle). Las mallas con bajo nivel de detalle se muestran cuando el objeto está alejado de la cámara y la diferencia no se percibe. Esto es así porque las mallas con una geometría más simple exigen menos al hardware.

Veamos CliffBig01 como ejemplo:

  • Arrastra CCliffBig01 a la vista de Escena.
  • En la ventana Hierarchy, haz clic en la flecha junto a CliffBig01 para exponer sus elementos secundarios.

Haz clic en cada uno de los elementos secundarios y mira cómo cambian en la vista de Escena:

Aquí podemos ver el cambio detallado. Configuramos cada una de estas mallas para que se muestren a diferentes distancias de la cámara.

  • Haz clic en la flecha junto a CliffBig01 para contraerlo.
  • Asegúrate de que CliffBig01 esté seleccionado.
  • En el Inspector, fíjate en el LOD Group Component.

Aquí puedes ver qué modelos se mostrarán a qué distancia de la cámara. No es necesario que cambies estas configuraciones, ya que las hemos establecido por ti. Las distancias de los Grupos de LOD serán diferentes dependiendo de la configuración de calidad que se haya seleccionado automáticamente para ti.

Para obtener más información sobre los Grupos de LOD, consulta nuestra Documentación

6. Pintor de rocas y vegetación

Para adornar la Escena, hemos creado un Pintor de rocas y un Pintor de vegetación. Estas herramientas te permiten colocar vegetación y rocas con diversos tamaños y rotaciones, manteniéndolas a la vez alineadas con la superficie sobre la cual estás pintando.

Para usar estas herramientas:

  • En la ventana Hierarchy, ubica VegetationPainter (Pintor de vegetación).
  • Haz clic en la flecha para ampliar los elementos secundarios.

  • Haz clic en GroundCover (Cubierta de suelo).
  • Pasa el mouse sobre el suelo en la vista de Escena.
  • Haz clic con el botón izquierdo para poner trozos de césped/lirio donde lo desees.

Puedes cambiar el tipo de objeto que se esté poniendo. Para ello:

  • Ve al Inspector.
  • En el componente Instance Painter (Pintor de instancia), hay imágenes de cada elemento prefabricado en el pintor.

  • El elemento prefabricado seleccionado estará inhabilitado.
  • Haz clic en la casilla blanca resaltada para seleccionar el elemento Prefab con el cual quieres pintar.

Encontrarás los controles para el pintor en la parte superior del componente Instance Painter. Algunos controles para comenzar:

  • Clic izquierdo: Pintar
  • Ctrl (Cmd) + Clic izquierdo: Eliminar
  • Alt + Desplazamiento: Aumentar tamaño del pincel
  • Barra espaciadora: Aleatorizar las posiciones y la rotación

Cualquier objeto sobre el cual pintes se guardará como elemento secundario del elemento principal. Por ejemplo:

  • Ve a Hierarchy
  • Amplía GroundCover

Cada objeto de ese tipo en la pintura se guardará aquí como un elemento secundario. También puedes hacer clic en los elementos para editarlos y ubicarlos de forma individual.

El proceso es el mismo para pintar VegetationSmall (Vegetación pequeña), VegetationMedium (Vegetación mediana) y VegetationLarge (Vegetación grande).

Para pintar rocas, se procede de la misma manera:

  • En Hierarchy, busca RockPainter (Pintor de rocas).
  • Haz clic en la flecha para ampliar los elementos secundarios.
  • Haz clic en RocksSmall (Rocas pequeñas).
  • Desplaza el mouse sobre el área deseada para colocar rocas y haz clic a fin de ubicarlas.

Estas herramientas te ayudan a agregar variación rápidamente a la manera de decorar el nivel. Las encontrarás y podrás colocarlas a la manera tradicional arrastrando los elementos prefabricados de la carpeta Prefabs.

  • Ve a la ventana Project
  • Ve a Assets > 3DGameKit > Prefabs > Environment

Aquí encontrarás carpetas para Rocas, Vegetación pequeña, Vegetación mediana, Vegetación grande.

Puedes hacer clic y arrastrar cualquiera de estos elementos a la vista de Escena para ponerlos en su nivel. Ten presente que la posición, las rotaciones y el tamaño no se distribuirán al azar al arrastrar objetos de esta manera.

Sigue colocando objetos en la Escena. No olvides probar ocasionalmente tu nivel presionando Play para ver cómo se ven las cosas en el juego.

Hemos creado un ambiente pequeño para mostrarte mecánicas de juego en los próximos capítulos. ¡Diviértete y sé creativo cuando desarrolles tu nivel!

7. ¿Cómo organizar tu Escena?

Al crear cualquier Escena en Unity, es importante mantener las cosas ordenadas en Hierarchy para que puedas encontrar fácilmente los objetos o la mecánica de juego que buscas. A continuación, verás algunos consejos para mantener los proyectos prolijos y organizados aunque esto no es obligatorio para utilizar el Kit.

En Hierarchy, hemos creado secciones para ayudar a ordenar tipos de objetos en nuestra Escena.

Estas están hechos de GameObjects vacíos. No tienen ninguna función excepto ayudarnos a identificar los tipos de objetos en nuestra Escena. Ten en cuenta que no todos los objetos debajo de cada sección nombrada son elementos secundarios de esa sección y no es necesario que lo sean.

Creemos una sección nueva para guardar toda nuestra decoración de nivel adicional:

  • En la parte superior de Hierarchy, ve a Create > Create Empty

Esto creará un GameObject nuevo y vacío llamado GameObject en la parte inferior de Hierarchy

En Hierarchy, asegúrate de que el GameObject esté resaltado en azul, lo que indica que lo has seleccionado. Ahora podemos cambiarle el nombre:

  • Ve al Inspector
  • En la parte superior del Inspector, haz clic en el campo Name (Nombre)
  • Ingresa el nombre ----- Environment ----- (Ambiente)

Nombrar las secciones de esta manera te ayudará a encontrar los objetos cuando tengas muchos más.

Ahora vamos a mover CliffBig01 a la sección adecuada para poder encontrarlo más adelante.

  • En Hierarchy, ubica CliffBig01.
  • Haz clic con el botón izquierdo y arrastra CliffBig01 hasta que esté debajo de ----- Environment -----. Luego, suelta el botón del mouse.

Consejo: Asegúrate de no soltar el botón izquierdo que esté sobre otro objeto, dado que lo convertirá en un elemento secundario.

Aparecerá un indicador visual cuando algo se convierta en un elemento secundario al arrastrarlo. Se verá así:

Asegúrate de ver una línea horizontal cuando arrastres el objeto debajo de -----Environment -----. Esto indica que se colocará el objeto debajo, de esta manera:

En caso de que lo coloques por accidente como elemento secundario de la etiqueta, simplemente puedes volver atrás e intentarlo de nuevo.

8. Límites del juego

Cuando crees un nivel, podrías encontrarte con que, al realizar pruebas, puedes escapar fácilmente del nivel e ir hacia afuera, donde quieras que un jugador vaya. Esto no siempre se puede corregir agregando más geometría. Se pueden agregar muros invisibles para impedir que los jugadores puedan escapar.

Podemos hacerlo agregando un Collider (Colisionador) en un GameObject vacío y agregándolo a nuestra Escena:

  • En la parte superior de Hierarchy, ve a Create > Create Empty
  • En el Inspector, renombra esto como GameBoundary (Límite del juego)
  • En el Inspector, haz clic en Add Component
  • En el cuadro de búsqueda, escribe Box Collider (Cubo colisionador)

  • Haz clic en el Cubo colisionador para agregarlo al GameObject GameBoundary que acabas de crear.

Ahora vamos a ubicar este objeto en la Escena:

  • Selecciona GameBoundary en Hierarchy
  • Pasa el mouse sobre la vista de Escena
  • Presiona F en el teclado para hacer Selección de marco en el Objeto.

El Cubo colisionador se puede ver con un diseño verde. Posiciona, rota y amplía este objeto a cualquier área problemática en tu nivel.

Necesitamos asegurarnos de que este Colisionador impedirá que Ellen pueda pasar a través de él. Hemos configurado una Layer (Capa) específica para esto, con GameBoundary seleccionado:

  • En el Inspector, haz clic en el menú desplegable Layer.
  • Haz clic con el botón izquierdo en Environment a fin de configurarlo para esa Capa.

Hemos colocado el nuestro en un área donde el jugador puede saltar y escapar fácilmente. No olvides probar el límite del juego presionando Play.

9. Una mirada más detallada sobre las plataformas móviles

Echemos un vistazo a cómo agregar varios elementos de juego utilizando el Kit. Hemos establecido un nivel de demostración para tal fin. Puedes usar la Escena que tú mismo armaste para seguir o usar una Escena nueva.

Si has usado el Kit de juego en 2D, algunas de estas técnicas pueden resultarte familiares, aunque hemos ajustado algunos elementos para simplificar el flujo de trabajo.

Es posible utilizar plataformas móviles para llevar al jugador de un lugar a otro. Agreguemos una a nuestra Escena:

  • Dirígete a la ventana Project.
  • Ve a Assets > 3D GameKit > Prefabs > Interactables.

La carpeta Interactables es el lugar donde encontrarás elementos de juego prefabricados creados para este Kit.

  • Haz clic con el botón izquierdo y arrastra el Prefab MovingPlatfrom (Plataforma Móvil) a la vista de Escena o a Hierarchy.
  • Nota: Si lo mueves a Hierarchy, no olvides utilizar Frame Select (Seleccionar marco) para encontrarlo (Atajo de teclado - F).
  • También puedes posicionar, rotar y ampliar el objeto por medio del Inspector en el componente Transform.

Consejo: Pasar el mouse sobre X, Y o Z, y hacer clic con el botón izquierdo o derecho aumentará y disminuirá estos valores, respectivamente.

  • Ubica el objeto completo donde quieras que empiece la plataforma.

Hemos colocado el nuestro sobre el charco de Ácido que creamos antes.

Ahora veamos cómo crear la plataforma y establecer su ruta para cambiar a dónde se moverá la plataforma.

Dispositivos

La plataforma móvil viene con 3 dispositivos (gizmos) adjuntos que te permiten modificar fácilmente el movimiento de la plataforma. En la pantalla, puedes ver que te permite configurar la posición Transform para ponerla en el mundo (1). La posición Starting (2) y la posición Ending (4) con la distancia (3) en el medio presentada en la línea de puntos del traslado.

En la ventana Inspector, ubica el Simple Translator (Script) y marca la casilla Activate para permitir el movimiento de MovingPlatform.

Si has movido la ubicación de Start durante este proceso antes de marcar Activate, notarás que la MovingPlatform se encaja en el lugar de Start en lugar de en la posición inicial configurada en Transform. Esto sucede para garantizar que la plataforma siempre empiece en el lugar correcto y se traslade según los comportamientos establecidos en el Script de Simple Translator.

Consejo: Mantener presionada la tecla Ctrl (Cmd) cuando mueves un dispositivo hará que se encaje en la cuadrícula e incremente los movimientos. Esto puede ser realmente útil para lograr rutas rectas.

Ellen necesita cruzar el ambiente y evitar el charco de Ácido. Por lo tanto, el Gizmo End (Dispositivo de finalización) debe ajustarse o se desplazará por defecto sobre el Eje Z, lo cual no es muy útil para el jugador.

Para ver el movimiento de desplazamiento actual de la MovingPlatform en el Editor, puedes mover el deslizador para Preview Position (Posición de vista previa) en un rango del 0 al 1. Verás en la ventana Escena que la plataforma se mueve a donde estaría en el juego en esa etapa del desplazamiento.

Esta es una función muy útil para ayudarte a ver cualquier superposición potencial con otros GameObjects en la Escena o en la vista previa del comportamiento.

Duración

Para modificar la velocidad de la secuencia de Start a End, puedes cambiar el valor Duration (Duración) que por defecto está configurado en 5 y se mide en Segundos. Reducir este valor generará una secuencia más rápida y aumentarlo generará un desplazamiento más lento.

Configurar plataformas móviles

  • Haz clic en el controlador Y (Verde) en el Gizmo End. Presiona Ctrl (Cmd) para encajarlo y luego arrástralo hacia abajo hasta la altura deseada.

En este ejemplo, queremos que sea un desplazamiento recto hacia abajo. Arrastra el controlador Z (Azul) del Gizmo End y arrastra (Ctrl/Cmd) el Gizmo (Dispositivo) hacia abajo del Punto de inicio.

Si mueves el deslizador Preview Position (Vista previa de posición) ahora, la Plataforma Móvil debería moverse hacia la nueva posición del Punto de finalización.

  • El último paso para este ejemplo es configurar el Loop Type (Tipo de bucle) para Ping Pong, que actualmente está configurado en Once (Una Vez). Cambiar esto reiterará la secuencia de Inicio a Fin y empezará de nuevo.

Tipo de bucle

Once - Linear (Una Vez - Lineal) - se mueve de Inicio a Fin y se detiene al llegar al Fin.

El tipo de bucle Once se usa mayormente cuando solo requieres que el jugador se traslade de Inicio a Fin.

Ping Pong - Two Way Loop - (Ping Pong - Bucle dos veces) se mueve de Inicio a Fin y luego de Fin a Inicio generando un bucle de movimiento continuo.

El tipo de bucle Ping Pong se usa mayormente cuando la ruta que proporciona la plataforma para el jugador debe estar disponible de forma continua.

Repeat - One Way Loop - (Repetir - Bucle de una dirección) se mueve de Inicio a Fin y luego regresa a Inicio para repetir.

El tipo de bucle Repeat se usa mayormente para secuencias de una sola dirección cuando las plataformas se generan desde el Inicio y se mueven hacia el Fin. Esto se puede ver en el pozo de Ácido del nivel 2 del Kit de juego en 3D (3D Game Kit > Scenes > Gameplay).

Comandos de juego con Sensores de presión

Los Game Commands (Comandos de juego) permiten que los GameObjects de tu Escena se comuniquen con otros GameObjects enviando y recibiendo comandos. Esto te ayuda a diseñar secuencias de comando y comportamientos complejos.

Los Comandos de juego se basan en Eventos que ocurren y varían según el objeto en el Kit de juego en 3D. En este ejemplo, veremos cómo configurar un Prefab PressurePad (Sensor de presión) que active el Prefab MovingPlatform agregado en el tutorial Plataformas Móviles utilizando Comandos de juego.

  • A fin de preparar la MovingPlatform para las interacciones del PressurePad, desactiva la propiedad Activate.

¿Cómo vincular objetos interactivos?

  • Ve a la vista Project y dirígete a 3DGamekit > Prefabs > Interactables.
  • Arrastra y suelta un PressurePad de la ventana Project en la vista de Escena, cerca de la MovingPlatform que combinarás con el PressurePad.

En el Inspector, el componente que editarás es el Script Send On Trigger Enter.

El Script te permitirá incorporar otros GameObjects utilizando la selección Interactive Object (Objeto interactivo), que vincula el Game Command Receiver (Receptor de comandos de juego) con el GameObject correspondiente en Hierarchy.

En este ejemplo, vincularemos la MovingPlatform que ya está en la vista Hierarchy.

  • Para hacerlo, haz clic en el botón Selection del Objeto interactivo, selecciona MovingPlatform y cambia Interaction Type a Activate.

Deberías ver una línea de enlace con puntas de flecha direccionales en la vista de Escena del PressurePad a la MovingPlatform. Esto visualiza la relación entre los dos GameObjects y muestra el flujo de Sender (Emisor) a Receiver (Receptor) para los Comandos de juego.

  • Haz funcionar el juego y camina en el PressurePad de Una Vez (debe permanecer presionada) para activar la MovingPlatform y comenzar la secuencia del bucle.

10. ¿Cómo usar contadores e interruptores?

Podemos conectar varios objetos. A continuación, veremos cómo usar un Contador para registrar 3 activaciones del interruptor antes de abrir la puerta.

  • Para empezar, ve a la ventana Project > Assets > 3DGameKit > Prefabs > Interactables. Agrega un Switch (Interruptor) y una DoorSmall (Puerta Pequeña) arrastrándolos a la vista de Escena.

Ahora conectemos el Switch y la DoorSmall para que la Puerta se abra cuando se active el Interruptor.

  • En Hierarchy, haz clic en Switch para seleccionarlo

  • En Hierarchy, haz clic y arrastra DoorSmall al espacio del Objeto Interactivo en el Componente Send on Trigger Enter del Switch

  • En la vista de Escena, deberías ver una línea blanca de flechas que muestra una conexión del Switch a la DoorSmall.

  • En Hierarchy, selecciona el Switch
  • Presiona Ctrl + D (Cmd + D en Mac) para duplicar el Switch
  • Repite esto una vez más para obtener otro Switch

Deberías ver Switch, Switch (1) y Switch (2).

Aparecerán en la parte inferior de Hierarchy. Para mantener el proyecto organizado, usa Ctrl + Clic (Cmd + clic) en cada uno de ellos y arrástralos bien juntos en Hierarchy.

Se duplicarán en el mismo lugar que el original:

  • En Hierarchy, selecciona cada uno de los interruptores individualmente y posiciónalos uno a uno para que formen una hilera.

También puedes ver que mientras hemos duplicado el objeto, también ha duplicado su conexión con la puerta. Estrellarse contra cualquiera de estos interruptores abrirá la puerta. Puedes presionar Play y probarlo si quieres.

Queremos abrir la puerta cuando se hayan activado los 3 interruptores:

  • En la ventana Project ve a Assets > 3DGameKit > Prefabs > Interactables
  • Busca el elemento prefabricado Counter (Contador) y arrástralo a tu Escena.
  • Colócalo cerca de tus interruptores.

Este objeto no tiene presencia física en la Escena, ya que guarda mecánicas del juego. Puedes verlo usando las Herramientas de Transformación. Dado que no podemos verlo en la Escena, seleccionaremos el Counter usando Hierarchy.

Consejo: Puedes hacer que este tipo de objetos sean más visibles en la vista de Escena al agregar una etiqueta:

  • Selecciona el Counter.
  • En la parte superior del Inspector, haz clic en la casilla Azul.
  • Selecciona una etiqueta de color en el menú desplegable.

Esto agregará una etiqueta a tu objeto.

Si no puedes verla, quizás los iconos sean demasiado pequeños en la Vista Escena. Puedes modificar esto:

  • En la parte superior de la vista de Escena, haz clic en el menú desplegable Gizmos (Dispositivos)
  • Ajusta el deslizador que cambiará el tamaño de los iconos en la vista de Escena

Ahora que tenemos un Counter en la Escena que puede contar una cantidad de emisores, tenemos que enviar al Counter el Comando de juego «Open» desde cada Switch.

  • En Hierarchy, selecciona Switch
  • Haz clic y arrastra el Counter al espacio Interactive Object en el Script Send on Trigger Enter

Esto sustituirá la Puerta como objeto al cual enviar un comando.

Las flechas aparecerán conectadas al Counter en la vista de Escena.

  • Repite los pasos anteriores con Switch (1) y Switch (2)

Los 3 interruptores ahora enviarán un comando al Contador

Podemos volver a verificar esto en el Script Game Command Receiver en el Counter.

Ahora si entramos al modo Play y ejecutamos cada interruptor, no sucederá nada. Tenemos que decirle a DoorSmall que se abra cuando el Counter haya llegado a 3.

  • Selecciona el Counter en Hierarchy
  • En el Inspector, cambia los siguientes ajustes en el Script Gameplay Counter (Contador de juego)
  • Interaction Type: Open
  • Is One Shot (Solo una vez): Verdadero (marca la casilla)
  • Target Count (Conteo objetivo): 3

Esto recibirá un comando de tipo Abrir, contará solo una vez y establecerá la cantidad objetivo en 3 para alcanzar el contador.

Ahora hagamos que el Counter envíe un Comando a la puerta.

  • Con el Counter seleccionado, ingresa la siguiente configuración en el Script Send Game Command (Enviar comando de juego)
  • Interaction Type (Tipo de interacción): Open (Abrir)
  • Arrastra DoorSmall desde Hierarchy hasta el espacio Interactive Object (Objeto Interactivo)
  • One Shot (Una Vez): Habilitado (marca la casilla)

Ahora cada interruptor enviará un comando al Counter y este enviará un Open Command a la puerta cuando haya recibido 3 comandos.

Prueba tu nivel presionando Play. Deberías poder estrellarte contra cada interruptor y la puerta se abrirá cuando lo hayas hecho 3 veces.

El Counter se puede utilizar para muchas condiciones que requieran una medida para cumplirse. El Comando Send Game permite varios Interaction Types además de Enable y Open:

¿Cómo indicarle el progreso a un jugador?

Normalmente, colocaríamos estos tipos de elementos de la mecánica del juego muy alejados unos de otros. Hemos hecho esto en el ejemplo de juego de este proyecto. Generalmente se considera una buena práctica en el diseño de juegos indicarle al jugador su progreso, ya sea a través de una interfaz de usuario o de indicadores integrados.

Adaptaremos nuestro Game Command y nuestro Counter para mostrar Cristales que se iluminan cerca de la puerta cuando se utiliza cada interruptor. Esto le mostrará a un jugador que hay 3 interruptores en el mundo para esa puerta y le indicará cuántos ha activado.

  • En la ventana Project, ve a Assets > 3DGameKit > Prefabs > Interactables
  • Busca el Prefab Crystal y arrástralo a la Escena.

Es un poco grande para nuestro nivel, así que cambiemos su tamaño:

Con el Cristal seleccionado en Hierarchy

  • Ve al Inspector y mira el componente Transform
  • Configura la Escala de la siguiente manera:
  • X: 1
  • Y: 1
  • Z: 1

  • Coloca tu Cristal en algún lugar cerca de la puerta usando las herramientas de Transformación
  • Con el Cristal seleccionado en Hierarchy, presiona Ctrl + D (Cmd + D en Mac) dos veces para duplicarlo
  • Selecciona Crystal (1) y Crystal (2) en Hierarchy (Ctrl + clic o Cmd + clic en Mac) y arrástralos para reordenarlos cerca del Cristal

  • En la vista de Escena, usa las herramientas de Transformación para posicionar los Cristales en los lugares deseados

Hemos colocado el nuestro justo al lado de la puerta a fin de que sea obvio para un jugador. Hagamos que cambien el color cuando se active un interruptor:

  • En Hierarchy, selecciona el Switch
  • En el Inspector, desplázate hacia abajo hasta la parte inferior y haz clic en Add Component (Agregar Componente)
  • En el cuadro de búsqueda, escribe Send On Trigger Enter
  • Presiona Intro o Enter o haz clic en el Script llamado Send on Trigger Enter para agregarlo al Objeto Interruptor

Esto agregará otra secuencia de comandos de Send on Trigger Enter al Interruptor. Podemos usar esto para enviar un comando al Cristal de modo que cambie de color cuando se active un interruptor.

  • Configura los valores de la secuencia de comandos Send on Trigger Enter que acabamos de agregar de este modo:
  • Interaction Type: Activate
  • Arrastra el Cristal de Hierarchy al espacio Interactive Object
  • One Shot (Una Vez): Habilitado (marca la casilla)
  • Layer (Capa): Player (Jugador)

Esto enviará un comando al Cristal para que se active cuando se active el Interruptor.

Prueba la mecánica presionando Play. Haz que Ellen corra hacia el primer interruptor y también debería activar el primer Cristal.

Repite estos pasos para cada combinación de Interruptor y Cristal restante. Asegúrate de que coincidan el Interruptor (1) con el Cristal (1) y el Interruptor (2) con el Cristal (2). Cada Interruptor ahora enviará un comando al Contador y a su Cristal.

Mensajes de Interfaz de usuario (UI)

Para terminar los elementos de juego interruptores, tenemos que darle al usuario una pista con respecto a qué hacen los interruptores y su importancia. Esto se hace comúnmente como un diálogo entre el protagonista y el jugador. En el Kit de juego en 3D, esto se hace bajo la forma de un Prefab que es InfoZone (Zona de información).

  • En la vista Project, ve a 3DGamekit > Prefabs > Interactables y selecciona el Prefab InfoZone

<IMAGEN>

  • Arrastra Infozone a Hierarchy en el grupo de ---- UI ----

Recuerda agregarlo debajo de la etiqueta Empty (Vacío)

  • Mueve la esfera colisionadora sobre los interruptores y modifica su tamaño para incluir a los 3 interruptores en el área, pero no demasiado lejos porque no querrás que aparezcan cuando Ellen esté demasiado lejos de ellos.

  • Cambia Layer a Environment si el Inspector no lo ha hecho automáticamente

  • Habilita Is Trigger para el componente Sphere Collider (Esfera colisionadora) en el Inspector

El siguiente paso es vincular el Prefab DialogueCanvas (Lienzo de diálogo) que le permitirá al juego contarle al jugador la información requerida acerca de los interruptores cuando ingresan a la zona de desencadenantes utilizando los Comandos de juego.

  • Ve a 3DGamekit > Prefabs > UIPrefabs y busca el Prefab DialogueCanvas

  • Arrastra un DialogueCanvas a Hierarchy en UI
  • Desactívalo, ya que solo queremos que aparezca cuando el jugador ingrese a la zona de desencadenantes de InfoZone
  • Selecciona la InfoZone en la Escena y busca el componente Interact On Trigger (Script) en el Inspector
  • Cambia Layers a Player si no se ha hecho automáticamente
  • Establece On Enter (Objeto) y On Exit en el Script DialogueCanvasController al arrastrarlo al espacio de objeto vacío

  • Establece la función On Enter como ActivateCanvasWithText en la lista de funciones DialogueCanvasController
  • Actualiza el campo de texto para proporcionarle un texto útil al jugador. Utilizamos lo siguiente:
    • "Si activo todos estos, quizás se abra la puerta". (If I switch all of these on maybe the door will open)

  • Establece la función On Exit como DeactivateCanvasWithDelay y establece Delay (Demora) en 1

Ahora que se ha colocado todo esto, puedes mover los interruptores y cristales a otras áreas y ocultarlos del jugador para que el juego resulte más desafiante. Los vínculos de Comando de juego permanecerán adjuntos y te permitirán usar los objetos más dinámicamente en tu nivel. No olvides agregar el DeactivateCanvasWithDelay en las áreas donde requieras que se notifique al jugador la mecánica de juego clave de tu proyecto.

11. Una mirada más detallada sobre los enemigos

Dispositivo kit contiene 3 enemigos por defecto: Chomper, Spitter y Grenadier.

Todos están controlados por la secuencia de comandos EnemyController y cada uno tiene adjunto un comportamiento específico (ChomperBehavior, SpitterBehavior y GrenadierBehavior).

Chomper

Chomper es un enemigo que pelea cuerpo a cuerpo y que correrá hacia el jugador cuando lo vea y lo atacará cuando esté lo suficientemente cerca.

El tiempo para suspender la persecución equivale a la cantidad de tiempo (en segundos) que tiene el jugador para salir del campo visual de Chomper antes de que deje de perseguir al Jugador y regrese a su punto original.

Spitter

Spitter lanzará ácido explosivo hacia el Jugador cuando se lo detecte. Si el Jugador se acerca demasiado y en ese momento no está lanzando ácido, intentará huir.

Distancia de huida: Al escapar, una vez que esté lo suficientemente lejos del jugador, dejará de huir y volverá a atacar.

Grenadier

Grenadier es un enemigo más intenso y más grande. Lanzará granadas que rebotan hacia el Jugador si está lejos, le pegará si lo tiene enfrente y cerca, o usará su escudo temporal en una explosión nociva si el Jugador está cerca pero no enfrente de él.

Solo puedes dañarlo desde atrás hiriendo su centro brillante.

Rango de pelea: Si el jugador se acerca más que el Grenadier, el Grenadier le pegará (si el jugador está enfrente) o usará el escudo.

Rango: Si el jugador está cerca de Grenadier, pero aún no está dentro del rango de pelea, Grenadier le lanzará una granada que rebota. Si el jugador es detectado, pero aún no está dentro del rango, Grenadier se moverá para alcanzarlo.

Configuración común

Todos los enemigos tienen una propiedad Player Scanner (Escáner del jugador) en sus respectivos comportamientos que se utiliza para establecer cómo pueden detectar al Jugador.

Para obtener una explicación de la configuración, consulta la documentación TargetScanner (Escáner de objetivo).

Además, todos tienen un componente Damageable (Frágil) que define cuánta vitalidad tienen y cómo se los puede dañar (por ejemplo, los Grenadiers solo pueden ser dañados por la espalda).

La ubicación de ese componente es:

Chomper y Spitter: En el GameObject raíz, justo al lado de sus secuencias de comando Behavior (Comportamiento).

Grenadier: En un GameObject secundario de Grenadier llamado DamageablePart en Hierarchy.

Dispositivos en la vista de Escena

Algunos de esos ajustes se pueden visualizar en la vista de Escena cuando se selecciona un Enemigo.

El círculo azul representa el ángulo y el radio de detección del Escáner del jugador. El Jugador solo será detectado si camina dentro de ese círculo.

La pequeña esfera de alambre amarilla es la compensación de altura del Escáner del jugador (es decir, donde se encuentran los «ojos» del escáner). El sistema verificará si la línea de visión entre esto y el jugador está libre de obstáculos.

El círculo rojo es el ángulo frágil que se puede atacar. El Jugador debe atacar al enemigo dentro de esta área para causarle daño.

¿Cómo agregar un Chomper?

Vamos a agregar un Chomper a nuestra Escena:

  • Ve a Assets > 3DGameKit > Prefabs > Characters > Enemies > Chomper
  • Arrastra el Prefab Chomper a la Escena
  • Coloca el Chomper en algún lugar cerca de Ellen para que podamos probarlo rápidamente

Podemos ver un área azul muy grande que cubre la Escena. Es el Radio de detección del Chomper, que es el área que él puede ver. Si Ellen camina dentro de esa área, Chomper atacará. Podemos ajustar este parámetro si seleccionamos el en Hierarchy:

  • En el Inspector, ubica el Script Chomper Behavior (Comportamiento de Chomper).
  • En Detection Radius (Radio de detección), cambia al valor a 4. Esto también se puede lograr desplazándose rápidamente por los valores, pasando el mouse por encima de las palabras Detection Radius y luego haciendo clic y arrastrando hacia la izquierda para reducir rápidamente el valor o hacia la derecha para aumentar el valor.

  • Presiona Play y corre hacia Chomper para ingresar a su Radio de Detección

Cuando ingreses su Radio de detección, Chomper detectará a Ellen y comenzará su comportamiento de ataque. Sin embargo, correrá en el lugar y no podrá moverse.

Esto se debe a que no le hemos dicho a la AI de Chomper sobre qué superficie puede caminar. Usamos el sistema de NavMesh de Unity para esto. A la AI de Chomper la maneja el componente NavMesh Agent. Esto le da a Chomper la posibilidad de caminar sobre superficies que nosotros programamos, de evitar obstáculos y a otros Chompers, Spitters y Grenadiers mientras recorre el mundo.

No necesitamos cambiar ninguno de estos ajustes porque Chomper y los demás enemigos ya están configurados para comportarse y andar de una manera específica.

Vamos a configurar el suelo sobre el cual pueden caminar los enemigos agregando una NavMesh Surface (Superficie de malla de navegación)

  • En Hierarchy, selecciona Plane (el suelo)

  • En la parte inferior del Inspector, haz clic en Add Component
  • Busca «NavMesh Surface»
  • Presiona Intro o haz clic en el resultado NavMeshSurface para agregarlo al Plano

  • En el Script NavMesh Surface, cambia Agent Type (Tipo de agente) a Chomper

Esto le indicará a la superficie qué agente puede caminar sobre ella. Ten presente que solo Chomper aparece en esta lista y no hay ningún Spitter ni Grenadier. Esto se debe a que todos los enemigos usan la configuración de Agente de Chomper.

  • Para el menú desplegable Include Layers (Incluir Capas), primero haz clic en Nothing (Ninguno).

  • Ahora en el menú desplegable Include Layers, selecciona Environment (Ambiente) y Vegetation (Vegetación)

Esta es una manera rápida de anular la selección de muchas capas y volver a seleccionar las que deseas.

  • Haz clic en el botón Bake (Integrar)

Esto integrará una NavMesh en tu Escena y hará que tus enemigos puedan caminar sobre la mayoría de las superficies. Podemos ver dónde pueden caminar nuestros enemigos en la vista de Escena, como lo muestra el resaltado en celeste.

Cualquier brecha en la Superficie NavMesh (áreas resaltadas en azul) significa que los enemigos no podrán caminar en esas zonas.

Aquí podemos ver brechas justo antes de nuestros muros. Eso significa que los enemigos no podrán caminar a través de los muros o la puerta que hemos configurado.

Vamos a probar nuestro Chomper presionando Play. Ahora podemos correr hacia Chomper, y Chomper a su vez correrá hacia nosotros y atacará. Si corres y te alejas un poco de Chomper, su agente NavMesh utilizará la Superficie NavMesh para recorrer el mundo y perseguirte.

Si agregas más Chompers u otros enemigos a la Escena, usarán la misma Superficie NavMesh. No es necesario repetir esto para agregar nuevos enemigos.

Si ahora quieres agregar piezas nuevas a tu nivel o cambiar la posición de los objetos en tu Escena, tendrás que volver a integrar la Superficie NavMesh volviendo al Plano y haciendo clic en Bake en el Script Superficie NavMesh.

¿Cómo agregar un Spitter?

  • Agrega un Prefab Spitter en 3DGamekit > Prefabs > Characters > Enemies > Spitter al arrastrarlo a tu Escena.

Si te fijas en el Inspector, verás que Spitter se parece mucho a Chomper.

Spitter es una clase de enemigo de rango que se alejará de Ellen cuando esté demasiado cerca utilizando su propiedad Fleeing Distance (Distancia de huida) para determinar cuándo debería huir antes de intentar atacar. Luego usa el Range Weapon (Arma rango) para dispararle ácido a Ellen.

hConsejo: Si la Distancia de Huida es superior al Área de detección, solo huirá cuando sea detectado y esto puede generar un patrón de huida continua.

Idealmente, harías que empiece más lejos para darle una mejor oportunidad de atacar y ser más potente contra Ellen. Si quieres que Spitter tenga en cuenta el Ambiente, tendrás que cambiar la View Blocker Layer Mask (Máscara de capa bloqueadora de vista) de DoNotDraw a Environment.

En nuestra Escena, hemos agregado los Spitters en la zona superior para darles una ventaja sobre Ellen cuando ella viaja en la Plataforma Móvil y así hacer que resulte más desafiante para el jugador derribarlos.

Prueba la Escena después de agregarlos para ver sus comportamientos y prueba con diferentes distancias de huida y distancias de radio de detección.

¿Cómo agregar un Grenadier?

Agrega un Grenadier en 3DGamekit > Prefabs > Characters > Enemies > Grenadier y arrástralo a la Escena.

Grenadier es un enemigo con autoridad y hay que tener en cuenta más detalles al trabajar con él. Cuando lo seleccionas en la Escena, el radio de daño se configura solo para atrás a fin de forzar al jugador a apuntar a su centro.

El Script Behavior (Comportamiento) es muy similar a la de Chomper y Spitter, pero combina la pelea y el rango con propiedades para sus diferentes funciones: First Weapon (Primer arma), Grenade Launcher (Lanzador de granadas) y Shield (Escudo).

Para ver el componente frágil, amplía Grenadier en Hierarchy y busca DamageablePart.

Esto te mostrará el Script Damageable y el contenido relacionado con la vitalidad, cuánto tiempo es invulnerable y las áreas en las cuales se lo puede atacar.

En el área de eventos del componente Damageable, hay funciones anexadas a Grenadier On Death (Al morir), Display Particles on Hit (Mostrar partículas tras ataque) y Resetting its Vulnerability on Hit (Restablecer su vulnerabilidad tras ataque).

12. ¿Cómo crear una trampa?

Usando los Comandos de juego, rotaremos un objeto al recibir un Comando de juego para soltar un cuadro sobre algunos Spitters.

  • Crea un nuevo GameObject Vacío en Hierarchy en el grupo Gameplay
  • Asígnale el PlatformTrap

Mueve la Ubicación de PlatformTrap a donde quieras que rote la plataforma. Esto se utilizará como punto de giro para rotar las Plataformas.

Transformarlo ahora significa que adjuntamos los otros GameObjects en los próximos pasos, rotándolos en torno a su lugar en oposición a su ubicación actual.

  • Arrastra una PlatformShort de 3DGamekit > Prefabs > Environment > Stonework a Hierarchy y Transforma su posición para que esté cerca del punto de giro PlatformTrap.

  • Sigue los mismos pasos para un Prefab PlatformSupportShort de la misma carpeta, transformándola debajo de la Plataforma.
  • En Hierarchy, selecciona la PlatformShort y el PlatformSupportShort.
  • Inhabilita el parámetro Static (Estático) en el Inspector. Esto permitirá que los GameObjects se muevan cuando el elemento principal rote.

  • Con ambos todavía seleccionados en Hierarchy, arrástralos al GameObject Vacío PlatformTrap, haciendo que se vea así:

Consejo: Debería estar rodeado de una burbuja azul para agregarlo

Selecciona el elemento principal PlatformTrap

  • En el Inspector, Add Components para el Game Command Receiver (Receptor de comandos de juego) y un Simple Rotator (Rotador simple).

Esto permitirá que el grupo principal, PlatformTrap, reciba Comandos de juego y rote los objetos secundarios sin una configuración separada.

Cambiemos algunos de los ajustes en el componente SimpleRotator para que la rotación sea más creíble.

Cambia la siguiente configuración:

  • Interaction Type: Activate
  • Is One Shot: Seleccionado
  • Accel Curve (Curva de aceleración): Linear Increase (Aumento lineal) (haz clic en la casilla y selecciona la segunda línea por defecto)
  • Loop Type: Once
  • Axis Z (Eje Z): 1
  • End Angle (Ángulo final): -60

Si mueves el deslizador en la Posición vista previa, deberías ver la PlatformTrap rotar de un modo similar a una puerta de trampa.

Consejo: Si no funciona según lo esperado o rota de manera extraña diferente a lo previsto, retira la PlatformShort y el PlatformSupportShort del grupo PlatformTrap en Hierarchy, mueve la PlatformTrap a donde necesitas que gire y, luego, agrega la Plataforma y el Apoyo nuevamente al grupo.

De un modo similar al del tutorial de la MovingPlatform, usemos un sensor de presión para activar la rotación en la PlatformTrap.

  • Arrastra un PressurePad desde Prefabs > Interactables a algún lugar de la Escena cerca de la PlatformTrap

  • Con el PressurePad seleccionadp, arrastra el grupo PlatformTrap de Hierarchy al Objeto interactivo Send On Trigger Enter para el Receptor de Comandos de juego.
  • Cambia el Interaction Type a Activate

Debería aparecer un enlace visual con una dirección de Envío (Send) y Recepción (Receive)

  • Prueba la Escena en este punto. El sensor activará la rotación.

  • Para dañar a los Spitters, agrega una DestructibleBox desde 3DGamekit > Prefabs > Interactables arrastrando el Prefab a la Escena y transformándolo en la posición, apoyado sobre la PlatformTrap.
  • En Hierarchy, amplía el grupo DestructibleBox y selecciona el GameObject secundario DestructibleBox.

  • En el Inspector, agrega un componente para Contact Damager (Causante de daño por contacto) y configura las Damaged Layers (Capas dañadas) como Enemy (Enemigo).

El valor Amount (Cantidad) debe coincidir con el de Max Hit Points (Puntos de ataque máximos) que se encuentran en el componente Damageable de los enemigos.

  • Prueba la Escena y activa la trampa para ver cómo el cuadro golpea a los enemigos abajo.

13. ¿Cómo agregar un puesto de control de regeneración?

Eos puestos de control son un elemento común de la mayoría de los juegos modernos y el Kit de juego proporciona un Prefab que se puede encontrar en 3D Gamekit > Prefabs > Utilities > Checkpoint.

Cuando Ellen muera, se regenerará en el último puesto de control que tocó. Para garantizar que el jugador reciba una actualización con respecto a dónde se va a regenerar, deberías usar un objeto o un indicio visual en el juego para ilustrar que el jugador tocó el puesto de control.

En este ejemplo, agregaremos otro Cristal a la Escena, esta vez activado por un evento de ingreso al Puesto de control, enviándole un Comando de juego.

  • Para agregar un puesto de control, simplemente puedes arrastrarlo y soltarlo en la Escena y colocarlo a fin de garantizar que el jugador pueda entrar al colisionador. Modifica el tamaño con el objetivo de asegurarte de que no sea muy grande para el área.

  • Establece la configuración de la Capa en Checkpoint (Puesto de control) en el Inspector.

  • Agrega un Cristal desde 3D Gamekit > Prefabs > Interactables
  • Colócalo cerca del área del puesto de control

  • A fin de que resulte más obvio para qué se usa este Cristal en Hierarchy, cámbiale el nombre en el Inspector a CheckpointCrystal
  • Para vincular los dos objetos selecciona el Checkpoint
  • Haz clic en Add Component
  • Escribe Send On Trigger Enter
  • Confirma el agregado presionando Intro o haciendo clic en el resultado

  • Cambia Interaction Type como Activate
  • Habilita One Shot
  • Cambia Layers a Player. Esto permitirá que Ellen se estrelle contra el área
  • Cambia Interactive Object a GateCheckpoint por medio de la selección de GameObject

  • Para verificar la conexión entre ellos, selecciona CheckpointCrystal y en el Inspector verifica que el Receptor de Comandos de juego tenga anexado un Sender.

Juega en esta etapa y entra al Checkpoint para ver el Cristal activarse ahora tras el ingreso. Después de la activación, la muerte de Ellen dará lugar a que se regenere en el centro del volumen del Checkpoint.

14. Recolección de armas

Por defecto, en el Kit de juego en 3D, Ellen tiene su arma activada y puede atacar a los monstruos. Para este ejemplo, nos fijaremos en anular su capacidad de atacar y activarla nuevamente tomándola del pedestal de un modo similar a cómo funcionan los niveles de demostración del juego.

  • Para anular la capacidad de ataque de Ellen, selecciona Ellen y, en el Inspector, localiza el componente Player Controller (Controlador de jugador).
  • Anula la configuración Can Attack (Puedes atacar)

Busca el Prefab Weapon Pedestal (Pedestal de arma) en 3DGamekit > Prefabs > Interactables y arrástralo a la Escena para agregarlo.

  • En la vista Hierarchy, expande el grupo WeaponPedestal para mostrar los otros GameObjects en el Prefab.

Los tres GameObjects son:

  • StaffTakeTrigger
  • WeaponPedestal
  • Staff
  • Selecciona el GameObject StaffTakeTrigger en la vista Hierarchy.

En el Inspector puedes ver que tiene un componente Sphere Collider y un Script Interact On Trigger con valores predefinidos en las propiedades de la secuencia de comandos. Esto es para ahorrar tiempo de configuración en el pedestal y permitir que uses la lógica para usar sin necesidad de código.

Para permitir que el Pedestal actualice la capacidad de Ellen de atacar, tenemos que adjuntar el GameObject Ellen de Hierarchy.

  • Arrastra a Ellen desde la vista Hierarchy hasta el campo de propiedades superior. Cuando acepte el GameObject, selecciona una función del menú desplegable titulado PlayerController.SetCanAttack. Esto tendrá como valor por defecto True (habilitado).

  • Juega con la Escena y Ellen no debería poder atacar cuando apareces. Camina hasta el pedestal y el colisionador debería activar la capacidad de atacar de Ellen y hacer que la vara desaparezca.

15. ¿Cómo restaurar la vitalidad?

En este tutorial, permitiremos que Ellen restaure su vitalidad después del ataque de un enemigo. Esto utilizará el componente Damageable de Ellen y Restaurar ResetDamage() para curarla completamente.

Agrega un enemigo Spitter

Para garantizar que Ellen se dañe y para permitir que hagas una prueba rápidamente de los sistemas de Vitalidad (Health), colocaremos un enemigo Spitter en la Escena cerca del punto de inicio de Ellen.

Ve a la vista Hierarchy en la Escena abierta y ubica Spitter en las carpetas 3DGamekit > Prefabs > Characters > Enemies > Spitter

Arrastra el Spitter a la vista de Escena y ajusta su posición y rotación según tus necesidades. Asegúrate de que el círculo de detección azul tenga a Ellen adentro para que el Spitter pueda ver a Ellen tan pronto como entres al modo Juego. Esto te ahorrará tiempo al correr hacia un enemigo que podría estar más lejos.

Para ajustar el Detection Radius, con el Spitter seleccionado ubica el componente Spitter Behaviour Script en la vista Inspector.

Cambia el campo Detection Radius. En este ejemplo se usa 8, pero ajusta el tamaño para adecuarlo a tu configuración en particular si es necesario.

Agrega un contenedor de vitalidad

En la vista Hierarchy, ubica el prefab HealthCrate ingresando Health Crate en el cuadro de búsqueda.

o encuéntralo en las carpetas 3DGamekit > Prefabs > Interactables > HealthCrate

Arrastra el Prefab HealthCrate de Hierarchy a la vista de Escena y colócalo en un lugar adecuado. Rótalo y desplázalo a gusto.

Con el HealthCrate en la vista de Escena seleccionado, en la vista Inspector, observa el componente Interact On Trigger (Script).

Este componente de secuencia de comandos permite que el HealthCrate invoque eventos en una lista de GameObjects para permitir la interacción entre ellos y el HealthCrate. En este caso, ocurrirá cuando el jugador mueva a Ellen hacia su área de Colisionador.

Actualmente no existe una función configurada o un GameObject para restaurar la vitalidad de Ellen, así que si intentamos estrellarla contra el HealthCrate en el modo Juego ahora, ¡nada sucederá!

Prueba, entra al modo Juego, haz que el Spitter dañe a Ellen y trata de restaurar su vitalidad estrellándola contra el HealthCrate.

Interact On Trigger

Para garantizar que Ellen esté completamente sanada, es necesario agregar el GameObject en la Escena a Interact On Trigger.

Nota: Si lo prefieres, puedes usar el método de arrastrar y soltar en los próximos pasos. Sin embargo, veremos en cambio cómo usar el método del círculo de selección.

Si decides hacer esto, asegúrate de estar usando a Ellen en la Escena actual en la vista Hierarchy, no el Prefab de la vista Project.

Selecciona el HealthCrate si anulaste la selección durante el modo Juego.

En el campo Object en blanco en On Enter(), presiona el botón Circle Select (Círculo de selección)

Selecciona la Pestaña Escena en la barra superior y se seleccionará Assets por defecto.

Busca a Ellen (si le asignaste otro nombre al personaje jugador, debes buscar ese nombre)

Selecciona «Ellen» (el resto está relacionado con piezas específicas).

Ahora que Ellen ha sido seleccionada como GameObject para interactuar con OnEnter(), es hora de seleccionar la función para restaurar la vitalidad.

En el campo del menú desplegable del Interact On Trigger (Script) junto a Ellen, actualmente dice No Function (Sin función)

En el menú desplegable, selecciona Damageable > ResetDamage()

Este paso ahora ha vinculado el HealthCrate y a Ellen dentro de la Escena para permitir que se restaure la vitalidad, ya que llamará a ResetDamage() cuando Ellen ingrese al Colisionador.

Juega con tu nivel ahora para probar el daño del Spitter y la colisión contra el HealthCrate ahora restaurará completamente su vitalidad.

16. Teletransportación en una Escena

Teletransportación dentro de una Escena

Para teletransportar al jugador dentro de una Escena, tenemos que configurar una transición. Para ello, vamos a crear dos Prefabs:

  • TransitionStart
  • TransitionEnd

Primero tenemos que configurar el punto de partida de la transición:

  • En la ventana Project, ve a Prefabs > SceneControl
  • Busca el Prefab TransitionStart
  • Arrastra TransitionStart a la vista de Escena
  • Colócalo en una posición donde el jugador tocará el Colisionador (el cuadro verde) al caminar. En el siguiente ejemplo, lo hemos colocado al otro lado de la puerta:

Para configurar el destino:

  • Arrastra otro Prefab TransitionStart de la carpeta SceneControl a la vista de Escena

En el Inspector:

  • Cámbiale el nombre a TransitionEnd

Ahora vincularemos los dos:

En Hierarchy, selecciona el GameObject TransitionStart

En el Inspector, busca el Componente TransitionPoint

Arrastra el GameObject Ellen de Hierarchy al campo Transitioning Game Object del componente Transition Point

Establece Transition Type como Same Scene (Misma Escena)

Esto garantiza que Ellen sea el único objeto teletransportado y que se la teletransporte dentro de la misma Escena.

Ahora configuremos el destino:

  • Arrastra el GameObject TransitionEnd al espacio DestinationTransform del TransitionPoint.
  • Establece Transition When (Transición cuando) como On Trigger Enter

On Trigger Enter significa que la Transición solo se activa cuando el jugador entra al Colisionador y no al presionar una tecla. Si prefieres que se teletransporte solo cuando el jugador presione la tecla de interacción (E), establece Transition When como Interact Pressed (Tecla de interacción presionada).

Teletransportación a otra Escena

Para que el jugador haga una transición a una nueva Escena, necesitamos dos Prefabs:

TransitionStart es el mismo Prefab que usamos en la sección anterior: «envía» al jugador al destino. Contiene un componente Transition Start que define todas las propiedades en cuanto a dónde se inicia la teletransportación y a dónde debe llevar al jugador. Coloca el Prefab donde quieras que comience la transición.

TransitionDestination es un Prefab que «recibe» al jugador. Contiene un componente Transition Destination. Coloca este Prefab en una Escena diferente, donde quieras que termine la transición.

¿Cómo configurar TransitionDestination?

Primero, configuremos el destino para que tengamos toda la información que necesitaremos más tarde cuando configuremos el punto de inicio. Para agregar una transición a una Escena, abre esa Escena, ve a la ventana Project y a Prefabs > SceneControl > TransitionDestination. Colócala en la Escena en el lugar en el que quieres que vaya el teletransportador.

El Prefab TransitionDestinatonn contiene un componente Scene Transition Destination:

  • Primero, establece la Destination Tag (Etiqueta de destino) con una letra.

Realmente no importa qué letra, siempre que sea el único componente Scene Transition Destination que tenga esa letra en esta Escena.

A continuación, dile qué GameObject debería esperar recibir. Arrastra el GameObject jugador (Ellen) de la ventana Hierarchy al espacio Transitioning Game Object.

Finalmente, asegúrate de que la Escena de destino esté en Build Settings (Crear ajustes) en tu Editor.

  • Para hacer esto, ve a File > Build Settings y haz clic en Add Open Scenes.

¿Cómo configurar TransitionStart?

Estos ajustes son en su mayoría los mismos que en la sección anterior, con algunos cambios:

  • Cambia Transition Type a Different Zone
  • Ajusta en New Scene Name la Escena a la cual quieres enviar el objeto.
  • Ajusta en Transition Destination Tag la letra de la Destination Tag que estableciste en el componente Transition Destination.

  • Presiona Jugar y camina hacia donde se hace la transición. ¡Deberías viajar directamente al inicio de la Zona1!

Complete this tutorial