Programando un juego con Unity: una guía para principiantes

Programando un juego con Unity: una guía para principiantes
Esta guía está disponible para descargar como PDF gratuito. Descarga este archivo ahora . Siéntase libre de copiar y compartir esto con sus amigos y familiares.

Una característica sorprendente de la economía de Internet es el auge de los videojuegos independientes. Una vez que fue el dominio exclusivo de los estudios triple A de miles de hombres y millones de dólares, se han desarrollado una serie de conjuntos de herramientas que llevan los recursos de desarrollo de juegos modernos a las manos de individuos o pequeñas colecciones ad-hoc de programadores y diseñadores. Ya hemos hablado de los mejores juegos independientes, así que asegúrate de consultarlos en busca de inspiración sobre lo que se puede lograr con herramientas como Unity.





Estos equipos de desarrollo de juegos independientes han demostrado una agilidad y tolerancia al riesgo que, en muchos casos, les permite impulsar la innovación del juego más rápido que sus contrapartes de gran presupuesto. En los últimos años se han estrenado varios títulos independientes sorprendentemente exitosos, entre ellos Minecraft , Limbo , y chico súper carne , e incluso si no tienes las habilidades para hacer juegos como este, puedes crear un juego usando Buildbox.





En el panorama en rápida evolución del desarrollo de juegos independientes, Unidad ha surgido como una especie de estándar de facto: su bajo costo, facilidad de uso y amplio conjunto de características lo hacen ideal para el desarrollo rápido de juegos. La unidad es tan flexible que incluso puedes crea tus propios controles de juego personalizados ¡con un poco de conocimientos de bricolaje!





Incluso grandes estudios como CCP (Desarrolladores de Eve en línea ) utilícelo para crear rápidamente prototipos de conceptos de juegos. Unity proporciona un 'motor de juego en una caja': un motor de física y renderizado con ganchos para varios lenguajes de secuencias de comandos, adaptable a prácticamente cualquier género de videojuego.

Si bien Unity proporciona un editor visual para manipular el entorno del juego, Unity no es una herramienta de creación de juegos de 'programación cero'. Requiere que programes para producir resultados, pero también te brinda una herramienta mucho más flexible y poderosa que cualquier programa de 'creador de juegos'.



Unity no hará el trabajo por usted, pero reduce sustancialmente la barrera de entrada. Comenzando completamente desde cero con C ++ y OpenGL, puede llevar días llegar al punto en que realmente hay algo renderizado en pantalla. Con Unity, tarda unos diez segundos. Unity pone los elementos básicos de la creación de juegos en manos de programadores novatos de una manera rápida e intuitiva.

Hoy te guiaré a través de todo lo que necesitas saber para crear un juego en Unity, que se divide en diez capítulos principales:





§1 – Versiones de Unity

§2 – Instalación de Unity





§3 – Una breve introducción al paradigma orientado a objetos

§4 – Conceptos básicos de Unity

§5 – Ejemplo: elementos básicos de un juego

§6 – Scripting en Unity

§7 – Ejemplo: Scripting Pong

§8 – Explorando la documentación / Aprendiendo más

§9 – Creación de su juego / compilación en una aplicación independiente

§10-Notas de cierre

1. Versiones de Unity

Unity viene en dos versiones básicas: la versión pro y la versión gratuita. Hay un número de diferencias , pero, en términos generales, la versión pro admite una serie de mejoras visuales (como sombras suaves en tiempo real y posprocesamiento) y una gran cantidad de funciones relativamente menores que son extremadamente útiles para juegos más complejos.

Dicho esto, para la mayoría de los juegos relativamente simples que quizás desee crear, la versión gratuita de Unity es perfectamente adecuada. Desglosaremos las diferencias clave a continuación con más detalle para los interesados.

1.1 Precios

La versión gratuita de Unity es, por supuesto, gratuita. Sin embargo, existen algunas limitaciones: la versión gratuita de Unity no se puede licenciar a ninguna empresa con un ingreso anual de más de 0,000 . Si bien estas organizaciones están más allá del alcance de esta guía, si sospecha que podría convertirse en una organización de este tipo, probablemente sea prudente optar por la versión Pro.

La versión Pro de Unity es un mes, o 00 para obtener una licencia permanente y no tiene límites sobre lo que puede hacer con los juegos creados con ella. También hay una prueba gratuita de 30 días disponible, que usaremos para esta guía, con el fin de brindarle una descripción general lo más completa posible de las funciones disponibles. Una licencia de estudiante de un año también está disponible a través de Estudio por 9 .

1.2 Características

Hay muchas características ausentes en la versión gratuita de Unity. Sin embargo, las diferencias más importantes son las siguientes: la versión gratuita de Unity carece de una serie de opciones de renderizado que permiten juegos más atractivos y de ejecución más rápida (compatibilidad con LOD, procesamiento posterior del espacio de pantalla, sombreadores avanzados, software en tiempo real sombras y renderizado diferido). También le falta el sistema de animación mecánica y algunas herramientas de inteligencia artificial.

En general, para proyectos complejos a gran escala o proyectos en los que el rendimiento gráfico es importante, la versión pro vale la pena. Utilizo la versión pro, porque desarrollo juegos de realidad virtual para Oculus Rift, y el soporte de posprocesamiento del espacio de la pantalla es necesario para interactuar correctamente con los auriculares.

2. Instalación de Unity

Unity es sencillo de instalar. Puede descargar el ejecutable desde unity3d.com/get-unity/download .

Una vez descargado, ejecútelo y luego siga las instrucciones del instalador. Cuando finalice la instalación, aparecerá una ventana titulada 'active su licencia de Unity'. Marque la casilla marcada 'activar una prueba gratuita de 30 días de Unity Pro' y luego 'Aceptar'.

¡Felicidades! Ahora tiene una prueba de 30 días de Unity Pro. Cuando expire la versión de prueba, si no desea comprar la versión pro, puede cambiar a la versión gratuita y conservar su contenido existente.

no puedo hacer clic en la barra de tareas de Windows 10

3. Una breve introducción al paradigma orientado a objetos

Antes de comenzar con Unity, es importante que repasemos un poco los conceptos básicos. Unity es compatible con ambos C# y JavaScript por programación de juegos ; trabajaremos con C # para este tutorial.

En primer lugar, si nunca ha programado antes, deje este tutorial a un lado y pase unos días trabajando en Microsoft C# Language Primer hasta que se sienta cómodo usando el lenguaje para tareas simples.

Si desea algo un poco diferente a C # (pero no necesariamente un lenguaje que pueda usar en Unity), eche un vistazo a nuestra guía de los seis lenguajes de programación más fáciles para principiantes.

Si ha programado antes en un lenguaje imperativo u orientado a objetos como C o Java, lea el manual y familiarícese con las diferencias entre C # y otros lenguajes que ha utilizado en el pasado. De cualquier manera, no continúe con el tutorial hasta que se sienta cómodo resolviendo problemas simples con C # (por ejemplo, si le pidiera que escribiera un programa que imprima los primeros cien números primos, debería poder escribir ese programa sin consultando a Google).

El concepto más importante a entender aquí es el paradigma orientado a objetos (abreviado como ABIERTO ). En los lenguajes orientados a objetos, los programas se dividen en unidades funcionales llamadas Objetos . Cada objeto tiene sus propias variables y funciones privadas. Las funciones específicas de objeto se denominan métodos .

La idea aquí es la modularidad: al tener cada objeto aislado y obligar a otros objetos a interactuar con él a través de sus métodos, puede reducir la cantidad de posibles interacciones no intencionales y, por extensión, errores. También puede crear objetos que puede reutilizar más tarde sin modificaciones. En Unity, estarás construyendo estos objetos y uniéndolos a entidades de juego (cuyo comportamiento gobernarán).

Los objetos se instancian desde clases : una clase es solo un archivo que presenta la definición de su objeto. Entonces, si quieres un mook objeto que maneja la IA para un enemigo en tu juego, escribirías una clase 'Mook' y luego adjuntarías ese archivo a cada entidad enemiga. Cuando ejecutes tu juego, cada enemigo estará equipado con una copia del objeto 'Mook'.

Adjuntar una nueva secuencia de comandos a un objeto se ve así:

Primero, seleccionar el objeto y ve al Inspector . Clickea en el Agregar componente botón.

Ir a nuevo guion , ingrese el nombre que desee y haga clic en crear y agregar .

¡Ahora tiene un nuevo script que puede editar haciendo doble clic en él!

Un archivo de clase se parece a esto:

|_+_|

Analicemos esto:

  • Usando UnityEngine: Esta línea le dice a C # que queremos usar las bibliotecas de Unity, que nos permiten conectarnos al motor de juego de Unity.
  • Clase pública Mook: MonoBehaviour: Esta línea declara la clase y su nombre - mook .
  • Salud del flotador privado: Esto declara una variable de clase privada (que solo se puede cambiar desde dentro de la clase). A la variable se le da un valor en Comienzo .
  • Inicio nulo (): Esto declara un método llamado Comienzo . Start es un método especial que se ejecuta solo una vez, cuando el juego se inicia inicialmente.
  • Actualización nula (): La actualización es otro método especial que se ejecuta en todos los fotogramas. La mayor parte de la lógica de tu juego irá aquí.
  • // si te encuentras con el jugador en la carretera, mátalo: Esta línea es un comentario (cualquier línea que comience con una barra doble es ignorada por C #). Los comentarios se utilizan para recordar lo que hacen determinados fragmentos de código. En este caso, este comentario se utiliza para representar un bloque de código más complicado que realmente hace lo que describe el comentario.

Junto con Comienzo y Actualizar , puede crear instancias de sus propios métodos con casi cualquier nombre. Sin embargo, los métodos que cree no se ejecutarán a menos que se llamen. Declaremos un método para una clase hipotética llamada addTwoNumbers que suma dos números juntos:

|_+_|

Esto declara un método público (accesible a otros objetos) que devuelve un flotante, llamado addTwoNumbers , que toma dos flotantes como entrada (llamados a y b ). Luego devuelve la suma de los dos valores como salida.

Llamar a este método desde dentro de la misma clase (por ejemplo, desde dentro Actualizar ) Se ve como esto:

|_+_|

Llamar al método desde otra clase es similar:

|_+_|

Nuevamente, esto solo crea una instancia de nuestra clase, accede al método apropiado y lo alimenta con los números que queremos agregar, luego almacena el resultado en resultado . Simple.

Si su secuencia de comandos está adjunta a un objeto que tiene propiedades especiales (como un emisor de partículas) al que no se puede acceder bajo el conjunto normal de parámetros de GameObject, puede optar por tratarlo como un tipo diferente de entidad de juego usando el GetComponent método.

La sintaxis para eso se ve así:

|_+_|

Si algo de esto no le resulta familiar, regrese y revise el manual de C #. Le ahorrará mucha frustración a medida que avancemos.

4. Conceptos básicos de Unity

En esta sección, trabajaremos en la mecánica básica del motor de Unity. El flujo de trabajo en Unity es algo como esto:

  1. Crear una entidad para desempeñar un papel en el juego (en blanco GameObjects se puede utilizar para tareas lógicas abstractas).
  2. Escriba o busque un archivo de clase y agréguelo a la entidad como un script (usando el Agregar componente botón en el inspector vista.
  3. Correr > prueba > depurar > repetir hasta que funcione y pase al siguiente elemento del juego.

Unity viene con una serie de pestañas de vista básicas que se pueden distribuir de varias formas según el gusto del usuario. Los cinco grandes son:

  1. Juego: muestra una instancia en ejecución del juego con la que puede interactuar y probar.
  2. Escena: proporciona una versión estática y editable del mundo de juegos .
  3. Inspector: te permite modificar entidades individuales en el mundo del juego seleccionándolas en el editor pestaña.
  4. Proyecto: le permite navegar a través de los archivos del proyecto y arrastrar modelos, materiales y otros recursos al editor pestaña para colocarlos en el mundo del juego.
  5. Jerarquía: esta pestaña muestra todos los objetos del mundo, lo que le permite encontrar objetos distantes en la escena y entidades principales entre sí haciendo clic y arrastrando.

Consulte el diagrama a continuación para ver la ubicación de todas estas cosas:

4.1 Entidades de unidad

4.1.1 Mallas

Las mallas son el camino Geometría 3D está representado en Unity. Puede utilizar la función integrada de Unity primitivo objetos (cubos, esferas, cilindros, etc.), o importe sus propios modelos 3D desde un paquete de modelado como Licuadora o Maya . Unity admite una variedad de formatos 3D, incluidos .fbx , y .3ds .

Las herramientas básicas para manipular mallas son los botones de escala, rotación y traducción en la esquina superior izquierda de la interfaz. Estos botones agregan íconos de control a los modelos en la vista del editor, que luego se pueden usar para manipularlos en el espacio. Para alterar la textura o las propiedades físicas de un objeto, selecciónelo y use el inspector vista para analizar el material y cuerpo rígido elementos.

4.1.2 GUI Elementos

Los sprites y el texto de la GUI tradicional se pueden mostrar usando el GUI Texto y el Textura GUI GameObjects en el editor. Sin embargo, una forma más sólida y realista de manejar los elementos de la interfaz de usuario es utilizar el Texto en 3D y Patio GameObjects (con texturas transparentes y un sombreador transparente apagado) para colocar elementos de HUD en el mundo del juego como entidades.

En el jerarquía vista, estos elementos del juego se pueden arrastrar a la cámara principal para convertirlos en niños, asegurándose de que se muevan y roten con la cámara.

Los elementos de la GUI (texto y texturas) pueden tener su tamaño y escala ajustados usando los campos relevantes en la pestaña del inspector.

4.1.3 Materiales

Los materiales son combinaciones de texturas y sombreadores, y se pueden arrastrar directamente a los objetos del juego desde la pestaña del proyecto. Un gran número de sombreadores vienen con Unity Pro, y puede ajustar la textura adjunta a ellos usando la pestaña del inspector para un objeto al que se aplican.

Para importar una textura, conviértala en un .jpg , .png , o .bmp y arrástrelo al activos carpeta en el directorio del proyecto de Unity (que aparece en Mis documentos por defecto). Después de unos segundos, aparecerá una barra de carga en el editor. Cuando termine, podrá encontrar la imagen como una textura debajo del proyecto pestaña.

4.1.5 Luces

Las luces son GameObjects que proyectan resplandor sobre el mundo. Si no hay luces en su escena, todos los polígonos se dibujan con el mismo nivel de brillo, lo que le da al mundo un aspecto plano y descolorido.

Las luces se pueden colocar, girar y tener varias características internas que puede personalizar. los intensidad El control deslizante controla el brillo de la luz y el distancia controla la rapidez con la que se desvanece.

Las pautas en el vista de escena mostrarle el alcance máximo de la iluminación. Juega con ambas configuraciones para lograr el efecto deseado. También puede ajustar el color de la luz, el patrón ( Galleta se muestra en la superficie a la que apunta la luz y qué tipo de destello aparece en la pantalla cuando se mira directamente a la luz. La cookie se puede utilizar para simular patrones de luz más realistas, crear sombras falsas dramáticas y simular proyectores.

Los tres tipos principales de luz son lugar , punto , y direccional .

Focos de luz tener una ubicación en el espacio 3D y proyectar la luz solo en una dirección en un cono de ángulo variable. Estos son buenos para linternas, reflectores y, en general, le brindan un control más preciso de la iluminación. Los focos pueden proyectar sombras.

Luces puntuales tener una ubicación en el espacio 3D y proyectar la luz de manera uniforme en todas las direcciones. Las luces puntuales no proyectan sombras.

Luces direccionales , finalmente, se utilizan para simular la luz solar: proyectan la luz en una dirección como si vinieran de una lejanía infinita. Las luces direccionales afectan a todos los objetos de la escena y pueden producir sombras.

4.1.6 Sistemas de partículas

A Sístema de partículas es un GameObject que genera y controla cientos o miles de partículas simultáneamente. Las partículas son objetos 2D pequeños y optimizados que se muestran en el espacio 3D. Los sistemas de partículas utilizan una representación y una física simplificadas, pero pueden mostrar miles de entidades en tiempo real sin tartamudear, lo que las hace ideales para humo, fuego, lluvia, chispas, efectos mágicos y más.

Hay muchos parámetros que puede modificar para lograr estos efectos, y puede acceder a ellos generando un sistema de partículas bajo el editor de componentes > seleccionando el sistema de partículas > abriendo la pestaña del inspector . Puede cambiar el tamaño, la velocidad, la dirección, la rotación, el color y la textura de cada partícula, y configurar la mayoría de esos parámetros para que cambien también con el tiempo.

Bajo la colisión atributo, si lo habilita y establece el espacio de simulación en mundo Obtendrá partículas que colisionarán con objetos en el mundo, que se pueden usar para una serie de efectos de partículas realistas, incluida la lluvia, el agua en movimiento y las chispas.

5. Ejemplo: elementos básicos de un juego

Para este tutorial, vamos a hacer un juego simple de Pong - algo que hemos cubierto varias veces en bricolaje antes:

  • Arduino Classic Pong
  • Arduino OLED Pong

En esta sección, repasaremos la organización de los elementos principales; el tutorial de secuencias de comandos vendrá más adelante.

Primero, analicemos el juego de Pong en sus componentes básicos. Primero, necesitamos dos paletas y una pelota. La bola vuela fuera de la pantalla, por lo que querremos un mecanismo para restablecerla. También queremos que el texto muestre la puntuación actual y, por el simple hecho de mostrarte todos los elementos centrales de Unity, queremos un efecto de partículas elegante cuando golpees la pelota. Todo el juego deberá estar dramáticamente iluminado.

Eso se descompone en un objeto bola (una esfera), una desove , dos puntales de paleta con emisores de partículas adjunto, un Entidad de texto 3D y un destacar . Para este tutorial, usaremos el material físico predeterminado bote , con rebote combinar ajustado a multiplicar . Así es como se ve la configuración, en diez capturas de pantalla:

Primero, crea un apoyo de cubo para el remo.

Escale apropiadamente, duplicarlo y poner un esfera entre las paletas de la pelota.

Luego, crea un Objeto 3DText y escala y posición correctamente, cambiando el tamaño de fuente atributo para obtener una imagen menos pixelada.

A continuación, cree dos sistemas de partículas , elija las características que desee y adjúntelas a las paletas.

A continuación, querrás posicionar y rotar la cámara para que encuadre la escena correctamente. Mientras la cámara está seleccionada, puede ver una pequeña vista previa de la vista de la cámara en la esquina inferior derecha.

Antes de terminar, necesitamos crear dos cubos adicionales para que sean parachoques, para evitar que la pelota rebote fuera del área de juego. Podemos hacerlos invisibles desmarcando la renderizador de malla en el pestaña inspector .

Si presionas jugar, ahora puedes ver los elementos básicos de nuestro juego. No harán nada todavía, ¡pero llegaremos a eso!

Ahora que tenemos esa configuración, vamos a hablar sobre lo que implica la secuencia de comandos de estos elementos para hacer un juego.

6. Scripting en Unity

Una vez que tenga un script adjunto a un objeto, puede revisarlo haciendo doble clic en él en el inspector . Esto abre MonoDevelop , el entorno de desarrollo predeterminado para Unity. En esencia, Monodevelop es un editor de texto con características optimizadas específicamente para la programación.

Las palabras clave y los comentarios se destacan en azul y verde , y los valores numéricos y las cadenas aparecen en red . Si has usado Eclipse u otros IDE, MonoDevelop es muy similar. Usted puede construir sus scripts desde dentro del editor, para verificar errores de sintaxis, así:

En general, para que su secuencia de comandos interactúe con Unity, deberá hacer referencia a los elementos que posee el objeto que contiene la secuencia de comandos (puede ver una lista de estos elementos debajo de inspector pestaña cuando se selecciona el objeto correspondiente). A continuación, puede llamar a métodos o establecer variables para cada uno de estos elementos para realizar los cambios que desee.

Si desea que un script en un objeto afecte las propiedades de un objeto diferente, puede crear un GameObject variable en su secuencia de comandos, y utilice la inspector para asignarlo a otro objeto de la escena.

Una lista de los elementos que puede tener un objeto es la siguiente (tomada de la vista del inspector de una de nuestras paletas en el ejemplo anterior):

  1. Transformar
  2. Cubo (filtro de malla)
  3. Colisionador de cajas
  4. Renderizador de malla

Cada uno de estos aspectos del objeto se puede influir desde dentro de un guión. A continuación, veremos exactamente cómo.

6.1 Transformar

Las funciones de transformación para un GameObject en Unity controlan los parámetros físicos de ese objeto: su escala , su posición , y es orientación . Puede acceder a ellos desde un script como este:

|_+_|

En los ejemplos anteriores, las variables nombradas son de los tipos especificados en los nombres. Aquí hay algunos detalles clave: la posición y la escala se almacenan, como era de esperar, como Vector3s . Puede acceder al X , Y , y CON componentes de cada uno (por ejemplo, transform.position.y le da la distancia de un objeto por encima del plano cero).

Sin embargo, para evitar bloqueo de cardán , las rotaciones se manejan como Cuaterniones (vectores de cuatro componentes). Debido a que la manipulación manual de cuaterniones no es intuitiva, puede manipular rotaciones usando ángulos eulerianos usando el Quaternion.Euler método así:

|_+_|

Si desea mover objetos sin problemas de un lugar a otro, encontrará la Slerp método para cuaterniones y vector3s útil. Slerp toma tres argumentos: el estado actual, el estado final y la velocidad del cambio, e interpola suavemente entre ellos a la velocidad dada. La sintaxis se ve así:

|_+_|

6.2 Renderizador

Las funciones de renderizado en Unity le permiten controlar la forma en que las superficies de los accesorios se renderizan en pantalla. Puede reasignar la textura, cambiar el color y cambiar el sombreado y la visibilidad del objeto. La sintaxis se ve así:

|_+_|

La mayoría de estos tienen funciones bastante claras. El primer ejemplo hace que el objeto en cuestión sea invisible: un truco útil en varias situaciones. El segundo ejemplo asigna un nuevo Color RGB (es decir, verde) al objeto en cuestión. El tercero asigna la textura difusa principal a una nueva variable Textura. El último ejemplo cambia el sombreador del material del objeto a una variable de sombreado recién definida.

6.3 Física

Unity viene con un motor de física integrado, algo que usan todos los juegos de física. Esto le permite asignar las propiedades físicas de los objetos y dejar que los detalles de su simulación sean manejados por usted. En general, en lugar de intentar implementar su propia física usando un libro de texto y el sistema de transformación, es más simple y más robusto usar el motor de física de Unity en la mayor medida posible.

Todos los accesorios de física requieren colisionadores . Sin embargo, la simulación real en sí es manejada por un cuerpo rígido , que se puede agregar en el inspector vista. Los cuerpos rígidos pueden ser cinemático o no cinemático .

Los accesorios de física cinemática chocan con (y afectan) los accesorios de física no cinemática a su alrededor, pero no se ven afectados por la colisión en sí mismos. Los apoyos cinemáticos estáticos son los proverbiales objetos inamovibles, y los objetos cinemáticos en movimiento son la proverbial fuerza imparable (para el registro, cuando chocan, simplemente se atraviesan entre sí).

Más allá de eso, puede ajustar la resistencia angular del objeto (cuánta energía se necesita para girarlo), cambiar su masa, dictar si se ve afectado o no por la gravedad y aplicarle fuerzas.

Ejemplos:

|_+_|

Todos estos se explican por sí mismos. Lo único a tener en cuenta aquí es el uso de transform.forward . Todos los Vector3 tienen tres componentes ( .hacia adelante , .hasta , y .Derecha ) asociados a ellos, a los que se puede acceder y rotan con ellos ( hacia adelante es la dirección de la flecha azul en el editor). los transform.forward La palabra clave es simplemente el vector de avance para el objeto actual con magnitud 1. Se puede multiplicar por un flotador para crear más fuerza sobre el objeto. También puede hacer referencia transform.up y transform.right y negarlos para obtener sus reveses.

6.4 Colisión

A menudo, al crear un juego, le gustaría que una colisión provocara algún cambio de estado en su código, más allá de la simple simulación física. Para esto, necesitará un método de detección de colisiones .

Se necesita una cierta cantidad de trabajo de preparación para detectar colisiones en Unity. Primero, al menos uno de los objetos en la colisión necesita un cuerpo rígido no cinemático adjunto a. Ambos objetos deben tener colisionadores correctos, configurados para que no sean disparadores. La velocidad total de ambos objetos debe ser lo suficientemente baja como para que realmente choquen, en lugar de simplemente saltarse entre sí.

Si se ha ocupado de todo eso, puede verificar la colisión colocando un método especial de detección de colisión en un script adjunto al objeto con el que desea verificar la colisión. El método se verá así:

|_+_|

Este método se ejecutará automáticamente durante el primer fotograma en el que otro objeto toque su objeto. La entidad de colisión otro es una referencia al objeto que golpeaste. Puede, por ejemplo, hacer referencia a su objeto de juego , cuerpo rígido , y transformar características para manipularlo de diversas formas. Tiempo OnCollisionEnter es probablemente la función más común que usará, también puede usar OnCollisionExit y OnCollisionStay (con sintaxis y uso idénticos), que se activan durante el primer fotograma en el que deja de chocar con un objeto y durante cada fotograma en el que choca con un objeto, respectivamente.

A veces, también puede ser útil hacer lo que se llama raycasting . En raycasting, una línea infinitamente delgada (un rayo ) se lanza a través del mundo desde algún origen, a lo largo de algún vector y, cuando golpea algo, se devuelve la posición y otros detalles de la primera colisión. El código de un raycast se ve así:

|_+_|

Esto proyecta un rayo desde la posición del objeto actual a lo largo de -Vector3.up (hacia abajo) y vincula la variable pegar al primer objeto con el que choca. Una vez que su rayo golpea algo, puede acceder golpe.distancia para determinar qué tan lejos está, o hit.GameObject para manipular el objeto que golpeaste.

Raycasts como este se pueden usar para que los tiradores determinen a qué apunta el arma, o para seleccionar objetos cuando la cámara los mira, o para ciertos estilos de mecánica de movimiento.

6.5 Corrección de tiempo

Un factor importante a tener en cuenta cuando manipula objetos de esta manera tiene que ver con cuadros por segundo . No importa qué tan cuidadosamente optimices, las tasas de fotogramas siempre variarán y no querrás que la velocidad de tu juego varíe en consecuencia. Si alguien más ejecuta tu juego en una computadora más rápida de la que lo desarrollaste, no querrás que el juego se ejecute al doble de velocidad.

La forma en que corrige esto es multiplicando los valores que está usando por el tiempo que tardó en renderizar el último fotograma. Esto se hace usando Time.deltaTime . Esto cambia efectivamente la velocidad de cualquier variable desde la que esté incrementando cada fotograma. cambio por cuadro para cambio por segundo , y probablemente debería realizar este cambio en cualquier valor que esté incrementando o disminuyendo en cada fotograma.

6.6 Fuentes de audio y oyentes

Ahora que hemos cubierto cómo crear, renderizar y controlar objetos, hablemos del otro sentido al que pueden servir los juegos de computadora: a saber, sonido . Unity admite dos tipos de sonidos: 2D y 3D sonidos. Los sonidos 3D varían su volumen según la distancia y se distorsionan a medida que se mueven en relación con la cámara; Los sonidos 2D no lo hacen.

Los sonidos 2D son apropiados para voces en off y música de fondo, y los sonidos 3D se aplican a los sonidos generados por eventos en el mundo. Para cambiar si un sonido es 3D o no, selecciónelo en el proyecto ver, cambiar a la inspector ver y seleccionar la opción apropiada del menú desplegable, luego presione el reimportar botón.

Para reproducir realmente el sonido, deberá adjuntar un audiosource a un accesorio (el accesorio desde el que desea que se origine el sonido, en el caso de un sonido 3D). Entonces necesitarás abrir el segmento de audio campo y seleccione su archivo de sonido.

¿Cómo sabes si alguien te bloquea en Snapchat?

Puedes usar myAudioSource.Pause () y myAudioSource.Play() para controlar esos archivos de sonido. Puede ajustar los comportamientos de caída, el volumen y el desplazamiento Doppler de los sonidos debajo del inspector pestaña de la fuente de audio.

6.7 Entrada

Un juego que no recibe ninguna entrada del usuario no es un gran juego. Hay muchos tipos diferentes de entrada en los que puede leer, y casi todos son accesibles a través del Aporte y Clave objetos. A continuación se muestran algunos ejemplos de declaraciones de entrada (que tienen valores evaluados en cada cuadro).

|_+_|

Las funciones de estas líneas se explican por sí mismas en su mayoría. Con estos tres tipos de referencia de entrada, puede reconstruir los esquemas de control de la mayoría de los juegos de computadora 3D modernos.

6.8 Depurar un script

Digamos que un guión no funciona. Como dice el buen doctor, te pueden pasar explosiones y bloqueos. Si hay errores de sintaxis absolutos con su C #, el juego generalmente se negará a ejecutarse cuando presione play, y se proporcionarán algunos mensajes de error bastante útiles si construir los scripts desde dentro del editor. Vea abajo:

Estos errores no suelen ser los más difíciles de corregir. Lo que puede ser más problemático son los errores semánticos sutiles, en los que ha escrito con éxito un archivo lleno de C # válido, pero no uno que haga lo que pensaba que haría. Si tiene uno de estos errores y tiene problemas para localizarlo, hay algunas cosas que puede intentar para mejorar la situación.

La primera es pausar la ejecución del juego y verificar la consola. Puede pausar el juego haciendo clic en el pausa en la parte superior media del editor y luego seleccionando consola desde el fondo de la ventana menú (o presionando control > Cambio > C ). Incluso si no hay errores, las advertencias pueden ayudar a dar algunas pistas sobre lo que podría estar fallando.

Si esto no funciona, también puede intentar tener una idea sobre el estado de su script imprimiendo el estado de las variables internas para validar que el programa está haciendo lo que usted cree que está haciendo. Puedes usar Debug.Log (cadena) para imprimir el contenido de una cadena en la consola cuando la ejecución del programa llega a esa línea. En general, si trabaja al revés desde lo que cree que debería estar pasando a través de las cosas que deberían hacer que suceda, eventualmente llegará a un punto en el que sus impresiones de depuración no harán lo que espera que hagan. Ahí es donde está tu error.

7. Ejemplo: Scripting Pong

Para construir Pong, descompongamos el juego en sus elementos centrales: necesitamos una pelota que rebote hacia adelante y hacia atrás entre las paletas a una velocidad creciente, necesitamos un marcador que sepa cuándo las pelotas han pasado las paletas y necesitamos un mecanismo para reiniciar el balón cuando eso suceda. Un buen primer paso sería agregar un cuerpo rígido no cinemático a la bola, dos cuerpos rígidos cinemáticos a las paletas, desactivar la gravedad para todos ellos y asignar un material físico apropiado de los activos estándar ( bote con rebote combinar ajustado a multiplicar ).

A continuación, puede ver el guión de la pelota con comentarios explicativos. La pelota debe lograr algunos objetivos básicos: debe rebotar en un patrón complicado, siempre manteniendo el movimiento en ambos ejes, y debe acelerar a un ritmo desafiante pero no imposible en la dirección horizontal.

BallHandler.cs

A continuación, necesitamos escribir nuestra paleta, que puede ver a continuación. La paleta debe moverse hacia arriba y hacia abajo en respuesta a las pulsaciones de teclas (pero no fuera de ciertos límites). También necesita activar el sistema de partículas cuando choca con algo.

PaddleHandler.cs

A continuación, necesitamos IA enemiga: algo que hará que la paleta del enemigo se dirija hacia la bola a una velocidad fija. Para eso, usaremos Vector3.Slerp para una máxima simplicidad. También nos gustaría el mismo comportamiento de partículas que vemos en nuestra propia paleta.

EnemyAI.cs

Finalmente, necesitamos un script para actualizar el marcador y reiniciar el balón cuando se sale de los límites.

ScoreboardUpdater.cs

Con esos guiones adjuntos y las referencias completadas, cuando ejecutamos nuestro juego de Pong, ¡experimentamos el juego!

Usted puede descarga mi demo de Pong , si desea ver todo lo que he descrito en acción. Funciona en sistemas Windows, Mac y Linux.

8. Explorar la documentación / aprender más

Unity es un motor complejo con muchas más funciones de las que podrían cubrirse en una guía de este estilo, y eso es antes de incluir la amplia gama de extensiones de Unity (gratuitas y comerciales) disponibles en Internet. Esta guía le proporcionará un punto de partida sólido para desarrollar un juego, pero la autoeducación es una habilidad importante en cualquier esfuerzo, y lo es doblemente aquí.

Un recurso crucial aquí es el Referencia de secuencia de comandos de Unity . ScriptReference es una base de datos con capacidad de búsqueda, disponible tanto para C # como para Javascript, que tiene una lista de todos los comandos y funciones de Unity, con descripciones de sus funciones y breves ejemplos de sintaxis.

Si tiene problemas con el editor y la interfaz de Unity, o simplemente le gustan los videos tutoriales como cuestión de preferencia, existe una larga lista de Tutoriales en video de Unity disponible. Más extenso (pero menos amplio) tutoriales de texto para Unity también están disponibles en CatLikeCoding.

Finalmente, si tiene preguntas más allá del alcance de la documentación o tutoriales, puede hacer preguntas específicas en answers.Unity3d.com . Recuerde que las respuestas son proporcionadas por voluntarios, así que respete su tiempo y busque en la base de datos primero para asegurarse de que su pregunta aún no haya sido respondida.

9. Creación de su juego / compilación en una aplicación independiente

Cuando hayas creado algo de lo que estés orgulloso (o hayas terminado de clonar nuestro ejemplo de Pong ligeramente dudoso para practicar), es hora de mover tu juego del editor y convertirlo en algo que puedas publicar en Internet y forzar. tus amigos y familiares para jugar. Para hacer eso, necesitará crear una aplicación independiente. La buena noticia es que en Unity, esto es muy, muy fácil. Sin embargo, hay algunos contratiempos potenciales con los que querrá tener cuidado.

Para empezar, sepa que solo puede crear un proyecto sin errores. Con ese fin, asegúrate de tener la consola abierta mientras construyes: hay algunas condiciones de error que el juego ignorará en el editor, pero anulará un intento de compilación. Esto solo arroja mensajes de error a la consola, sin resultados visibles en pantalla, lo que puede ser frustrante si se olvida de verificar. Sin embargo, una vez que haya compilado su juego sin errores, puede seleccionar Configuración de compilación bajo la Expediente menú, o presione control > Cambio

> B . Aparecerá un cuadro de diálogo simple que le permitirá crear su juego para varias plataformas.

El proceso a partir de ahí se explica por sí mismo: seleccione sus opciones y presione construir ; el juego te pedirá un directorio para instalar y colocará tanto el directorio de datos como el ejecutable allí. Estos dos archivos se pueden comprimir y distribuir (solo asegúrese de no cobrar por un juego creado en la demostración de Unity, ya que esto viola los términos de servicio).

10. Notas finales

Al igual que con cualquier herramienta de desarrollo de juegos, la clave del éxito con Unity es el desarrollo iterativo. Tienes que construir en incrementos manejables: sé ambicioso, por todos los medios, pero sé ambicioso en pequeños trozos, y organiza esos trozos de tal manera que, incluso si no alcanzas tu máxima ambición, al menos terminarás con un coherente producto.

Obtenga los elementos más importantes en primer lugar: tenga una idea en mente de su producto mínimo viable , la cosa más simple y básica que podrías crear y aún sentir que has logrado algo que valga la pena. Llegue a ese proyecto mínimo viable antes de pasar a ambiciones más grandes.

Este tutorial te ofrece un buen punto de partida, pero la mejor forma de aprender Unity es construyendo un juego. Empiece a construir un juego, llene los vacíos en su conocimiento a medida que surjan, y el flujo gradual de conocimiento erosionará las cosas que no sabe sorprendentemente rápido.

Si ha leído todo esto y está un poco abrumado por la codificación requerida con Unity, asegúrese de ver cómo aprender el desarrollo de juegos con Unity Learn y también lea nuestra guía sobre cómo hacer videojuegos sin ningún tipo de programación.

Unity es una herramienta poderosa y, con un poco de exploración, puede crear proyectos impresionantes con ella más rápido de lo que podría esperar. Háganos saber lo que creó en los comentarios a continuación, ¡nos encantaría verlo!

Cuota Cuota Pío Correo electrónico 3 formas de comprobar si un correo electrónico es real o falso

Si ha recibido un correo electrónico que parece un poco dudoso, siempre es mejor verificar su autenticidad. Aquí hay tres formas de saber si un correo electrónico es real.

Leer siguiente
Temas relacionados
  • Programación
  • Programación
  • Forma larga
  • Guía de formato largo
Sobre el Autor Andre Infante(131 Artículos publicados)

Andre es un escritor y periodista que vive en el suroeste y está garantizado para seguir funcionando hasta 50 grados centígrados y es resistente al agua hasta una profundidad de tres metros y medio.

Más de Andre Infante

Suscríbete a nuestro boletín

¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse