0% encontró este documento útil (0 votos)
1 vistas9 páginas

Motor Unity 5

Cargado por

Lanciani Agustin
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
1 vistas9 páginas

Motor Unity 5

Cargado por

Lanciani Agustin
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

Motor Unity 5

Motores de videojuegos
CONTENIDO
1. Objetivos

2. Programación en C# y Visual Studio


Utilización de Visual Studio con Unity
Creación y uso de C# scripts
Control de GameObjects
Variables e Inspector
Control de GameObjects utilizando componentes
3. Creación de Prefabs

4. Uso de Gizmos para el control del videojuego

5. Motor adaptativo: 2D y 3D

6. Conclusión

7. Bibliografía
Motor Unity 5 | 3

Objetivos Aunque el editor de Unity es una


herramienta excelente para montar
Conocer la utilidad de Visual Studio en Unity, así como
algunas de sus características más relevantes. juegos, no se puede escribir código en
• Crear scripts en C# y añadirlos a los GameObjects. él. Con Visual Studio Tools para Unity,
• Conocer la estructura por defecto de un C# Script. puede usar las conocidas características
• Controlar GameObjects mediante el uso de C# de edición de código, depuración y
Scripts.
productividad de Visual Studio para crear
• Acceder a los componentes de un GameObject
desde un C# Script. scripts de editor y juego para su proyecto
• Conocer el concepto de prefab, así como la forma de Unity mediante C#, que puede depurar
de crearlos y personalizarlos.
• Conocer el concepto de gizmos, así como la forma
con las eficaces funcionalidades de
de crearlos y personalizarlos. depuración de Visual Studio.
• Conocer los modos 2D y 3D de Unity, así como los
distintos tipos de juegos que posibilitan.
Pero Visual Studio Tools para Unity
Programación en C# y es más que eso, también se integra
Visual Studio perfectamente con el editor de
Unity para que pase menos tiempo
La programación de scripts es un ingrediente esencial en
todos los juegos. Incluso el juego más simple necesita cambiando continuamente para realizar
scripts para responder a las entradas (input) del jugador tareas sencillas, ofrece mejoras de
y asegurar que los eventos del juego se ejecutan en el
momento adecuado. (Unity Technologies, 2021). productividad específicas para Unity y
A la hora de realizar la programación de los scripts
coloca la documentación de Unity a su
en Unity será de gran importancia disponer de un alcance.
entorno de desarrollo que resulte cómodo. Como se
recoge en Microsoft Docs (2021), opciones como el
autocompletado inteligente, cambios a los archivos Según Microsoft (2021), entre las ventajas que ofrece
fuente con ayuda de la computadora, un resaltado de Visual Studio, se encuentran el sistema Intelli Sense,
sintaxis inteligente, entre otras, pueden hacer que la el cual permite implementar mensajes de API de Unity
experiencia de desarrollo sea mucho más cómoda. como OnCollisionEnter, la capacidad para realizar
una sólida depuración, las sugerencias integradas
Esto es lo que ofrece Visual Studio C#, una herramienta
para procedimientos recomendados e información de
de entorno de desarrollo integrado (en inglés Integrated
rendimiento, la compatibilidad con CodeLens para scripts
Development Environment o IDE) de Microsoft. Según
y mensajes de Unity, que muestra sugerencias para que
indica Microsoft (2021):
sea más fácil distinguir lo que proporciona Unity del
código escrito por el programador y la vista optimizada
de todos los scripts para que coincidan con Unity.
Visual Studio Tools para Unity es una
extensión gratuita de Visual Studio
Utilización de Visual Studio con
que convierte Visual Studio en una Unity
completa herramienta con la que se Para configurar el Editor de Unity y usar Visual Studio
pueden desarrollar aplicaciones y juegos como IDE predeterminado, se deben seguir los siguientes
pasos se accede al menú superior Edit, apartado
multiplataforma con Unity. Preferences, apartado External Tools, apartado External
Script Editor, y se selecciona Visual Studio.
Motor Unity 5 | 4

Creación y uso de C# scripts Unity Technologies (2021). Se puede pensar en una


clase como un tipo de plano (Blueprint) para crear un
En Unity, el comportamiento de los GameObjects es tipo de componente nuevo que puede adjuntarse a los
controlado por los componentes que llevan adjuntos. GameObjects. Unity Technologies (2021). Se debe tener
Según se recoge en el Manual de Unity, Unity Technologies en cuenta que:
(2021), aunque Unity dispone de una serie de
componentes muy variados, éstos van a ser insuficientes • Cada vez que se adjunta un componente script a
para implementar las características propias de un un GameObject, éste crea una nueva instancia del
juego. Para ello, Unity permite a los desarrolladores objeto definido por el plano.
crear componentes propios utilizando scripts. Como se • El nombre de la clase es el que se dio al archivo en
recoge en el Manual de Unity, Unity Technologies (2021), el momento de su creación.
Unity soporta dos lenguajes de forma nativa: • El nombre de la clase debe coincidir con el nombre
• C# (pronunciado C-sharp), un lenguaje estándar de del archivo.
la industria similar a Java o C++.
Por defecto, los scripts son creados con dos funciones
• UnityScript, un lenguaje diseñado específicamente definidas dentro de la clase, como recoge Unity
para uso con Unity y modelado tras JavaScript. Technologies (2021):
En este tema se va a utilizar C# para iniciarse en la • Función Update: en la que se coloca el código que
programación de scripts. Los scripts se crean en el menú se encargará de la actualización por frame para el
Assets, Create, C# Script o haciendo clic derecho en la GameObject. Por ejemplo, movimiento, acciones de
carpeta en la que quiera crearse dentro de la ventana trigger o respuestas al input del usuario, es decir,
Project. Es recomendable darle al archivo el nombre cualquier cosa que se necesite manejar en tiempo
definitivo en el momento de su creación, pues este será real durante el gameplay.
el nombre de la clase que se está creando y ambos • Función Start: Esta función es llamada por Unity
deberán coincidir. Al hacer doble clic sobre el script, éste antes de que el Gameplay comience, por lo que es
se abrirá en el Editor de texto. El contenido inicial del el lugar ideal para hacer las inicializaciones.
archivo es el que se recoge en la figura 1.
Control de GameObjects
Un script solo define un plano para un componente, por lo
cual su código no será activado hasta que una instancia
del script sea adjuntada a un GameObject en escena.
(Unity Technologies, 2021).

Se puede añadir un script a un GameObject arrastrándolo


a éste en el panel de jerarquía o en el inspector cuando el
GameObject está seleccionado. También puede añadirse
como cualquier otro componente haciendo clic en Add
Component en la parte inferior del Inspector y buscándolo
entre los recursos disponibles.

Para comprobar que el código del script se ejecuta


cuando ha sido añadido a un GameObject se va a añadir
una línea de código dentro de la función Start, como
puede verse en la figura 2.

Figura 1. Estructura inicial de un script.

Un script hace sus conexiones


con el funcionamiento interno de
Unity al implementar una clase que Figura 2. Función Start que muestra por consola el mensaje “Hello
World”.
deriva desde la clase integrada
llamada MonoBehaviour.”
Motor Unity 5 | 5

Si se ejecuta ahora el juego no sucederá nada, ni en En este caso, la variable myName ha sido declarada
pantalla ni en la ventana Console, que por defecto viene pública, por lo cual, como puede verse en la figura 5, se
anclada en la parte inferior del IDE. Esta ventana “muestra le podrá dar valor desde el Inspector utilizando el campo
errores, advertencias y otros mensajes generados por editable llamado igual que su nombre, “My Name”.
Unity. Para ayudar con debugging, usted también puede
mostrar sus propios mensajes en la Consola utilizando
las funciones Debug.Log, Debug.LogWarning and Debug.
LogError.” (Unity Technologies, 2021).

Ahora se va a añadir un GameObject en escena, desde Figura 5. Variable pública vista desde el inspector.
el menú superior GameObject, 3D Object, Cube, y se
le va a añadir el script creado de una de las formas
mencionadas anteriormente. Si ahora se ejecuta el juego Si ahora se ejecuta el juego se podrá ver cómo el valor
se podrá ver por consola el mensaje escrito en el script, dado a la variable en el inspector es el que ésta ha
como se recoge en la figura 3. tomado durante la ejecución, como puede verse en la
figura 6.

Figura 3. Mensaje del script mostrado por consola.


Figura 6. Mensaje por consola que muestra el valor dado a la variable
“myName” desde el inspector

Variables e inspector Algo muy interesante de las variables públicas es que


Cuando se crea un script se está creando un nuevo tipo Unity permite cambiar su valor durante la ejecución, muy
de componente que puede adjuntarse como cualquier útil para ver los efectos de cambios directos sin necesidad
otro componente a los GameObjects. Al igual que de detener la ejecución y reiniciarla. Cuando el modo de
otros componentes, los scripts tienen propiedades que juego termine, los valores de las variables volverán al
son editables en el inspector, por lo cual a la hora de valor que tenían antes de comenzar la ejecución, lo cual
programarlos se puede decidir qué valores del script permite realizar ajustes en tiempo real sin miedo a hacer
podrán editarse desde el Inspector. Esto se consigue un daño permanente. (Unity Technologies, 2021).
declarando dichas variables como públicas dentro de
los scripts, y puede hacerse simplemente anteponiendo Control de GameObjects
la palabra public a la declaración de la variable, como
puede verse en la figura 4. (Unity Technologies, 2021).
utilizando componentes
Por ahora se ha visto el uso más sencillo de un script,
mostrar un texto por consola. Pero los scripts pueden
realizar muchas acciones con el GameObject en el que
se encuentran.

• Acceso a componentes
Algo muy habitual es acceder desde un script a otros
componentes que lleva adjuntos el GameObject
en el que se encuentra. Un componente es una
instancia de una clase, por lo cual se deberá coger
una referencia a la instancia del componente con
el que se quiere trabajar en el script. Esto se hace
Figura 4. Script con una declaración de una variable pública llamada con la función GetComponent. (Unity Technologies,
myName. 2021).
Motor Unity 5 | 6

Normalmente se asignará esa referencia al Una vez almacenado ese valor en la variable ya
componente a una variable del script para poder podrá utilizarse en el script. Por ejemplo, desde
utilizarla a lo largo del mismo sin necesidad de un script de un enemigo se podrá modificar su
recoger de nuevo la referencia, como puede verse posición basándose en la del player, como se ve
en la figura 7, en la que se muestra un script en en la figura 9.
el que se almacena la referencia al componente
Rigidbody del GameObject en la variable rb, de tipo
Rigidbody.

Figura 7. Obtención de la referencia al componente Rigidbody del Figura 9. Uso de la posición del player para colocar un enemigo.
GameObject y almacenamiento en la variable rb.

Enlazar objetos de esta manera es muy útil


Con esa referencia almacenada en la variable rb, cuando se trata con objetos individuales que
se pueden realizar modificaciones al componente tienen conexiones permanentes. No obstante,
Rigidbody del GameObject en el script, como puede a veces será necesario enlazar los objetos en
verse en la figura 8. tiempo de ejecución, para lo cual se puede buscar
objetos por su nombre o tag.
- Búsqueda de objetos por Name o Tag
Siempre que se disponga de alguna información
para identificar un objeto, como su nombre o su
tag, se podrá localizar éste en tiempo de ejecución
utilizando la función GameObjectFind, como se
recoge en la figura 10. (Unity Technologies, 2021).

Figura 8. Uso de la variable rb, que almacena la referencia al Rigidbody


del GameObject, para añadir una fuerza.

De esta forma se puede, por ejemplo, mover un


objeto modificando su componente Transform en
la función Update, o cambiar la intensidad de una
luz del nivel modificando la propiedad Intensity de
su componente Light. Figura 10. Búsqueda de un GameObject llamado “MainHeroCharacter”.

Como se ha visto, se puede acceder a cualquier


componente del GameObject desde un script, También se puede localizar un objeto por su tag o,
e incluso a otros scripts que lleve adjuntos el incluso, varios objetos por su tag y almacenarlos en un
GameObject, simplemente utilizando su nombre array utilizando las funciones GameObject.FindWithTag
con la función GetComponent. y GameObject.FindGameObjectsWithTag, como puede
• Acceso a otros objetos verse en la figura 11.
Aunque a veces los scripts actúan en aislamiento,
es habitual que un script necesite tener registro de
otros objetos del nivel. Por ejemplo, un enemigo
podría necesitar conocer la posición del jugador
para perseguirlo. Para ello, Unity proporciona
distintas formas de recuperar otros objetos. (Unity
Technologies, 2021).
- Enlace de objetos con variables
La forma más directa de encontrar un GameObject Figura 11. Búsqueda de un GameObject con tag “Player” y de todos los
concreto es declarando una variable pública de GameObjects con tag “Enemy”.
tipo GameObject en el script. Como toda variable
pública, esta variable será visible en el Inspector,
y se le podrá dar valor arrastrando el GameObject
al campo de la variable.
Motor Unity 5 | 7

Creación de Prefabs Simplemente arrastrando este prefab a la escena se


pueden crear tantas instancias de él como se quieran.
Cuando se tiene un GameObject, como un NPC, prop o
pieza del escenario, que vaya a ser reutilizado varias veces
en el juego, por lo general se querrá que cada instancia Uso de Gizmos para el
del objeto en particular tenga las mismas propiedades control del videojuego
en lugar de tener que realizar estas modificaciones una
a una cada vez que se añada una instancia al nivel. (Unity “Los gizmos se utilizan para permitir un debug visual
Technologies, 2021). o para colocar ayudas en la vista de escena.” (Unity
Technologies, 2021). En la figura 13 se pueden ver, de
Para ello, según Unity Technologies (2021), Unity cuenta izquierda a derecha, los gizmos de transform, rotación y
con los Prefabs. Un prefab es un tipo de asset que escalado de un cubo.
permite almacenar un objeto GameObject completo con
sus componentes y propiedades. Como se indica en el
Manual de Unity, el prefab actúa como una plantilla a
partir de la cual se pueden crear nuevas instancias del
objeto en la escena.

Cualquier edición que se realice a un asset prefab se


verá inmediatamente reflejada en todas las instancias
producidas por él, aunque también se pueden realizar
Figura 13. Gizmos de un cubo.
modificaciones a estas instancias si se quieren
personalizar. Esto es útil, por ejemplo, para crear varios
NPCs con una base común pero algunas diferencias También existen otro tipo de gizmos, por ejemplo, el icono
entre ellos. de sol que muestran las luces colocadas en escena para
poder ubicarlas, o el icono de cámara de las cámaras,
Se puede crear un prefab desde el menú superior como puede verse en la figura 14.
Assets, Create Prefab, y luego arrastrando un objeto de
la escena al prefab asset vacío que ha aparecido en la
ventana Project. También se puede configurar el objeto
en escena y arrastrarlo a la carpeta en la que se quiere
crear el prefab y éste se creará automáticamente. En la
figura 12 se puede ver un prefab de un cubo rojo en la
ventana Project.

Figura 14. Gizmos de una luz y una cámara.

Estos gizmos aparecen por defecto con los objetos


situados en escena. No obstante, se pueden tener
objetos invisibles en ejecución que interese que sean
visibles dentro de la escena de esta manera, como, por
ejemplo, un spawn de enemigos. En ocasiones, se querrá
que suceda algo en escena, para lo cual se necesite un
script, sin que un objeto visible lo lleve adjunto.

Para ello se cuenta con Empty GameObjects, objetos


que únicamente tienen, por defecto, un componente
Transform que define su posición en el mundo. Al no
tener un componente Renderer, un Empty GameObject no
será visible en escena, al igual que un GameObject al que
se le deshabilite dicho componente.

Un Empty GameObject puede servir para llevar


un script que le otorgue una funcionalidad, como
spawnear enemigos, sin ser visible. Cuando se colocan
GameObjects vacíos en escena, éstos no son visibles si
Figura 12. Prefab no están seleccionados, momento en el que se mostrará
su componente Transform, por lo que es fácil perderles
la pista.
Motor Unity 5 | 8

En estos casos es posible que se quiera añadir un gizmo • 3D Completo


a esos objetos que los haga visibles en escena, pero “Los juegos 3D usualmente hacen uso de geometría
no en ejecución, simplemente para poder ubicarlos y en tres dimensiones, con materiales y texturas
seleccionarlos de forma sencilla en escena. Estos gizmos representadas en las superficies de GameObjects
serán objetos que representen dónde se encuentran los para hacerlos parecer como entornos sólidos,
objetos vacíos en el mundo. personajes y objetos que componen el mundo
del juego.” (Unity Technologies, 2021). Además,
Para crearlos, se utiliza el script que lleva el Empty
la escena se representa utilizando la perspectiva.
GameObject y la función OnDrawGizmos. En la figura 15
Para estos juegos debería seleccionarse el modo
se puede ver una función OnDrawGizmos que, utilizando
3D. En la figura 16 se recogen ejemplos de juegos
la clase Gizmos de Unity, dibujará un gizmo de color azul
3D Completos.
con forma de cubo en la posición del Empty GameObject
de tamaño 1x1x1 que será visible en escena, pero no en
ejecución.

Figura 16. Ejemplos de juegos 3D Completos. Fuente: Unity


Technologies. Título: Proyectos 2D o 3D. Lugar de publicación: Unity
Technologies, 2016 [consultado 2021, noviembre 11]. Disponible en
Figura 15. Función OnDrawGizmos que dibuja un gizmo azul, con forma https://docs.unity3d.com/es/530/Manual/2Dor3D.html
de cubo de 1x1x1

• 3D Ortográfico
Para añadir la malla, es de utilidad escribir Gizmos.Draw
y ver el desplegable de opciones que muestra el editor, Para juegos en los que se utiliza una geometría
como icon, line, mesh, sphere o ray. Estos gizmos actúan 3D, pero con una cámara ortográfica en lugar de
como objetos con los que se pueden interactuar, por lo una cámara de perspectiva, mostrando una vista
que es posible seleccionarlos en escena, no siendo ya panorámica de la acción, denominada a veces
necesario buscar el objeto vacío en la jerarquía para 2.5D se debería seleccionar el modo 3D y cambiar
poder seleccionarlo. la cámara y ventana de escena a ortográfico. En
la figura 17 se recogen ejemplos de juegos 3D
Ortográficos.
Motor adaptativo: 2D y
3D
Unity tiene capacidad para crear juegos tanto 2D como
3D, lo cual, unido a muchas otras de sus características,
lo convierte en un motor muy versátil. Cuando se crea
un proyecto en Unity, se puede comenzar en modo 2D Figura 17. Ejemplos de juegos 3D Ortográficos. Fuente: Unity
o 3D, lo que determina algunas configuraciones para el Technologies. Título: Proyectos 2D o 3D. Lugar de publicación: Unity
Editor de Unity, como, por ejemplo, si las imágenes se Technologies, 2016 [consultado 2021, noviembre 11]. Disponible en
importan como texturas o como sprites. No obstante, https://docs.unity3d.com/es/530/Manual/2Dor3D.html
también es posible cambiar entre los modos 2D y 3D
en cualquier momento, independientemente de cómo • 2D Completo
se configuró el proyecto en el momento de su creación. Para juegos que utilizan gráficos planos llamados
(Unity Technologies, 2021). sprites, que no tienen geometría en tres dimensiones
Para cambiar entre los modos 2D y 3D simplemente y cuya cámara con tiene perspectiva se debería
hay que dirigirse al menú superior Edit, Project Settings, seleccionar el modo 2D. En la figura 18 se recogen
seleccionar la categoría Editor y configurar como Default ejemplos de juegos 2D completos.
Behaviour Mode 2D o 3D. Algunas pautas para seguir
a la hora de decidir si se quiere crear un proyecto 2D o
3D, tal y como se recogen en el Manual de Unity, Unity
Technologies (2021), son las siguientes:

Figura 18. Ejemplos de juegos 3D Ortográficos. Fuente: Unity


Technologies. Título: Proyectos 2D o 3D. Lugar de publicación: Unity
Technologies, 2016 [consultado 2021, noviembre 11]. Disponible en
https://docs.unity3d.com/es/530/Manual/2Dor3D.html
Motor Unity 5 | 9

• Gameplay 2D con gráficas 3D • Otros estilos


Para juegos que utilizan geometría 3D para el Si se tiene algo totalmente distinto en mente para
entorno y personajes, pero limitan el gameplay a un proyecto, se pueden revisar las particularidades
dos dimensiones se debería seleccionar el modo de los modos 2D y 3D para ver en qué modo
3D. En la figura 19 se recoge un ejemplo de juego encajaría mejor, sabiendo que en todo momento
con gameplay 2D con gráficas 3D. puede cambiarse entre ellos si finalmente así se
desea.

Conclusión
Se ha comenzado el tema conociendo que la
programación de scripts es un ingrediente esencial en
todos los juegos y que para llevarla a cabo es necesario
disponer de un editor de texto, como Visual Studio, que
Figura 19. Ejemplos de juego con gameplay 2D con gráficas 3D. Fuente: facilite la tarea el programador lo máximo posible. Se ha
Unity Technologies. Título: Proyectos 2D o 3D. Lugar de publicación:
Unity Technologies, 2016 [consultado 2021, noviembre 11]. Disponible aprendido a crear C# scripts, se ha conocido su estructura
en https://docs.unity3d.com/es/530/Manual/2Dor3D.html inicial, que incluye las funciones Start y Update, y que
un script es un componente más que puede añadirse
a los GameObjects para otorgarles funcionalidades
• Gameplay 3D y gráficos 2D, con una cámara en personalizadas por el programador. Se ha aprendido a
perspectiva añadirlos a los GameObjects y a declarar variables en
Este estilo de juego, también popular, utiliza ellos y mostrarlas por consola. Además, se ha aprendido
gráficos 2D, pero con una cámara en perspectiva a acceder a otros componentes del GameObject que lleva
para obtener un efecto de paralaje. “Este es un un script utilizando variables públicas y a componentes
estilo de escena de “teatro de cartón”, dónde todos de otros GameObjects.
los gráficos son planos, pero colocados a diferentes
distancias de la cámara.” Para este caso, se debería A continuación, se ha conocido el concepto de
seleccionar el modo 2D, pero cambiando el modo prefab, un tipo de asset que permite almacenar un
de proyección de la cámara a Perspective y el modo objeto GameObject completo con sus componentes y
de la Ventana de Escena a 3D. En la figura 20 se propiedades, y se ha aprendido a crearlos. Después, se
recoge un ejemplo de juego con gameplay 3D con ha aprendido el concepto de gizmos, elementos que se
una cámara en perspectiva. utilizan para permitir un bug visual o para colocar ayudas
en la vista de escena, y se ha aprendido a crearlos para
hacer visibles Empty GameObjects en escena. Por último,
se ha hablado de la capacidad de Unity para crear juegos
tanto 2D como 3D, lo cual, unido a muchas otras de sus
características, lo convierte en un motor muy versátil.

Bibliografía
Figura 20. Ejemplos de juego con gameplay 3D con una cámara en
1. Microsoft. (2021). Visual Studio Tools para Unity.
perspectiva. Fuente: Unity Technologies. Título: Proyectos 2D o 3D. Lugar
de publicación: Unity Technologies, 2016 [consultado 2021, noviembre Microsoft Docs. Recuperado de https://docs.
11]. Disponible en https://docs.unity3d.com/es/530/Manual/2Dor3D. microsoft.com/es-es/Visual Studio/gamedev/unity/
html get-started/visual-studio-tools-for-unity
2. Unity Technologies. (2021). Unity Manual.
Recuperado de https://docs.unity3d.com/Manual/
UnityManual.html

También podría gustarte