Tesis final LEITO CD

REPÚBLICA BOLIVARIANA DE VENEZUELA
MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN SUPERIOR
UNIVERSIDAD RAFAEL URDANETA
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA DE COMPUTACIÓN
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
DESARROLLO DE UN JUEGO DE ESTRATEGIA POR TURNOS CON
CAPACIDAD MULTIJUGADOR UTILIZANDO EL MOTOR GRAFICO UNITY
TRABAJO ESPECIAL DE GRADO PARA OPTAR AL TÍTULO DE
INGENIERO DE COMPUTACIÓN
REALIZADO POR:
BR. LEONARDO JOSÉ FUENMAYOR RINCÓN
C.I V.- 23.737.522
BR. CARLOS DANIEL SOTOLONGO GARCÍA
C.I V.- 20.864.934
TUTOR ACADÉMICO:
ING. RAINIER ARAUJO
MARACAIBO, ABRIL 2015
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
DESARROLLO DE UN JUEGO DE ESTRATEGIA POR TURNOS CON
CAPACIDAD MULTIJUGADOR UTILIZANDO EL MOTOR GRAFICO
UNITY
DESARROLLO DE UN JUEGO DE ESTRATEGIA POR TURNOS CON CAPACIDAD
MULTIJUGADOR UTILIZANDO EL MOTOR GRAFICO UNITY
TESISTAS
_________________________________________
Br. Leonardo José Fuenmayor Rincón
S
O
D
VA
C.I. 23.737.522
Teléfono: 04246083843
O
D
H
C
E
ER
R
SE
E
R
S
Email: [email protected]
_________________________________________
Br. Carlos Daniel Sotolongo García
C.I. 20.864.934
Teléfono: 04146444060
Email: [email protected]
TUTOR ACADÉMICO
_________________________________________
Ing. Rainier Araujo
C.I. 18724011
Teléfono: 04146069190
E-mail: [email protected]
Cargo: Docente Instructor
DEDICATORIA
A mi madre Alcira por todo el apoyo brindado durante mi vida y
especialmente durante mi carrera, a mi padre Leonardo por ser siempre
S
O
D
VA
un ejemplo de dedicación y por enseñarme que para lograr nuestras
ER
S
E
R
cuidado y estar siempre hay para
mí
y finalmente pero no menos
S
O
H por quererme y apoyarme desde que nos
importante, a mi novia
Lisbeth
C
E
conocemos.
DER
metas hay que dar nuestro mayor esfuerzo, a mi abuelo Elí por todo su
amor y apoyo durante mi vida, a mi abuela Cira Luisa, por el amor,
Leonardo Fuenmayor
iii
DEDICATORIA
A mi madre Laury por haberme brindado apoyo por todo el transcurso de
mi vida, a mi abuela María por cuidarme siempre y haber estado
pendiente de mí en todo momento, y a Alcira por sus constantes cuidados
y atenciones en todo el tiempo que estuve en la universidad las cuales
S
O
D
VA
necesité.
O
D
H
C
E
ER
R
SE
E
R
S
Carlos Sotolongo
iv
AGRADECIMIENTO
Resulta muy complicado agradecer a todas las personas que durante los
4 años de carrera universitaria me apoyaron, desafortunadamente
siempre estará incompleta la lista de personas a quienes les debo mi
gratitud, y quiero que se pan que aunque no estén acá, igualmente tienen
toda mi gratitud.
S
O
D
VA
R
SE
E
R
S
O
Principalmente agradezco a Dios y a la Virgen de Chiquinquirá por
H
C
E
ER
siempre estar a mi lado en los buenos y los malos momentos de mi vida.
D
A mis padres Leonardo y Alcira por tenerme paciencia y brindarme su
apoyo durante toda mi vida.
A mi novia Lisbeth por aguantar mis abandonos y a pesar de todo por
alentarme siempre a seguir adelante.
A mis compañeros Carlos, María, Lascario, Andrés, Turcio, Jonn, Janco y
Alexander, por el tiempo que pasamos juntos durante más de dos años
compartiendo el “Lugar Feliz”.
A la Universidad Rafael Urdaneta, por haber facilitado los medios, tanto
académicos como económicos para poder alcanzar esta meta.
A todos los profesores que fueron parte de mi formación académica,
especialmente al Ing. Rainier Araujo por ser tutor de este trabajo especial
de grado, al Ing. Jubert Pérez por los conocimientos y la orientación
profesional brindada, y por ultimo al Ing. Carlos Montes por aportar su
ayuda y conocimiento siempre que lo requeríamos.
Leonardo Fuenmayor
v
AGRADECIMIENTOS
Primeramente quiero agradecer a mi madre Laury por haberme
apoyado y por haberme ayudado a llegar hasta este punto de mi vida.
Agradezco a mi abuela María por sus constantes cuidados y
afectos que he recibido de ella.
S
O
D
A mi hermano Luis por haberme apoyado y dadoA
animo en el
V
R
transcurso de mi carrera universitaria.
SE
E
R
S
O
H
Cpor haberme dado ánimo para seguir adelante,
E
A mi novia
Bárbara
R
DE
por motivarme a ser una mejor persona y por estar siempre conmigo
cuando la he necesitado.
A mis amigos Leonardo Fuenmayor, Andrés Ortega, María Grant,
Lascario Pacheco, John Jordan, Alexander Gamero,Janco Boscan y Luis
Turcio por todos los momentos que compartimos y por estar allí conmigo
en el sitio de la universidad que conocíamos como “Lugar Feliz”.
A mis profesores de la Universidad Rafael Urdaneta Jubert Pérez, Nerio
Villalobos, Genyelber Acosta y Carlos Montes por su apoyo y los
conocimientos que me dieron, los cuales me permitirán avanzar en mi
carrera profesional; y a mi tutor de tesis Rainier Araujo que con sus
incesantes críticas me han permitido mejorarme como profesional.
Carlos Sotolongo
vi
INDICE DE GENERAL
pág.
DEDICATORIA………………………………………………..…...iii
S
O
D
VA
AGRADECIMIENTOS..……………………………………….…...v
ER
S
E
R
RESUMEN..………………………………………………………..xii
S
O
H
C
E
ABSTRACT..………………….…………………………………...xiii
DER
ÍNDICE GENERAL…………………………………………….…..vii
INTRODUCIÓN………………………………………....………….1
1. CAPÍTULO I.EL PROBLEMA…………………………….…...2
1.1. Planteamiento el problema……….……….…………… 2
1.2. Formulación del problema…….……….......……..…... 9
1.3. Objetivos de la investigación .…..………………….... 9
1.3.1. Objetivos Generales ……………………………..… 9
1.3.2. Objetivos Específicos …………………….……….... 9
1.4. Justificación ..………………….….……………...…… 10
1.5. Delimitación……………..…………………….……..... 11
1.5.1. Delimitación temporal …………..............………….11
1.5.2. Delimitación espacial ………..……………...………11
1.5.3. Delimitación científica ……………………………....12
2. CAPÍTULO II. MARCO TEÓRICO ….………….………..….13
2.1. Antecedentes…………………….……………………...13
2.2. Bases Teóricas …………..….…………………….…...16
vii
2.2.1. Unity ……..………………….…….….……..…….....16
2.2.1.1. Introducción…………………....…………….. 16
2.2.1.2. Plataformas .………………….………….…... 17
2.2.1.3. Licencias …………………………................ 18
2.2.1.4. Editor…....………………………………...…. 18
2.2.1.4.1. Ventanas……………….…….…..……. 19
S
O
D
A
V
2.2.1.4.1.2. Ventana de juego……….…..….....
20
R
E
S
E
R
2.2.1.4.1.3. Ventana
de jerarquía ……...……... 22
S
O
HVentana
C
2.2.1.4.1.4.
de proyecto ….…...…..… 22
E
R
E
D
2.2.1.4.1.1. Ventana de escena………………...19
2.2.1.4.1.5. Ventana de inspección …..………. 23
2.2.1.4.2. Escenas ..…………..……………….…. 24
2.2.1.4.3. Objetos de juego ………….………….. 24
2.2.1.4.3.1. GameObjectsvacios ..…….………. 25
2.2.1.4.3.2. Camara …….…………………..…...25
2.2.1.4.3.3. Figuras geométricas…………….... 27
2.2.1.4.3.4. Textos………..…………………….. 27
2.2.1.4.3.5. Luces.……………………..……….. 28
2.2.1.4.3.6. Sistemas de partículas…………... 28
2.2.1.4.4. Componentes ..………………………. 29
2.2.1.4.4.1. Transforms………….……………... 29
2.2.1.4.4.2. Rigid Body ………...………………. 30
2.2.1.4.4.3. Mesh Filter ………………………….30
2.2.1.4.4.4. Mesh Renderer …..………...………31
2.2.1.4.4.5. Scripts…………………..…………...31
2.2.1.4.4.6. Meshes ….…....…………….....…...32
2.2.1.4.4.7. Prefabs .……………………...…… 32
2.2.2. Photon Server………………...……………………. 32
viii
2.2.2.1. CaracterísticasPrincipales …..….......….…...33
2.2.2.2. Exit Games Cloud….……….……….………. 34
2.2.2.3. Photon Server SDK ………………….……… 34
2.2.3. Grid Framework ………………………………...… 35
2.2.4. Unity UI 4.6 ……..……………………………….…. 35
2.2.4.1. Características …………………………........ 36
S
O
D
A
V
2.2.6. Angular JS……………………………………..……..38
R
E
S
E
R
2.3. Lenguajes de programación
a utilizar……………..….40
S
O
CH
2.3.1. C#R
.......................................................................
40
E
E
D
2.3.2. Javascript ............................................................. 40
2.2.5. Postgre SQL………………………………………….37
2.3.3. PHP....................................................................... 41
2.3.4. SQL ...................................................................... 42
2.4. Videojuegos y sus elementos ................................... 42
2.4.1. Videojuego ........................................................... 42
2.4.2. Genero de videojuegos ........................................ 44
2.4.3. Sprites ................................................................. 45
2.4.4. Texturas .............................................................. 45
2.4.5. Soundtracks …......................................................46
2.4.6. Historia ................................................................ 46
2.4.7. UI......................................................................... 46
2.4.8. Jugabilidad ........................................................... 47
2.5. UML .......................................................................... 50
2.5.1. Diagrama entidad relación.....................................50
2.5.2. Diagrama de clases ............................................. 51
2.5.3. Diagrama de casos de uso .................................. 51
2.5.4. Diagrama de componentes .................................. 52
2.6. Pruebas de software ................................................. 53
ix
2.6.1. Prueba de estrés................................................. 53
2.6.2. Beta Testing ....................................................... 54
2.7. Tabla de variables ....................................................55
3. CAPÍTULO III. MARCO METODOLÓGICO…………....….56
3.1. Tipo de Investigación…………….......………………..56
S
O
D
A
V
3.3. Técnica e instrumentos de recolección
de
datos…...58
R
E
S
E
R
3.3.1. Revisión documental………………………….....…58
S
O
H
C directa…………………………...……59
3.3.2. Observación
E
R
DE
3.3.3. Instrumentos……….….………...………………..…59
3.2. Diseño de Investigación………………..……………...56
3.3.4. Cuadernos de notas ……………….……………… 59
3.4. Unidad de análisis ………………………….………… 59
3.5. Fases del proyecto ……………………………….. …. 60
4. CAPÍTULO IV. ANÁLISIS DE LOS RESULTADOS ……....62
4.1. Análisis de los Requerimientos Básicos….……...…..62
4.1.1. Requerimientos de hardware………………….……62
4.1.2. Requerimientos de software ……..…………….…..63
4.2. Requerimientos de diseño……………..…....…..…….63
4.3. Modelado de datos………………………..………..…..64
4.3.1. Casos de uso ………………………………..…...… 65
4.3.2. Modelo de datos…………….……………..…...……68
4.3.3. Entidad relación……………………………….....…..69
4.3.4. Diagrama de despliegue……………………….……75
4.3.5. Diagrama de clases ………………….….............…77
4.4. Diseño y esquematización de los aspectos visuales.89
4.4.1. Diseño de la aplicación web……..……………...…89
x
4.4.2. Diseño de las interfaces del juego……..…….....…94
4.4.3. Diseño de los models de las unidades ………….. 98
4.4.4. Diseño de los ambientes de juego ………….....… 99
4.4.5. Diseño de los efectos especiales del juego…..…109
4.5. Codificación…………………………….........………..110
4.5.1. Codificación del servidor del juego ........……...…111
S
O
D
A
V
4.5.3. Codificación del juego…………………………......121
R
E
S
E
R
4.6. Evaluación del sistema……………………………….132
S
O
H
Caceptación…………………………...…132
4.6.1. Prueba
de
E
R
E
D
4.6.1.1. Diseño de la prueba de aceptación ..…..…133
4.5.2. Codificación de la aplicación web……………......112
4.6.1.2. Resultado de la prueba de aceptación ….. 134
4.6.2. Prueba de estrés…………………………….....….139
4.6.2.1. Resultados de la prueba de estrés…….....140
CONCLUSIONES……………………………….….........……..142
RECOMENDACIONES…………………….…………..............144
REFERENCIAS BIBLIOGRÁFICAS ….……………...……….145
xi
Fuenmayor Rincón Leonardo José, Sotolongo García Carlos Daniel,
“Juego de estrategia por turnos con capacidad multijugador
utilizando el motor gráfico Unity”, Universidad Rafael Urdaneta,
Facultad de Ingeniería de Computación. Trabajo especial de Grado,
Maracaibo Abril, 2015.
R
SE
E
R
S
RESUMEN
S
O
D
VA
HO
C
E
juego de estrategia
ER por turnos con capacidad multijugador utilizando el
D
motor gráfico Unity. La investigación realizada fue de tipo proyectiva,
La presente investigación se realizó con el objetivo de desarrollar un
definida según su diseño como tipo no experimental descriptivo. Se utilizó
la observación directa en conjunto con la recopilación de elementos
documentales para obtener la información necesaria para poder realizar el
juego. Este juego se desarrolló implementando la metodología Scrum, la
cual consiste en trabajar por módulos y realizarlos en varias iteraciones
de alrededor de 2 semanas cada uno. Se utilizó PHP como lenguaje de
servidor, se usó HTML y Javascript para el cliente junto al framework de
Angular; y se utilizó C# para el desarrollo del juego. Para el manejo de
base de datos se utilizó Postgres SQL. Finalmente se logró desarrollar el
juego de estrategia por turnos con capacidad multijugador utilizando el
motor gráfico Unity, que permite a los jugadores gestionar sus cuentas a
través de una aplicación web para luego entrar al juego y poder jugar con
otros jugadores a través de internet.
Palabras claves: Unity, Aplicación web, Juego web, Multijugador.
xii
Fuenmayor Rincón Leonardo José, Sotolongo García Carlos Daniel,
“Multiplayer turnbased strategy game develoved using Unity Engine”,
Universidad Rafael Urdaneta, Facultad de Ingeniería de Computación.
Degree Thesis, Maracaibo April, 2015.
S
O
D
VA
R
E
S
E
This research was conducted with R
the objective of developing a
S
HOgame using Unity Engine. The research
Multiplayer turn based C
strategy
E
ER type, defined according to its design as the type not
was of the
Dprojective
ABSTRACT
experimental and descriptive. Direct observation was used in conjunction
with the collection of the necessary documents to develop the game. The
game was developed to implement the methodology Scrum, which consist
on working on modules and developing each module in different iterations
that last around two weeks. To develop the game, PHP was used as the
server language, the client of the application used HTML and Javascript,
alongside with the Angular Framework, and for the game itself C# was
used to develop it. For the management of the database, Postgres SQL
was implemented. Finally, the development of the Multiplayer turn based
strategy game using Unity Engine was successful, allowing players to
manage their in-game accounts using a web application so they could play
with other players online.
Key words: Unity, Web application Web game, multiplayer.
xiii
4
INTRODUCCIÓN
En la industria del ocio y el entretenimiento audiovisual e interactivo
los videojuegos ocupan un gran lugar, abarcando campos como la
música, el diseño y la programación. Los videojuegos han avanzado
S
O
D
VA
mucho desde sus inicios hasta nuestros días, presentándose en una gran
Rha
variedad de formas, con diferentes historias y mecánicas de juego.
SE
E
R
S
HO
C
E
y rayas en una
pantalla verde, hasta presentar modelos de videojuegos
ER
D
en tercera dimensión (3D) con apariencias que en ocasiones se
La
industria
de
los
videojuegos
evolucionado
enormemente, pasando de videojuegos donde solo se manejaban puntos
confunden con la realidad. En el mercado se encuentra mucha demanda
de algunos géneros de videojuegos, como por ejemplo los llamados
“shooters” en primera persona, en tercera persona y los juegos de
aventura.
Pero géneros como los juegos de puzzles, juegos de plataforma o
juegos de estrategia no son tan buscados y por ello no se desarrollan con
mucha frecuencia. Inclusive, las plataformas a las cuales se dirigen dichos
juegos son únicamente dirigidos a consolas de videojuegos o como
juegos nativos para Windows, sin considerar los juegos para los browsers.
Esta investigación busca crear un juego de estrategia por turnos, el
cual se pueda jugar en browsers, con la finalidad de dar una opción a los
jugadores que deseen incursionar en juegos de este género, y que se
encuentre en una plataforma que esté al alcance de muchas más
personas, sin requerir de grandes inversiones en equipos adicionales.
5
CAPITULO I
EL PROBLEMA
1.1. PLANTEAMIENTO DEL PROBLEMA
S
O
D
VA
ER
S
E
R
niveles de poder de procesamiento
para
diversas actividades, programas
S
O
de cálculo, programas
de H
diseño, navegación web, diversas formas de
C
E
R
entrenamiento
DEy demás beneficios. Además de estos beneficios, el
La creación de las computadoras ha traído unas serie de beneficios
para los seres humanos, entre estos beneficios encontramos grandes
hombre ha sido capaz de encontrar formas de entretenerse y divertirse
utilizando las computadoras; gracias a las imágenes, audio, video, internet
y la integración de todos estos elementos han logrado que las
computadoras sean equipos de alta funcionabilidad y capaces de generar
entretenimiento de diferentes maneras.
Con la proliferación tecnológica de las décadas de los 70’s, 80’s y
90’s surgieron en varios países los equipos llamados Arcádes (Belli y
López, 2008), estos equipos eran máquinas las cuales permitían al
usuario jugar el juego predeterminado instalado en dicho equipo. Para
esto, se requería introducir monedas para que el usuario pudiese jugar, y
para poder interactuar con el juego se tenían una serie de botones y
palancas que se utilizarían para mover al personaje e interactuar con su
entorno. Estos equipos generalmente se encontraban en establecimientos
denominados “Arcádes”, llamados así por estar compuestos de equipos
con el mismo nombre,
en estos establecimientos tenían una gran
cantidad de Arcádes cada uno con un juego diferente, con los cuales cada
cliente podía escoger el juego de su agrado y colocando monedas podría
jugar e él.
2
3
Con la invención de unidades de juegos caseras como fueron el
Atari, el NES (Nintendo Entertainment System), SEGA, entre otros, se
estableció un antes y un después en la relación de las personas con los
videojuegos, al pasar estos sistemas de entretenimiento que se
encontraban en lugares específicos a la comodidad del hogar. Posterior a
esto, con el paso de los años se ha visto un gran cambio en estos
sistemas, al verse mejoradas las gráficas, la jugabilidad y las
funcionabilidades dentro de los videojuegos.
S
O
D
VA
R
SE
E
R
S
HO
C
E
R cualquier plataforma electrónica y la participación
computadora,E
usando
D
de uno o varios jugadores en un entorno físico o de red.” Se utilizará la
Usando la definición de Frassca (2001 p.4) se puede definir un
videojuego como “Cualquier forma de software de entretenimiento por
definición presentada anteriormente como base para definir lo que es un
videojuego. Un videojuego es un software dirigido al entretenimiento, con
el cual uno o más jugadores pueden interactuar entre sí a través de un
entorno físico o de red, bajo una serie de reglas para completar uno o
más objetivos.
Cada juego posee una mecánica la cual dicta el comportamiento
del juego y la forma en la cual los jugadores podrán interactuar entre ellos
y con el sistema. Tomando lo que dicen González, Padilla, Gutiérrez, y
Cabrera, (s.f. p.4) sobre las mecánicas de un videojuego o Gameplay:
“La mecánica de un videojuego es la parte más importante, pues
está formado por el conjunto de elementos que caracterizan y
diferencian un juego de otro. Se concretiza el género del
videojuego (arcade, plataformas, simulación, rol, etc.); las reglas,
los objetivos a conseguir y la forma de interactuar para lograrlos a
lo largo del videojuego. Debe contener los elementos para reflejar
4
qué se quiere contar y cómo se quiere contar (storyline y
storytelling).”
Ahora, el género de un videojuego designa un conjunto de juegos
que poseen una serie de elementos comunes. A lo largo de la historia de
los videojuegos aquellos elementos que han compartido varios juegos han
servido para clasificar como un género a aquellos que les han seguido, de
S
O
D
VA
la misma manera que ha pasado con la música o el cine.
R
SE
E
R
S
HO
C
E
jugador y la máquina,
ER la ambientación y su sistema de juego (Gameplay),
D
siendo este último el criterio más habitual a tener en cuenta. Entre los
Los videojuegos se pueden clasificar como un género u otro
dependiendo de su representación gráfica, el tipo de interacción entre el
géneros de juegos que existen podemos resaltar: Los juegos de pelea,
bélicos, carreras, deportes, fiestas, intelectuales, Sandbox, aventura, RPG
(Role Playing Game), RTS (Real Time Strategy), plataformas, estrategia
por turnos, entre otros.
En la actualidad se observa un marcado incremento en el
desarrollo de juegos bélicos. Este tipo de juegos se caracterizan por
mostrar conflictos modernos en los cuales usando armas de fuego,
vehículos
y
armas
modernas
(misiles
controlados
remotamente,
explosivos de detonación remota, cámaras espías, entre otros) deben de
vencer a sus oponentes.
Considerando la definición de Shooter dada por Belli y López (2008 P.10)
se tiene que:
“Videojuegos
de
disparos o Shooters como
un
género
que
engloban un amplio número de subgéneros que tienen la
característica común de permitir controlar un personaje que, por
norma general, dispone de un arma (mayoritariamente de fuego)
5
que puede ser disparada a voluntad. Pertenecen al género de
acción.”
Los juegos del género Shooter se clasifican de dos tipos:
En primer lugar están, los juegos en primera persona, en estos se
controla a un soldado, se interactúa con
el entorno y se observa el
S
O
D
Aambiente se
de tercera persona son aquellos, en los que la interacción
del
V
R
SalEmismo y su entorno se
da utilizando un personaje pero la forma
de
ver
E
R
S
O
da con una vista “sobre el hombro”.
H
C
E
R
E
D
El inmenso auge del género Shooter ha conllevado a que la
ambiente a través de los ojos del personaje; también existen los shooter
orientación de una gran cantidad de desarrolladores se enfoque en una
misma línea temática y en consecuencia que se hayan desligado de una
amplia variedad de géneros. Esto se puede observar en las cifras de
ventas de videojuegos Shooters, tomando como fuente las paginas
Statistic Brain y Wikipedia, se tiene que las cifras de una franquicia
famosa como Call of Duty se observan alrededor de 139.600.000
unidades vendidas; mientras que en los juegos de estrategia como Age of
Empires, se tienen una cantidad de 13.000.000 unidades vendidas.
Ahora, tomando en cuenta los juegos individualmente, el Shooter
más vendido en el mercado es Call Of Duty Modern Warfare III con
23.500.000 unidades vendidas, y el juego de estrategia más vendido ha
sido Final Fantasy VII con 10.000.000 unidades vendidas.
Con estas cifras, se observa que los juegos Shooters superan en
ventas a los juegos de estrategia, esto conlleva a que las empresas y
6
desarrolladores independientes se centralicen en el desarrollo del género
Shooter, lo cual puede producir la desaparición de distintos géneros.
Entre
estos
géneros
de
juegos
que
pueden
desaparecer
encontramos los juegos de estrategia, estos juegos suelen consistir en 2 o
más grupos o ejércitos que se enfrentan y tienen como objetivo vencer a
los otros contrincantes a través de una serie de estrategias de combate,
S
O
D
A etc.
situaciones dadas, manejo eficiente de las tropas V
y recursos,
R
E
S
También se pueden encontrar misiones
con
objetivos específicos como
E
R
S
O
controlar una zona determinada,
capturar un objeto en particular, proteger
H
C
E
R
objetos específicos
por
DE un tiempo determinado, entre otros.
como acciones en conjunto, utilizar unidades especializadas para
Existen 2 tipos de juegos de estrategia: juegos en tiempo real y por
turnos; Los juegos en tiempo real, como su nombre lo indica, son juegos
en los cuales cada acción que un jugador realice sucede en simultáneo
con todas las acciones de los demás jugadores, esto conlleva a que el
tiempo sea un factor determinante en la victoria dentro de estos juegos.
Es importante resaltar que un característica definitoria de este tipo de
juegos es que existen recursos en el medio ambiente los cuales deben
ser conseguidos, las victorias dependen muchas veces de los recursos
que los jugadores sean capaces de obtener y con estos se puede crear o
fabricar las unidades que se utilizaran en el combate, lo cual consume
tiempo. Entre estos juegos encontramos algunos títulos como Age of
Empires, Starcraft, Warcraft, entre otros.
Por otro lado existen los juegos de estrategia por turnos, este tipo
de juego se caracteriza por tener a cada grupo en regiones opuestas de
un mapa, y se enfrentan en la modalidad de turnos para realizar todos sus
7
movimientos y de esta manera lograr posicionar sus tropas para
desarrollar estrategias y finalmente conseguir el objetivo propuesto por la
modalidad de juego seleccionada.
Usualmente, estos juegos tienen sus propias reglas para los
movimientos y tipos de ataques para cada tipo de unidad que se puede
utilizar, adicional a esto, se diferencian de los juegos en tiempo real,
S
O
D
A caballería,
real, solo se tienen a las unidades de guerra (como soldados,
V
R
SEque permiten realizar,
entre otros) que se posean y la cantidadR
deE
ataques
S
O
el factor determinante de H
este
tipo de juegos está determinado por la
EClas unidades en las zonas estratégicas de los
R
capacidad deE
establecer
D
debido a que no hay recursos de la misma naturaleza que los de tiempo
mapas y la manipulación de este recurso. Entre estos juegos
encontramos algunos títulos como Fire Emblem, Final Fantasy Tactics, Yu
Yu Hakusho Tournament Tactics, entre otros.
De los juegos de estrategia, todas las habilidades necesarias para
poder tener éxito en este tipo de juego pueden ser extrapoladas a la vida
real, teniendo por ejemplo el manejo del tiempo y la debida administración
de los recursos como habilidades esenciales para lograr objetivos, tanto
en los juegos como en la vida real; y acostumbrarse a utilizar estas
habilidades constantemente permiten que una persona sea capaz de
realizarlas con mayor eficiencia en cualquier situación en la cual se
encuentre.
A nivel mundial, en materia de desarrollo de videojuegos se
encuentran compañías como Bioware, Bethesda, EA, Activison, e
inclusive se encuentran grupos de desarrollo independientes como
TeamMeat, Uber Entertaiment, entre otros. Además, existe un gran
número de universidades que incluyen estudios avanzados en esta área,
8
como son las universidades de, Carnegie, Mellon University, la New York
University, entre otras.
En Venezuela, en comparación, el desarrollo de videojuegos es un
campo el cual está muy poco explotado, así lo plantean Ciro Durán,
profesor de Desarrollo de Videojuegos en la Universidad Católica Andrés
Bello (UCAB), y Flavia Cassani, directora ejecutiva de Game Species, una
S
O
D
A2012), ellos
entrevista presentada para el nacional (Videojuegos en V
fuga
R
SE encontrar algunos
concuerdan que en Venezuela se
pueden
E
R
S
O
desarrolladores independientes
o grupos de no más de 8 personas; los
H
C debidamente orientados no constan con los
E
R
cuales a pesar
de
estar
E
D
recursos ni apoyo empresarial necesario para el desarrollo del proyecto,
empresa que creó el videojuego My Neighbor The Zombie (MNTZ) en una
lo cual conlleva a que estos sean abandonados por falta de recursos.
Afirman más adelante en el artículo, que Venezuela está siendo
utilizada como borrador para algunos de los proyectos de desarrollo y
cuando estas empresas o grupos se posicionan fuertemente dentro del
mercado venezolano los desarrolladores deciden migrar al exterior en
busca de mejores oportunidades, generando así un patrón que impide el
crecimiento del mercado de desarrollo de videojuegos en Venezuela y
poder posicionar el país dentro de las estadísticas internacionales.
Por las razones anteriormente expuestas, este trabajo de
investigación tiene el objetivo de incursionar en este campo poco
explorado en Venezuela como es el desarrollo de juegos para una
plataforma web, que permita una multiplataformidad y un fácil acceso al
mismo, así mismo se plantea que éste sirva como pivote para futuros
proyectos de desarrollo de este género de juegos y de esta manera lograr
9
una paridad en la cantidad de títulos de juegos presentes en la palestra
de juegos a nivel regional y mundial.
1.2. FORMULACIÓN DEL PROBLEMA:
Tomando en cuenta lo antes señalado, se planteó la siguiente
S
O
D
A capacidad
¿Cómo desarrollar un juego de estrategia por turnos
con
V
R
SE
multijugador utilizando el motor gráfico Unity?
E
R
S
O
H
CLA INVESTIGACIÓN
E
R
1.3. OBJETIVOS
DE
DE
interrogante:
1.3.1. OBJETIVOS GENERAL:
• Desarrollar un juego de estrategia por turnos con capacidad
multijugador utilizando el motor gráfico Unity.
1.3.2. OBJETIVOS ESPECÍFICOS:
•
Analizar los requerimientos funcionales para el desarrollo de un
juego de estrategia por turnos con capacidad multijugador
utilizando el motor gráfico Unity.
•
Realizar el Modelado de Datos para el desarrollo de un juego
de estrategia por turnos con capacidad multijugador utilizando
el motor gráfico Unity.
•
Diseñar y esquematizar los aspectos visuales para el desarrollo
de un juego de estrategia por turnos con capacidad multijugador
utilizando el motor gráfico Unity.
10
•
Realizar la codificación para el desarrollo de un juego de
estrategia por turnos con capacidad multijugador utilizando el
motor gráfico Unity.
•
Evaluar el funcionamiento del juego desarrollado.
1.4. JUSTIFICACIÓN
S
O
D
A factores
V
venezolano no se encuentra desarrollada ampliamente,
varios
R
SEla poca rentabilidad, la
E
han influido en esta situación, la falta de
inversión,
R
S
O
falta de formación académica
y el bajo nivel técnico, más sin embargo lo
H
C
E
R
atractivo D
de esta
E área es que actualmente ha escalado la demanda de los
Actualmente la producción de videojuegos en el territorio
juegos en distinta plataformas (escritorio, web y plataforma móvil), el norte
de este desarrollo se orienta a la interacción entre plataformas y entre
usuarios mediante unas interfaces, sencillas, intuitivas y visualmente
atractivas.
En el ámbito social, esta investigación está orientada a fomentar el
refuerzo de una cultura de desarrollo de videojuegos más amplia de la
que se tiene en este momento, si bien se sabe que en Venezuela existen
varios grupos y empresas pequeñas incursionando en el desarrollo de
videojuegos
no
existe
una
cultura
de
desarrollo
unificada
ni
esquematizada, en tal sentido este proyecto pretende incursionar dentro
de este ámbito y servir como base para futuros proyectos.
En materia económica, el desarrollo de juegos de alta calidad
resulta
bastante
costosa,
presentando
costos
aproximados
de
$200.000.000, sin embargo las ganancias que pueden generar estos
incrementan el interés de los desarrolladores, conformando así un
mercado que crese cada vez más en relación a la cantidad de títulos
disponibles sumando ganancias para las empresas desarrolladoras
11
aproximadamente en $500.000.000 por título, esta situación ha fomentado
la creación de un gran números de empresas especializadas en el
desarrollo de videojuegos.
En el desarrollo de este juego se utilizarán tecnologías de punta
como el motor gráfico UNITY para el diseño aspecto visual del juego y el
desarrollo de las distintas funcionalidades del mismo, en complemento a
S
O
D
A genera el
Photon Server, el primero posee toda la funcionalidad
que
V
R
SEque el segundo es el
tablero que representa el mapa del juego,
mientras
E
R
S
O
que presta los servicios de H
interconexión.
C
E
R
E
D
En el área teórico-metodológica este proyecto servirá de insumo
este se utilizaran adicionalmente dos frameworks, el Grid Framework y el
para futuros trabajos de investigación con objetivos similares y que se
encuentren enmarcados en el ámbito de la Ingeniería de software y el
desarrollo de sistemas web y móviles, y adicionalmente será una fuente
de consulta para interesados en el ámbito de las nuevas tecnologías
direccionadas a medios de entretenimiento.
1.5. DELIMITACIÓN DE LA INVESTIGACIÓN:
1.5.1. DELIMITACIÓN TEMPORAL:
La investigación se realizó entre el período de Junio - Abril
del 2015
1.5.2. DELIMITACIÓN ESPACIAL:
El desarrollo de esta investigación se realizó en la
Universidad Rafael Urdaneta, localizada en la Av. 2, el Milagro con
12
calla 86, entrada sur del parque Vereda del Lago, Maracaibo,
estado Zulia.
1.5.3. DELIMITACIÓN CIENTÍFICA:
El estudio se circunscribió al ámbito de la Ingeniería en
Computación, en las áreas de programación web, Ingeniería de
S
O
D
VA
Software y computación gráfica; específicamente en las sub-áreas
O
D
H
C
E
ER
R
SE
E
R
S
de programación de Videojuegos.
13
CAPITULO II
MARCO TEÓRICO
El marco teórico busca dar a conocer los basamentos teóricos
utilizados para diseñar y estructurar este proyecto de investigación y para
S
O
D
VA
orientar los resultados de la recolección de información. Es decir, se
R
establece las bases teóricas en las cuales apoya esta investigación.
2.1.
O
H
C
E
ER
ANTECEDENTES
D
SE
E
R
S
Al desarrollar un proyecto de investigación en el campo de la
informática es necesario considerar la rapidez con la cual avanzan las
tecnologías que se pueden utilizar para el desarrollo de aplicaciones, y las
distintas formas en las cuales se pueden utilizar para lograr producir, en el
caso de esta investigación, un videojuego.
Jason Dansie (2013) en su tesis “Game Development in
Unity” para alcanzar el título de ingeniero en Sistemas de Informacion en
la universidad Helsinki Metropolitan University of Applied Sciences,
describe como objetivo de su investigación examinar la forma en la cual
los videojuegos son diseñados y ver como las diferentes mecánicas de
juegos trabajan y la forma de aplicarlas en el desarrollo de un videojuego;
además de los efectos positivos y negativos de los videojuegos en las
niños y adultos. Esta tesis muestra cómo se hacen juegos en general
usando el motor Unity 3D, muestran el uso de la interfaz, la forma de
crear la lógica de varios juegos, la interacción con el juego y otras
mecánicas del juego.
13
14
En sus conclusiones dijeron que los juegos son capaces de afectar
a la persona cuando se tratan de juegos violetos, y que juegos sin
violencia calmaba a los jugadores, además de que este tipo de juegos son
preferidos por las audiencias de entre 4 a 8 años. Esta tesis permite como
aporte a la presente investigación una idea de la forma de crear juegos y
varias de las herramientas presentes en la herramienta Unity 3D, además
de permitir tener idea de lo que se puede hacer con esta herramienta y la
forma de hacerlo.
S
O
D
VA
R
SE
E
R
S
HO
C
E
tecnologías E
de R
telecomunicaciones en la Universidad Politécnica de
D
Catalunya, habla de una de las capacidades más importantes dentro de
En la tesis “Study of Multiplayer Features of Unity Applications” de
David López (2013) para alcanzar su maestría en Ingeniería y Manejo de
los juegos que se están desarrollando hoy en día es la capacidad
multijugador, la cual es la capacidad de 2 o más jugadores participando
en un mismo juego simultáneamente; y gracias al internet, esta capacidad
se ha podido aprovechar de manera extraordinaria.
Para el desarrollo de videojuegos con capacidad multijugador
utilizan Unity, y muestran las herramientas nativas de Unity para lograr la
interconexión entre varios jugadores resaltando las ventajas, desventajas
y limitaciones de dichas herramientas; para posteriormente programar
nuevas herramientas para lograr la interconexión para lograr realizar un
juego con capacidad multijugador. Esta tesis dio el aporte de mostrar el
funcionamiento de las capacidades multijugador de Unity, y con esta base
se decidió utilizar otra herramienta dentro de la tienda interna de plugins
de Unity y se escogió Photon Server para lograr la interconexión entre los
jugadores.
15
En la tesis de Igor Galochkin titulada “Implementation of a crossplatform strategy multiplayer game based on Unity 3D” para su título de
Ingeniero en Informatica en la Universidad Técnica de Múnich, describe
información acerca del desarrollo de las peculiaridades de los juegos de
estrategia y de juegos móviles desde el punto de vista del desarrollador, y
describen la arquitectura del juego y de las tecnologías a utilizar y los
retos técnicos para el desarrollo de un videojuego.
S
O
D
Ademo de un
Los objetivos de la tesis en si fue el desarrollo de
un
V
R
SE
juego de estrategia multijugador en tiempo
real
cross-platform utilizando
E
R
S
Unity 3D Pro. De esta tesisH
seO
tomó algunas de las ideas planteadas del
C
E
R de estrategia del lado del desarrollador y se tomaron
desarrollo deE
juegos
D
en cuenta la forma en la cual implementaron la interfaz de usuario dentro
del juego para permitir un mejor manejo de las unidades y del juego en sí.
Finalmente, en la tesis “Android Shooting Simulation Videogame”
realizada por Pham Dan Tien (2013) para su título de Ingeniero de
Computación en la Vietnam National University, en ella se realizó un
videojuego de simulación de vehículos de combate aéreos, en el cual con
la utilización de aviones tienen que destruir a los adversarios. Los
objetivos de esta tesis consistieron en lograr crear un videojuego para
Android el cual emulara lo más cercanamente posible el movimiento y las
acciones de aviones de batalla implementando una jugabilidad cómoda y
divertida para el usuario; además de integrar un sistema de mejoras y
variedad de escenarios para el juego.
Entre las conclusiones a las cuales llegaron se encuentran que
lograron crear un videojuego el cual era divertido y fácil de utilizar para los
usuarios, siendo esto respaldado por una serie de beta testers que
probaron el juego y dieron respuestas positivas al juego. Esta tesis utiliza
una serie de elementos en común el presente trabajo de investigación,
16
como es el sistema de unidades, clases, tipos de armas, diversidad de
mapas y algunas lógicas de juego que se pueden adaptar para el
funcionamiento del juego a realizar en esta investigación.
2.2. BASES TEÓRICAS
2.2.1. UNITY
2.2.1.1. INTRODUCCIÓN
S
O
D
VA
R
SE
E
R
S
HO
C
E
R esta herramienta ha sido creada por Unity
para diseñarEjuegos,
D
Technologies y que posee más de 1.7 millones de desarrolladores
Tomando como base lo descrito en la tesis de David López,
podemos definir a Unity como una poderosa herramienta de desarrollo
registrados; y algunos de ellos poseen una gran importancia en el campo
de los videojuegos como Microsoft, Ubisoft o Electronic Arts.
Unity está compuesto por dos partes principales, el editor y el
motor:
• Editor integrado de Unity: Permite el diseño y desarrollo de
la aplicación. Además, permite emular la aplicación en
distintas plataformas, de tal manera que pueda verse como
la aplicación se verá y trabajará en la plataforma objetivo; lo
cual permite que el proceso de debuging sea más eficiente.
• Motor Unity (Unity Engine): Incluye las funciones de
renderizado, luces, terrenos, sustancias, físicas (physics),
búsqueda de caminos (path finding), audio, programación y
conexiones.
17
2.2.1.2.
PLATAFORMAS
Unity es una herramienta multi-plataformas (cross platform), lo cual
es una de las características principales de esta herramienta, porque
permite la realización de una aplicación dirigida a varias plataformas, sin
la necesidad de hacer todo el proceso nuevamente. Las plataformas a las
cuales se pueden importar las aplicaciones realizadas son las siguientes
• MAC
O
H
C
E
R
E
Web Player
• Linux
•
D
R
SE
E
R
S
• PC
S
O
D
VA
• IOS
• Android
• Blackberry
• Windows Phone 8
• Sony Play Station 4
• Sony Play Station Vita
• Microsoft Xbox 360
• Microsoft Xbox One
Es necesario resaltar que aunque Unity permite crear juegos para
distintas plataformas, hay que tener en mente a que plataforma se desea
realizar un juego antes de su realización, debido a que partes del código
como la entrada de datos por parte del jugador (ya sea utilizando un
control de Xbox o de Play Station, el mouse y teclado de una
computadora, o la pantalla táctil de un Smart Phone) o posicionamiento
de elementos del UI (User Interface o Interfaz de Usuario), o recursos que
necesitará el juego para ser utilizado correctamente (capacidad del CPU,
18
memoria, etc) varían según las diversas plataformas, así que algunos
ajustes y consideraciones serán necesarias al momento de realizar los
juegos a otras plataformas.
2.2.1.3.
LICENCIAS
Unity posee 2 licencias principales, Unity (gratuita) y Unity Pro
S
O
D
Autilizará la
especiales, pero para propósitos de ésta investigación
se
V
R
SE
licencia gratuita de Unity.
E
R
S
O
H
C
E
R
2.2.1.4.
EDITOR
DE
(paga). La licencia Pro posee mayor funcionabilidad y elementos
El editor integrado es la herramienta que permite el desarrollo y diseño
del juego al permitir acceder a todos las opciones necesarias para las
configuraciones del juego. La primera imagen muestra una escena de un
juego de prueba realizado, enfocando al jugador.
Figura Nº 1: Editor principal
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
19
2.2.1.4.1. VENTANAS
El editor está dividido en 5 sub ventanas importantes, escene
(scene), juego (game), jerarquía (hierarchy), proyecto (proyect) e
inspector. La ventana principal puede ser alterada por los desarrolladores
(cambiar posición de las sub ventanas, sus tamaños, el tipo de sub
S
O
D
VA
ventana que deseen ver, etc) para que muestren únicamente lo que
O
H
C
E
ER
R
SE
E
R
S
deseen observar.
2.2.1.4.1.1. VENTANA DE ESCENA (SCENE WINDOW)
D
Esta ventana representa el ambiente 2D o 3D (según como lo
desee el desarrollador) donde todos los objetos de juego (Game Objects)
se encuentran en una escena en particular. Para navegar a través de la
escena, es posible hacerlo gracias a los 4 botones de la barra de
herramientas o usando sus respectivos atajos:
• Mano (Hand Tool) ‘Tecla Q’: Cuando esto esta seleccionado
es possible hacer click en la Scene Window y arrastrar el
mouse para mover la vsta actual de la escena.
• Mover (Move) ‘Tecla W’: Permite mover los Game Objects
seleccionados y arrastrarlos por la Scene Window.
• Rotar (Rotate) ‘Tecla E’: Permite rotar los Game Objetcs
seleccionados arrastrando el mouse por la Scene Window.
• Escalar (Scale) ‘tecla R’: Cambia la escala de los Game
Objects seleccionados al arrastrar el mouse por la Scene
Window.
La barra de herramientas con los botones para las acciones
explicadas anteriormente es la siguiente:
20
Figura Nº 2: Barra de herramientas de tipo de selección
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
2.2.1.4.1.2. VENTANA DE JUEGO (GAME WINDOW)
La ventana Game Window muestra la aplicación corriendo cuando
S
O
D
A sin la
se puede probar distintas partes del juego durante el V
desarrollo
R
E que se puede probar
Ssino
necesidad de hacer una compilación del
juego,
E
R
S Además, se puede utilizar la
O
partes individuales del juego
directamente.
H
Ca la Game Window para realizar diferentes
E
R
consola integrada
junto
E
D
pruebas y arreglar errores.
la opción “Play Mode” (modo de juego) esta activada. Durante este modo,
En esta imagen se muestra la Game Window y la consola en plena
ejecución de un juego:
21
Figura Nº 3: Game Window en ejecución
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
La barra donde se activa el play mode es la siguiente:
S
O
D
VA
R
SE
E
R
S
HO
C
E
2.2.1.4.1.3.
ER VENTANA DE JERARQUÍA (HIERARCHY
D
Figura Nº 4: Botones para activar el juego
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
WINDOW)
En esta ventana, se muestra un listado de todos los Game Objects
en una escena específica. Los objetos hijos se muestran en un orden
jerárquico de los padres, y los objetos deshabilitados se muestran con
letras de color gris. Esto se puede observar en la siguiente imagen:
Figura Nº 5: Jerarquía de GameObjects en la escena.
22
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
2.2.1.4.1.4. VENTANA
DE
PROYECTO
(PROYECT
WINDOW)
Esta ventana muestra un listado de todos los recursos utilizados en
el proyecto. Todos estos recursos se encuentran en una carpeta llama
S
O
D
A
crear carpetas y algunos objetos haciendo click derecho
y eligiendo la
V
R
S
opción deseada. Todo cambio hecho en
estaEventana se realizará
E
R
S
también el directorio de Unity.
O
H
C se muestra una Proyect Window de prueba:
E
En la siguiente
imagen
R
DE
Assets en el directorio de Unity. Dentro del Proyect Window se pueden
Figura Nº 6: Carpeta assets con todos los props del juego.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
23
2.2.1.4.1.5. VENTANA
DE
INSPECCIÓN
(INSPECTOR
WINDOW).
Toda la información referente a algún Game Object en específico
se muestra en esta ventana, de la cual la información que normalmente
se muestra es la siguiente:
S
O
D
VA
• Un Checkbox que indica si el Game Object está activado o
R
E
S
E
• El nombre del Game Object
R
S
• Un Checkbox
queO
indica si el Game Object es estático o no.
H
C
E
R
• E
El tag del game object seleccionado (por defecto, el objeto
D
no.
es “untagged”).
• La capa del objeto seleccionado (por defecto, el objeto está
en la capa “Default”).
Además de esto, el “inspector” muestra una lista de todos los
componentes adicionales que posea el Game Object, todos estos son los
que le dan la funcionabilidad dentro del juego.
2.2.1.4.2. ESCENAS (SCENES)
Las escenas contienen todos los Game Objects de un nivel del
juego, cada nivel puede tener diferentes ambientes y objetos asociados
dentro de él. Las escenas son útiles porque permiten construir el juego en
diferentes etapas, lo cual es una buena manera de mantener organizado
el juego y así no sobrecargar el juego con elementos que no se estén
utilizando.
2.2.1.4.3. OBJETOS DE JUEGO (GAME OBJECTS)
24
Los Game Objects son contenedores los cuales poseen diferentes
funcionabilidades dentro de ellos. Cada una de estas funcionabilidades es
dada por un componente; por ende un Game Object es un objeto que
tiene componentes que definen el comportamiento del objeto. Cada objeto
que existe en una escena es un Game Object. Ademas de los
componentes, cada Game Object en la escena posee un tag, una capa
(layer), y un nombre asociado, como también posee un indicador si el
objeto es estático o si está habilitado o deshabilitado.
S
O
D
VA
ER
S
E
utilizada para identificar diferentes S
tiposR
de Game Objects.
O
H
C
E
R
E son identificadores asociados a un Game Object que la
Dlayers
Los
Un tag es una palabra clave asociada al Gama Object, la cual es
cámara utilizará para filtrar que objetos va a renderizar.
El atributo estático de un Game Object está relacionado con el
occlusion culling (oclusión selectiva). Un objeto de ser estático otros
objetos detrás de él no serán renderizados porque el jugador no podrá
verlos.
Unity posee algunos Game Objects por defecto con algunos
componentes adjuntados a ellos para ser usados de inmediato por los
desarrolladores. Los tipos de Game Objects más utilizados son las
cámaras, luces, sistemas de partículas, planos (o terrenos) y algunas
figuras geométricas como cubos y esferas.
2.2.1.4.3.1. GAME OBJECTS VACIOS
Este es el tipo más básico de Game Object. Un Game Object no
posee ningún componente adjunto aparte del componente “Transform”, el
cual todos los Game Objects deben de tener. Algunos scripts se le
pueden adjuntar a estos objetos, con estos scripts que contienen código
podrán ser ejecutados independientemente del comportamiento del Game
Object.
25
2.2.1.4.3.2. CÁMARA (CAMERA)
El Game Object cámara captura una porción del mundo 3D (o 2D)
del juego. Esto es lo que usuario verá cuando esté en el juego. Cuando se
selecciona una cámara en la ventana del editor de jerarquía, aparece una
ventana adicional, llamada "Vista previa de la cámara" (Camera Preview),
S
O
D
Ase muestra
ese instante de tiempo. De hecho, en la Game Window, lo
que
V
R
SE
es lo que las cámaras están capturando.
E
R
S
O
H
C importante de los Game Object Camera es el
E
R
El componente
más
DE
mostrando al desarrollador una imagen del mundo que es capturado en
componente llamado “Camera”, este componente es el que le da la
funcionabilidad de cámara como tal. Por medio de este componente es
que es posible definir que atributos son el fondo, definir el campo de
visión de la cámara, cuales capas (layers) serán renderizadas, etc,
No hay un límite definido de cámaras las cuales pueden estar
ubicadas
en
una
escena,
pero
es
necesario
tener
algunas
consideraciones antes de implementar varias cámaras:
• Solo debe de haber un “Audio Listener” por escena. Los
Audio Listeners son un componente que viene por defecto
con cada cámara que es introducida en una escena, actúa
como un micrófono que captura todos los sonidos
producidos en una escena y los reproduce utilizando los
speakers.
Estos componentes deben de ser removidos de las cámaras
adicionales que sean introducidas.
26
• El componente “Camera” posee un atributo llamado
“Normalized view port rect” el cual define cual porción de la
cámara, en unidades normalizadas, en que cámara será
dibujado lo que se está viendo. Es necesario distribuir estos
puertos de rectángulo de manera tal de que no se solapen
las imágenes que se estén mostrando
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
2.2.1.4.3.3. FIGURAS GEOMÉTRICAS
Unity posee unos Game Objects por defecto que son unas
figuras geométricas las cuales pueden ser agregadas en una
escena, como son cilindros, esferas, cubos, cápsulas y planos.
Cada uno de estas figuras posee 3 componentes, un Mesh
Renderer, un Mesh Filter y un Collider.
2.2.1.4.3.4. TEXTO
Los textos son Game Objects que contienen representaciones
gráficas de una cadena de texto. Existen dos tipos de textos: "Texto GUI"
(GUI Text) y "Texto 3D" (3D Text).
El "GUI Text" muestra un texto en la pantalla. Este texto será
siempre perpendicular a la pantalla. Se une al componente "GUIText" que
permite, entre otras opciones, escribir el texto que aparecerá, y permite
seleccionar el tamaño de fuente y el tipo de letra.
27
Por otro lado, "texto 3D" muestra un texto en 3D que puede ser
rotado y escalado. Este objeto tiene dos componentes: "Texto de malla"
(Text Mesh) y "Malla Renderer" (Mesh Renderer). El primero de ellos es el
componente que genera el texto. Este componente define la cadena que
se va a procesar y la fuente que se utilizará. " Mesh Renderer " define el
material de la fuente. Así que un "texto 3D" puede tener transparencia,
puede utilizar una textura en los personajes y otras opciones visuales.
R
SE
E
R
S
HO
C
E
ER LUCES
D2.2.1.4.3.5.
S
O
D
VA
Las luces son Game Objects que iluminan los objetos en la escena.
Existen cuatro tipos de luces: luz direccional (directional light), punto de
luz (point light), luz del punto (spot light) y luz de área (area light) que
requiere licencia Unity Pro; por lo tanto, está fuera del alcance de este
proyecto.
Las directional lights se utilizan comúnmente para iluminar
escenarios al aire libre, porque simula el sol muy bien. Una luz de
dirección es una luz que viene desde el infinito e ilumina toda la escena a
través de un determinado ángulo.
Las Point Lights son un tipo de luz omnidireccional que se genera
en un punto y tiene un radio de acción determinado. Se utilizan para
simular objetos como bombillas.
Las Spot lights son una luz direccional generada en un cierto punto
y el halo de luz es en forma de cono. Permiten, por ejemplo, para simular
un coche frontal de luz o una linterna.
28
2.2.1.4.3.6. SISTEMA DE PARTÍCULAS
Sistema de partículas es un Game Object que genera partículas.
Las partículas son planos (o superficies) con una textura que se muestran
siempre perpendiculares a la pantalla. Un sistema de partículas puede
simular los efectos como una chispa, lluvia, humo, etc. Lo que permite
añadir efectos visuales sorprendentes al juego.
S
O
D
VA
R
SE
E
R
S
HO
C
E
número de partículas
ER y la vida útil de las partículas que se generarán,
D
tamaño, color, el material de la partícula, de forma que el sistema de
El componente "Sistema de partículas" (Particle System) define el
partículas lanzará las partículas (en forma de cono, esfera, forma lineal...)
y la velocidad de movimiento, entre otros. Algunas de estas propiedades
como color y tamaño se pueden cambiar con el tiempo.
2.2.1.4.4.
COMPONENTES
Los componentes definen el comportamiento de los Game Objects,
y están asociados a ellos. Un Game Object puede tener adjuntado más de
un componente, los componentes tienen propiedades que pueden ser
cambiadas programándolas o con el Inspector Window. Cuando
cualquiera de estas propiedades es cambiada, el comportamiento del
Game Object cambia también. Algunos de los componentes más
utilizados son los siguientes:
2.2.1.4.4.1.
TRANSFORM
El componente Transform es uno de los componentes más
importantes en Unity. Este componente es obligatorio en todos los Game
29
Objects, por lo tanto todos los objetos deben tenerlo conectado. Define la
posición, rotación y escala del objeto de juego. Unity utiliza dos tipos de
datos especiales para representar posiciones y rotaciones. Vector 3
representa una posición en el espacio (un punto) definido por tres
coordenadas (X, Y y Z) o una dirección. Por ejemplo, el Vector 3 (0, 0, 1)
es un vector de su dirección es la misma que el eje z. Los cuaternoides
representan la rotación de un objeto tiene, como cuántos grados ha girado
del eje Z, X y Y.
S
O
D
VA
R
SE
E
R
S
HO
C
E
Cuando
EunRcomponente del Cuerpo rígido (Rigid Body) se adjunta
D
a un objeto de juego, el juego objeto seguirá las leyes de la física, por lo
2.2.1.4.4.2.
RIGID BODY
que es sensible a diferentes fuerzas como la gravedad.
Por ejemplo, supongamos que una escena que tiene un plano
situado en origen y un cubo cuya posición inicial es de 1 metro sobre el
plano. Si el objeto juego cubo no tiene un componente “Rigid Body”
conectado, el cubo flotará en 1 m. Por otro lado, si el cubo tiene un "Rigid
Body", la fuerza de gravedad afectará al cubo, haciéndolo caer.
Este componente puede haber activado la opción de "cinemática"
(kinematic). Cuando esta opción está activada, el objeto será un cuerpo
rígido cinemático. Este tipo de Rigid Body no es afectado por cualquier
fuerza como la gravedad o colisiones. Algunos ejemplos de la utilización
de opción cinemática pueden ser los siguientes: un objeto cuya física es
controlada por un script, pero en ciertas situaciones debe seguir las leyes
de la física. Este comportamiento puede lograrse sólo por activar y
desactivar la propiedad cinemática. Otro ejemplo de utilización de
cinemática objeto puede ser un objeto que puede empujar a otros objetos.
30
2.2.1.4.4.3.
MESH FILTER
El componente Filtro de Malla (Mesh Filter) es un componente que
indica al Mesh Renderer cual Malla será renderizada. La Malla deber
estar localizada en algun lugar de la carpeta Assets del directorio de
Unity. Un cubo posee un componente Mesh Filter con una variable para
definir que el objeto será renderizado a un Cube Mesh (Malla de cubo), el
S
O
D
VA
cual es una Malla que gráficamente representa 8 vértices y 6 caras de un
R
SE
E
R
S
cubo.
HO
C
E
El componente
ER Renderizador de Malla (Mesh Renderer) es el
D
componente que toma la Malla del Mesh Fliter y la renderiza en la escena.
2.2.1.4.4.4.
MESH RENDERER
Este componente también indica si el objeto proyectará sombra cuando
una luz se proyecte sobre él.
2.2.1.4.4.5.
SCRIPTS
Este componente asocia un guión (Script) existente con un objeto
de juego. Un script es una pieza de código que proporciona cierto
comportamiento con el Game Object. Este código puede escribirse en los
lenguajes JavaScript, C# o Boo, y pueden utilizarse diferentes scripts
escritos en idiomas diferentes para el mismo objeto.
Es obligatorio que cada script adjunto a un objeto de juego
extienda la clase MonoBehaviour. Esta clase proporciona algunos
métodos especiales de Unity como Start y Update. Se llama Start cuando
el GameObject se crea en la escena y Update se llama en cada frame
durante la ejecución del juego.
31
Unity utiliza Mono framework como su framework
para los
comandos a realizar. Mono framework está definido por el equipo de
Mono como “Una implementación en software libre, multiplataforma de C#
y el CLR que es binariamente compatible con Microsoft.Net” Esta es una
característica muy interesante porque este framework está integrado en
Unity para que los desarrolladores puedan usar casi todas las clases de
extensiones tipo “.NET” en sus proyectos.
S
O
D
VA
R
SE
E
R
S
HO
C
E
Una Malla
ER(mesh) es un objeto 3D formado por triángulos que
D
tienen un material asociados a ellos. Un material define cual textura y cual
2.2.1.4.4.6.
MESHES
color es utilizado para renderizar.
Es importante notar que Unity no posee ninguna herramienta para
crear Mallas. Para lograr usarlos en una escena, las Mallas deben ser
creadas en aplicaciones destinadas al modelado de figuras 3D y luego
importarlas a Unity.
2.2.1.4.5. PREFABS
Los prefabricados (prefabs) son Game Objects especiales que
pueden ser reutilizados a lo largo de la aplicación, en distintas escenas.
Los prefabs pueden instanciarse para crear nuevos Game Objects en la
escena dinámicamente. Toda las instanciadas prefabricadas serán
exactamente los mismos objetos de juegos en el momento de la creación,
pero es posible modificar las características de cada uno a la vez. Así que
es posible obtener dos objetos de juegos diferentes que provienen del
mismo objeto prefabricado.
32
2.2.2. PHOTON SERVER
Photón Unity Network (PUN) es una solución alternativa de redes
para Unity, que tiene como objetivo fijar y extender la red incorporada de
Unity para el desarrollo de juegos en línea. Se hace uso de Photon que
llega a ser más fácil de usar que nunca. El código fuente completo está
disponible, así que puede este plugin se puede escalar para soportar
cualquier tipo de juego multijugador.
S
O
D
VA
R
SE
E
R
S
HO
C
E
estas funciones
ERde Unity deberán de sentirse como en casa. Un
D
convertidor automático ayudará a un proyecto red Unity a pasarse a un
La PhotonNetwork API se ve muy similar a solución de red
implementada originalmente en Unity, y los usuarios que han utilizado
puerto de Photon equivalente sin problemas. Los usuarios que no tienen
experiencia previa con redes usando Unity tendrán una experiencia fácil
a partir de usar photon.
De forma predeterminada, este plugin hace uso del servicio alojado
de "Exit Games Cloud", que corre Photon por ti. Y utilizando una ventana
de configuración, es posible registrarse (gratuitamente) en menos de un
minuto.
2.2.2.1.
CARACTERÍSTICAS PRINCIPALES
• API muy fácil de utilizar.
• Servidor disponible como servicio alojado (actualmente
gratuito).
• Parcialmente automática conversión de la red de Unity a
Photon Networking.
• El modo offline: permite volver a utilizar el código
multijugador en modos de juego singleplayer.
33
• Funcionamiento excepcional del Photón Servidor
• Carga equilibrada escalas de flujo de trabajo a través de
servidores (sin ningún esfuerzo extra).
• No P2P directo y no NAT necesarios.
2.2.2.2.
EXIT GAMES CLOUD
S
O
D
VA
R
E
S
E
El servicio de Exit Games Cloud
provee instancias de Photon
R
S
O por Exit Games, cuyo servicios
“hosteadas” y balanceadas
Hcontroladas
C
E
son gratuitos
DEparaRpruebas y para uso comercial su costo se acerca al de
otras páginas de host.
En el servicio, no se puede implementar una lógica de servidor
propia, en cambio, se hacen clientes autoritativos. Las aplicaciones están
separadas por un "Application ID" y la "Game Version" del cliente. Con
ello, los jugadores no chocaran con los otros desarrolladores o versiones
anteriores del juego.
Cuando se han importado los scripts del editor desde el Paquete
de Photon para red de Unity, se abrirá automáticamente una ventana de
configuración, en la cual se introduce la dirección de correo electrónico y
registro para la nube.
2.2.2.3.
Photon SERVER SDK
Como alternativa a para el servicio de alojamiento de Photon,
puede ejecutar su propio servidor y desarrollar encima de la lógica del
juego "Load Balancing". Esto da control total sobre la lógica del servidor.
34
Si se utiliza un Photon server propio, se debe de utilizar el asistente
de configuración para cambiar la configuración para él. Abrir en el Menú:
Ventana, Photon Unity Networking.
2.2.3. GRID FRAMEWORK
S
O
D
A
Grid Framework es una potente, pero fácil de usar
solución para
V
R
E
Sgrid. Ofreciendo nuevas
todas las necesidades que requeríanR
deE
un
Ses aplicar el componente de grid que
O
clases, todo lo que necesitas
hacer
H
EC
se desee enE
unR
game object, se establecen los valores al gusto del
D
usuario, y de esta manera se puede empezar a escribir la lógica del juego
sin preocuparse por las matemáticas subyacentes. No importa si se está
haciendo un juego de mesa, un juego de estrategia, un juego de puzzle,
un juego de estilo arcade o cualquier otro tipo de juego que necesita
precisión mecánica, el Grid Framework ayudará a configurar un juego y
escribir la lógica del juego de forma intuitiva.
La forma más simple de describir Gris framework sería llamarlo una
librería, que proporciona, con nuevas clases y nuevos componentes
completan con los inspectors, los cuales están listos para usar. También
sirve como una extensión de editor al proporcionarle un panel Alinear, lo
que le permite a la derecha de auto-snap objetos en el editor. Puede
establecer las propiedades de los nuevos componentes de la red en el
editor y utilizarlos en secuencias de comandos, al igual que cualquier otro
componente de la unidad.
35
2.2.4. UNITY UI 4.6
A partir de la salida de la versión 4.6 de Unity, se introdujo una
nueva forma de crear interfaces de usuario, además de poder crear las
interfaces a partir de código, ahora se pueden crear en el editor de Unity
de manera visual, cambiando su apariencia, animaciones, interacciones y
formas de aplicar dichas interfaces, siendo todas estas modificaciones en
S
O
D
A con
de creación de interfaces de usuario y permitiendo mayor
interacción
V
R
SE
el jugador.
E
R
S
O
H
C
E
R
2.2.4.1.
CARACTERÍSTICAS
DE
su mayor parte de manera visual. De ésta manera, acelerando el proceso
•
Integración completa con el “inspector”
•
No hace falta darle Play para ver los resultados
•
Lo que se ve en la Scene View es lo que se ve en la Game
View
•
Naturaleza modular basada en componentes: Permite fijar
comportamientos que se deseen a los widgets que se creen y
pueden hacer lo que el desarrollador desee sin necesidad de
mucho código.
•
Soporte completo para iOS/Android, Blackberry, Win8, WP8,
Flash
•
Posee un flexible sistema de eventos
•
Permite hacer complejos UIs que toman solamente 1 llamada
para dibujar.
•
Permite crear tus Atlas en el editor, deja actualizar y modificar
en cualquier momento, o importar un atlas del Texture Packer.
36
•
Soporte para diferentes tipos de iluminación.
•
Soporte para recortar los paneles con bordes duros o blandos,
dando así diferentes efectos a cada botón y menú que se cree.
•
Soporte para una mesa de tamaño flexible, permitiendo que los
widgets creados puedan automáticamente empujar a otros
fuera del camino para evitar que se solapen unos con otros.
S
O
D
VA
R
•
Soporte para idiomas orientales con IME Input.
•
Sistema de localización integrado.
•
•
O
H
C
E
ER
D
mouse y teclado.
SE
E
R
S
Soporte integrado para controles especiales (Xbox, PS) y
Gran cantidad de scripts integrados que permiten de cambiar el
color de un botón hasta arrastrar un objeto por la pantalla.
•
Sistema simple interpolación incorporada.
•
Limpio, corto, simple y ampliamente optimizado código C#.
•
No requiere recursos externos ni DLLs.
2.2.5. POSTGRE SQL
Según Regina Obe y Leo Hsu en su libro PostgreSQL: Up and
Running, definen PostgreSQL como un sistema de gestión de base de
datos relacional de código abierto que comenzó como un proyecto de
Berkeley, en la Universidad de California. Estaba originalmente bajo la
licencia BSD, pero ahora se llama PostgreSQL. Para todos los propósitos
y efectos, es con licencia BSD. Posee una larga historia, que casi se
remonta al principio de bases de datos relacionales. Este manejador de
base de datos tiene características de clase empresarial como funciones
SQL con ventanas, la capacidad de crear funciones de agregado y
37
también utiliza ventanas construct, tablas de expresiones comunes, tablas
de expresiones comunes recursivas, y esquemas de replicación.
De acuerdo con las investigaciones realizadas y teniendo como
base lo dicho por Korry Douglas y Susan Douglas, llegamos a definir a
PostgreSQL como un manejador de base de datos relacional de software
libre cliente/servidor. PostgreSQL ofrece una combinación única de
S
O
D
A todas las
comerciales como Sybase, Oracle y DB2. PostgreSQLV
ofrece
R
SE
características habituales de una baseR
de E
datos
relacional además unas
S
características únicas. PostgreSQL
HO ofrece herencia (para lectores de
C
E
orientada a objetos).
ER Con PostgreSQL, se puede agregar nuevos tipos de
D
datos fundamentales. PostgreSQL incluye soporte para tipos de datos
características que comparan a las principales bases de datos
geométricos tales como punto, segmento de línea, caja, polígono y el
círculo.
PostgreSQL utiliza estructuras indexación que hacen rápidamente
los tipos de datos geométricos. PostgreSQL fue construido alrededor de
una arquitectura cliente/servidor. Se puede construir aplicaciones para
cliente en varios lenguajes diferentes, incluyendo C#, C++, Java, Python,
Perl, entre otros. Del lado del servidor, PostgreSQL posee un poderoso
lenguaje procesal, PL/pgSQL.
2.2.6. ANGULAR JS
Según Adam Freeman en su libro Pro AngularJS, Angular es un
framework de JavaScript de código abierto, mantenido por Google, que
ayuda con la gestión de lo que se conoce como aplicaciones de una sola
página. Su objetivo es aumentar las aplicaciones basadas en navegador
con capacidad de Modelo Vista Controlador (MVC), en un esfuerzo para
hacer que el desarrollo y las pruebas sean más fáciles. La biblioteca lee el
38
HTML que contiene atributos de las etiquetas personalizadas adicionales,
entonces obedece a las directivas de los atributos personalizados, y une
las piezas de entrada o salida de la página a un modelo representado por
las variables estándar de JavaScript. Los valores de las variables de
JavaScript se pueden configurar manualmente, o recuperados de los
recursos JSON estáticas o dinámicas
S
O
D
A como un
dicho por Shyam Seshadri y Brad Green, definimos a AngularJS
V
R
SEde JavaScript para la
framework de tipo MVC (Model View R
Controller)
E
S
O
Web. AngularJS hace tanto
por nosotros que sólo tenemos que
H
C
E
R
enfocarnos en
nuestra
E aplicación principal y que AngularJS se ocupe de
D
todo lo demás.
A partir de nuestra investigación basándonos principalmente en lo
Angular permite aplicar prácticas de ingeniería de software
estándar, prácticas “tried-and-tested” tradicionalmente utilizadas del lado
del servidor en la programación del lado del cliente para acelerar el
desarrollo del frontend. Proporciona una estructura consistente y
escalable que hace más fácil desarrollar aplicaciones grandes y
complejas como parte de un equipo.
El concepto central detrás del marco AngularJS es el patrón de
arquitectura MVC. El patrón Model-View-Controller (o MVVM, acrónimo de
modelo-View-ViewModel, que es bastante similar) evolucionó como una
manera de separar las preocupaciones y las unidades lógicas en el
desarrollo de grandes aplicaciones. Da un punto de partida para decidir
dónde y cómo los desarrolladores para dividir las responsabilidades. El
patrón de arquitectura MVC divide una aplicación en tres partes
diferenciadas, modulares:
39
• El modelo es la fuerza impulsora de la aplicación. Esto es
generalmente
los
datos
detrás
de
la
aplicación,
generalmente traído desde el servidor. Cualquier interfaz de
usuario con los datos que el usuario ve se deriva del
modelo, o un subconjunto del modelo.
• El punto de vista es que ve el usuario interactúa con la
S
O
D
A
V
El controlador es la lógica y presentación
capa de negocio,
R
E y toma decisiones
Sdatos
E
las acciones que interpreta
como
R
S
O
como la manera
de
presentar el modelo, qué partes debe
H
C
E
R etc.
E
mostrar,
interfaz de usuario. Es dinámico y generado basado en el
modelo actual de la aplicación.
•
D
2.3. LENGUAJES DE PROGRAMACIÓN A UTILIZAR
2.3.1. C#
Según J. Ferguson, B. Patterson y J. Beres en su libro la biblia de
C#
definen
C#
como
un lenguaje
de
programación orientado
a
objetos desarrollado por el danés Anders Hejlsberg que diseño también
los lenguajes Turbo Pascal y Delphi, fue estandarizado por Microsoft
como parte de su plataforma.NET, su sintaxis básica deriva de C/C++ y
utiliza el modelo de objetos de la plataforma.NET el cual es similar al de
Java aunque incluye mejoras derivadas de otros lenguajes (entre ellos
Delphi). Aunque C# forma parte de la plataforma .NET, ésta es una API,
mientras que C# es un lenguaje de programación independiente diseñado
para generar programas sobre dicha plataforma. Ya existe un compilador
implementado que provee el marco Mono - DotGNU, el cual genera
programas para distintas plataformas como Windows, Unix, Android, iOS,
Windows Phone, Mac OS y GNU/Linux.
40
2.3.2. JAVASCRIPT
Según David Flanagan en su libro JavaScript: The Definitive Guide,
en su sexta edición, JavaScript es un lenguaje interpretado orientado a las
páginas web, con una sintaxis semejante a la del lenguaje Java, el
lenguaje fue inventado por Brendan Eich en la empresa Netscape
Communications, que es la que fabricó los primeros navegadores de
S
O
D
y operaciones en el marco de la aplicación cliente. TodosV
losA
navegadores
R
E
S en las páginas web.
modernos interpretan el código JavaScript
integrado
E
R
S
O
Para interactuar con una página
web se provee al lenguaje JavaScript de
H
CDocument Object Model (DOM).
E
R
una implementación
del
DE
Internet comerciales, se utiliza en páginas web HTML, para realizar tareas
2.3.3. PHP
Según Peter B. MacIntyre en su libro PHP: The Good Parts, PHP
es un lenguaje de programación de uso general de código del lado del
servidor originalmente diseñado para el desarrollo web de contenido
dinámico. Fue uno de los primeros lenguajes de programación del lado
del servidor que se podían incorporar directamente en el documento
HTML en lugar de llamar a un archivo externo que procese los datos, el
código es interpretado por un servidor web con un módulo de procesador
de PHP que genera la página Web resultante, se considera uno de los
lenguajes más flexibles, potentes y de alto rendimiento conocidos hasta el
día de hoy. Lo que ha atraído el interés de múltiples sitios con gran
demanda de tráfico como Facebook, para optar por PHP como tecnología
de servidor.
Fue
creado
originalmente
por
Rasmus
Lerdorf
en
1995.
Actualmente el lenguaje sigue siendo desarrollado con nuevas funciones
por el grupo PHP, este lenguaje forma parte del software libre publicado
41
bajo la licencia PHP, que es incompatible con la Licencia Pública General
de GNU debido a las restricciones del uso del término PHP.
2.3.4. SQL
Según Carme Martín Escofet en su libro El lenguaje SQL, el SQL
S
O
D
A
bases de datos relacionales. Es un lenguaje declarativo:
sólo hay que
V
R
E
indicar qué se quiere hacer. En cambio,R
enE
losS
lenguajes procedimentales
S
es necesario especificar cómo
HOhay que hacer cualquier acción sobre la
C
E
base de datos.
DEElRSQL es un lenguaje muy parecido al lenguaje natural;
es el lenguaje estándar ANSI/ISO de definición, manipulación y control de
concretamente, se parece al inglés, y es muy expresivo. Por estas
razones, y como lenguaje estándar, el SQL es un lenguaje con el que se
puede acceder a todos los sistemas relacionales comerciales.
2.4. VIDEOJUEGOS Y SUS ELEMENTOS
2.4.1. VIDEOJUEGO
Según la definición de Frassca, se puede definir un videojuego
como “Cualquier forma de software de entretenimiento por computadora,
usando cualquier plataforma electrónica y la participación de uno o varios
jugadores en un entorno físico o de red.”
Por otro lado, según Johan Huizinga, “un videojuego una actividad
frente a la vida "normal" como algo "no serio", pero al mismo tiempo
absorbe el jugador total e intensamente. Es una actividad conectada con
ningún interés material, y ningún beneficio puede ser adquirido por él.
Procede dentro de sus propios límites apropiados del tiempo y del espacio
según reglas fijas y de una manera ordenada. Promueve la formación de
42
agrupaciones sociales que tienden a rodearse de secretismo y a subrayar
su diferencia con el mundo común por disfraz u otros medios”.
Además, se tiene la definición de Jesper Juule, la cual
consideramos una de la más acertadas, la cual escribe los requerimientos
que para un videojuego pueda considerarse uno como tal, las cuales son
las siguientes:
S
O
D
A que ser
tienen
V
R
SE
E
R
S
1. Reglas definidas: Las reglas de juego
HO
C
E
discutir
ERsobre ellos cada vez que juegas
D
2. Requiere de esfuerzo por parte del jugador: es otra manera de
suficientemente bien definidos que puede ser programados en
un ordenador o suficientemente bien definidos que no tienes a
afirmar que los juegos son difíciles, o que los juegos contienen
un conflicto, o son "interactivos". Es una parte de las reglas de
la mayoría de juegos (juegos de azar) pueden influir en las
acciones de los jugadores el juego estado y resultado del juego.
La inversión de esfuerzo del jugador tiende a conducir a un
resultado, puesto que la inversión de energía en el juego hace
que el jugador sea (en parte) responsable del resultado.
3. Posee consecuencias negociables: En general, esto quiere
decir que cada acción debe producir de alguna manera una
consecuencia, ya sea tan pequeña como poner un objeto en el
inventario o tan grande destruir a un oponente y ganar una
partida.
4. Cantidad variada de acciones: Esta condición indica que las
acciones que puede tomar el jugador son variadas y no
limitadas a una simple acción, como por ejemplo en Ajedrez, en
el cual puedes mover diferentes piezas y cada tipo de pieza
posee un tipo de movimiento distintito de movimiento.
43
5. Resultados variados: En este caso, se refiere a que en un juego
tienen que haber diversos finales o formas de terminar el juego,
puede ser limitado a ganar o perder una partida; o puede ser
tan extenso como tener diversos finales a la historia de un
juego.
6. Los resultados afectan tu motivación: Esta última está
relacionada con la condición anterior, esta condición intenta
S
O
D
A
de afectar de alguna manera al jugador, ya sea
con alegría o
V
R
E
derrota al vencer o ser vencido
porS
un oponente, o algo más
E
R
S
O por el final de la historia de un
complejo como ser
Hconmovido
C
E
juego.
ER
D
explicar que todos los resultados del juego, deben de ser capaz
2.4.2. GÉNEROS DE VIDEOJUEGOS
Según Simone Belli y Christian López, el género de videojuego
designa un conjunto de juegos que poseen una serie de elementos
comunes. A lo largo de la historia de los videojuegos aquellos elementos
que han compartido varios juegos han servido para clasificar como un
género a aquellos que les han seguido, de la misma manera que ha
pasado con la música o el cine.
Los videojuegos se pueden clasificar como un género u otro
dependiendo de su representación gráfica, el tipo de interacción entre el
jugador y la máquina, la ambientación y su sistema de juego, siendo este
último el criterio más habitual a tener en cuenta.
Entre los diversos géneros de videojuegos se encuentran: Beat
them Up, Pelea, juegos de acción en primera persona, acción en tercera
persona, infiltración o Sneak, plataformas, simulación de combate,
arcade, deportes, carreras, agilidad mental, educación, aventura,
44
musicales, party games (juegos de fiesta), juegos On-Line, juegos de
estrategia en tiempo real (RTS Real Time Strategy) y finalmente juegos de
estrategia por turnos (TBS Turn Based Strategy).
2.4.3. SPRITES
S
O
D
A
canalización
de
V
Los sprites son mapas de bits en 2D que se dibujan directamente
la
R
E
transformaciones, iluminación o efectos.
Se S
suelen usar para mostrar
E
R
S
información como las barras
HdeOestado, el número de vidas o texto como
C
E
las puntuaciones.
ERAlgunos juegos, sobre todo los más antiguos, están
D
compuestos en su totalidad de sprites. Los sprites pueden ser estáticos o
en
un
destino
de
representación
sin
usar
dinámicos. Al hablar de sprite estático, nos referimos a un objeto que no
cambiará su posición durante el videojuego, por ejemplo la imagen de una
llama, piedra, etc. En cambio un sprite dinámico, es aquel que tendrá
algún tipo de movimiento, el cual puede ser realizado por el usuario o por
el computador, por ejemplo el sprite de un jugador o de los enemigos.
Representar un sprite en memoria puede ser realizado de
muchísimas formas, y puede depender mucho del gusto del programador
y su experiencia. Normalmente se almacenan sus atributos en una
estructura o clase.
2.4.4. TEXTURAS
Una textura es una imagen del tipo bitmap utilizada para cubrir la
superficie de un objeto virtual, ya sea tridimensional o bidimensional, con
un programa de gráficos especial. En profundidad, una textura es un
conjunto de primitivas o elementos denominados "texels" que se asimilan
a un conjunto contiguo de elementos (pixels en 2D) con alguna propiedad
45
tonal o regional. También existe la textura artística. Por textura se
entiende la estructura de la capa superficial de un material. La textura,
junto con el tono y la forma, transforman los motivos planos en imágenes
con fuerte sensación tridimensional.
2.4.5. SOUNDTRACKS
El soundtrack o banda sonora es la parte de sonido completa y el
S
O
D
A series
sonidos y música de un videojuego u obras como V
películas
R
SseEentiende como banda
animadas, etc, desde un punto de vistaR
musical,
E
S
O
sonora aquella música H
tanto
vocal como instrumental compuesta
C con la función de potenciar aquellas
E
R
expresamente
para
cumplir
E
D
emociones que las imágenes por sí solas no son capaces de expresar.
resultado de la edición de diferentes pistas de sonido, ya sean diálogos,
2.4.6. HISTORIA
La historia de un video juego es la forma en que se desenvolverán
los personajes del juego y la historia del mundo representado y como
avanza. Dependiendo del video juego se determina si posee historia o no.
2.4.7. UI
La UI (User Interface o Interfaz de Usuario) viene a ser aquella
manera en la cual el juego puede mostrar información relevante del juego
de manera visual sin que afecte el juego en si siendo estos algunas cosas
como estado del jugador (como salud, habilidades, dinero etc), un
minimapa mostrando la ubicación de lugares o personajes dentro del
juego, los menús del jugador (inventario, mapa, etc), entre otras cosas.
46
2.4.8. JUGABILIDAD
La jugabilidad se define como "el conjunto de propiedades
que describen la experiencia del jugador ante un sistema de juego
determinado, cuyo principal objetivo es divertir y entretener de
forma satisfactoria y creíble ya sea solo o en compañía de otros
jugadores, la definición de jugabilidad se asienta en el concepto de
S
O
D
A con
jugadores alcanzan metas específicas del V
videojuego
R
SE y especialmente
efectividad, eficiencia, flexibilidad
seguridad
E
R
S
O
satisfacción en un contexto
jugable de uso".
H
C
E
DER
Calidad en Uso. La Jugabilidad representa "el grado en el que
La jugabilidad poseen los siguientes atributos:
•
Satisfacción: Agrado o complacencia del jugador ante el
videojuego completo o en algunos aspectos concretos de éste,
como mecánicas, gráficos, sistema interactivo, historia, etc. La
satisfacción es un atributo con un alto grado de subjetividad, no
sólo por lo difícil de medir, sino porque también influyen
bastante los gustos y preferencias del jugador. Además, este
atributo puede verse afectado, por ejemplo, por el género o tipo
de juego (plataformas, aventura RPG, Sandbox, etc.), el
aspecto estético, la historia o simplemente la atracción o
cercanía de la temática o estilo del juego sobre el jugador.
•
Aprendizaje: Facilidad para comprender y dominar el sistema y
la mecánica del videojuego, es decir, los conceptos definidos en
el Gameplay/Game Mechanic del juego: objetivos, reglas y
formas de interaccionar con el videojuego. El aprendizaje
muestra la capacidad del videojuego en presentar y transmitir el
47
sistema y la mecánica del juego al jugador y que éste,
fácilmente
pueda
llegar
a
comprenderlos,
asimilarlos
y
dominarlos para poder interactuar de la manera más correcta y
precisa posible con el videojuego.
•
Efectividad: Tiempo y
recursos
necesarios
para
ofrecer
diversión al jugador mientras éste logra los objetivos propuestos
S
O
D
A
del juego muestra el grado de utilización de los
recursos para
V
R
E
Sy hacer que se divierta, es
poder envolver al jugador en R
el juego
E
Scumplir con sus objetivos: divertir y
O
decir, que el juego
pueda
H
C jugador que lo juega.
E
R
entretener
a
todo
DE
en el videojuego y alcanza la meta final de éste. La efectividad
•
Inmersión: Capacidad para creerse lo que se juega e
integrarse en el mundo virtual mostrado en el juego. La
inmersión es la característica del juego relacionada con
provocar que el jugador se vea envuelto en el mundo virtual,
volviéndose parte de éste e interactuando con él. En ese
momento el jugador se hace cómplice de la mentira del mundo
virtual, haciéndola verdad y produciéndose una inversión de
creencia, la cual provoca que el jugador, aunque sepa que a lo
que juega es falso, lo tome como algo real y se implique en ello
con todas sus habilidades para superar el reto propuesto,
estando concentrado o envuelto en la tarea propuesta por el
videojuego.
•
Motivación: Característica del videojuego que mueve a la
persona a realizar determinadas acciones y persistir en ellas
para su culminación. Para conseguir una buena motivación, el
juego debe disponer de un conjunto de mecanismos que
48
generen una perseverancia en la acción por parte del jugador
para superar los retos del juego, es decir, se introducen factores
que aseguren el mantenimiento de un comportamiento en la
apreciación del proceso de juego.
•
Emoción: Impulso involuntario originado como respuesta a los
estímulos del videojuego que induce sentimientos y que
S
O
D
VA
desencadena conductas de reacción automática.
•
R
SE
E
R
S
HO
C
E
y distintos
ER sentimientos y emociones por parte del jugador para
D
modificar su actitud y comportamiento cuando juega: alegría,
Los juegos generan distintos estímulos durante la dinámica del
juego para desencadenar reacciones involuntarias automáticas
presión, frustración, miedo, intriga, curiosidad, para construir un
universo virtual capaz de conmover, emocionar, hacer sonreír o
llorar al jugador si es necesario.
•
Socialización: Atributos y elementos del juego que fomentan el
factor social o la experiencia en grupo, lo cual provoca apreciar
el videojuego de distinta manera, gracias a las relaciones que
se entablan con otros jugadores o con otros personajes del
juego y que complementan las acciones a realizar y los retos a
resolver en la dinámica del videojuego. La socialización de un
juego permite a un jugador tener una experiencia de juego
totalmente distinta cuando juega un juego sólo o en compañía
de otros jugadores y fomenta nuevas relaciones sociales
interactuando con ellos, ya sea de manera competitiva,
colaborativa o cooperativa.
49
2.5. UML
El Lenguaje Unificado de Modelado (UML) es un lenguaje gráfico
para visualizar, especificar, construir y documentar un sistema. UML
ofrece un estándar para describir un "plano" del sistema (modelo),
incluyendo aspectos conceptuales tales como procesos de negocio,
funciones del sistema, y aspectos concretos como expresiones de
S
O
D
VA
lenguajes de programación, esquemas de bases de datos y compuestos
reciclados.
R
SE
E
R
S
HO
C
E
para especificar
ERo para describir métodos o procesos. Se utiliza para
D
definir un sistema, para detallar los artefactos en el sistema y para
Es importante remarcar que UML es un "lenguaje de modelado"
documentar y construir. En otras palabras, es el lenguaje en el que está
descrito el modelo.
2.5.1. DIAGRAMA ENTIDAD RELACIÓN (DER)
Un DER es una herramienta de modelado de sistemas, que se
concentra en los datos almacenados en el sistema y las relaciones entre
éstos. Un diagrama de entidad-relación o DER es un modelo de red que
describe la distribución de los datos almacenados en un sistema de forma
abstracta. Regularmente se establecen diferencias entre el diagrama
entidad-relación y el modelo entidad-relación, donde el modelo entidadrelación vendría a ser el "lenguaje" utilizado para crear diagramas de
entidad-relación. Más información en modelo de entidad-relación.
Componentes de un DER:
•
Tipos de objetos o entidades.
•
Relaciones: conectan los objetos o entidades.
2.5.2. DIAGRAMA DE CLASES
50
Un diagrama de clases es un tipo de diagrama estático que describe la
estructura de un sistema mostrando sus clases, orientados a objetos, un
diagrama de clases muestra un conjunto de clases, interfaces, y
colaboraciones y sus relaciones. Gráficamente un diagrama de clase es
una colección de vértices y arcos.
Contenido de un Diagrama de Clases:
•
Clases
•
Interfaces
•
D Generalización
•
R
SE
E
R
S
O
H
C
E
R
Dependencia
E
Colaboraciones
S
O
D
VA
•
•
Relaciones de asociación
2.5.3. DIAGRAMA DE CASOS DE USO
Los diagramas de casos de uso documentan el comportamiento de
un sistema desde el punto de vista del usuario. Por lo tanto los casos de
uso determinan los requisitos funcionales del sistema, es decir,
representan las funciones que un sistema puede ejecutar, su ventaja
principal es la facilidad para interpretarlos, lo que hace que sean
especialmente útiles en la comunicación con el cliente.
Los diagramas de casos de uso poseen los siguientes elementos:
Actores: Los actores representan un tipo de usuario del sistema.
Se entiende como usuario cualquier cosa externa que interactúa con el
sistema. No tiene por qué ser un ser humano, puede ser otro sistema
informático o unidades organizativas o empresas.
51
Caso de uso: Es una tarea que debe poder llevarse a cabo con el
apoyo del sistema que se está desarrollando. Se representan mediante un
óvalo. Cada caso de uso debe detallarse, habitualmente mediante una
descripción textual.
Asociaciones: Hay una asociación entre un actor y un caso de uso
si el actor interactúa con el sistema para llevar a cabo el caso de uso
S
O
D
Escenario: es una interacción entre el sistema yV
losA
actores, que
R
E
puede ser descrito mediante una secuencia
deS
mensajes. Un caso de uso
E
R
S
O
es una generalización de un
Hescenario.
C
E
DER
2.5.4. DIAGRAMA DE COMPONENTES
Un Diagrama de Componente es, como su nombre lo indica, un
esquema o diagrama que muestra las interacciones y relaciones de los
componentes de un modelo. Entendiéndose como componente a una
clase de uso específico, que puede ser implementada desde un entorno
de desarrollo, ya sea de código binario, fuente o ejecutable; dichos
componentes poseen tipo, que indican si pueden ser útiles en tiempo de
compilación, enlace y ejecución.
Este tipo de diagrama se representa mediante componentes unidos
mediante relaciones de dependencia, en los diagramas de componentes
se muestran los elementos de diseño de un sistema de software. Un
diagrama de componentes permite visualizar con más facilidad la
estructura general del sistema y el comportamiento del servicio que estos
componentes proporcionan y utilizan a través de las interfaces. Se puede
52
usar un diagrama de componentes para describir un diseño que se
implemente en cualquier lenguaje o estilo. Solo es necesario identificar los
elementos del diseño que interactúan con otros elementos a través de un
conjunto restringido de entradas y salidas. Los componentes pueden
tener cualquier escala y pueden estar interconectados de cualquier
manera.
2.6. PRUEBAS DE SOFTWARE
S
O
D
VA
R
SE
E
R
S
HO
C
E
Las pruebas
ERde estrés son las pruebas que se realizan, desde una
D
perspectiva, para determinar lo rápido que realiza una tarea un sistema en
2.6.1. PRUEBA DE ESTRÉS
condiciones particulares de trabajo. También puede servir para validar y
verificar otros atributos de la calidad del sistema, tales como
la escalabilidad, fiabilidad y uso de los recursos, esta prueba se utiliza
normalmente para romper la aplicación, se va doblando el número de
usuarios que se agregan a la aplicación y se ejecuta una prueba de carga
hasta que se rompe. Este tipo de prueba se realiza para determinar la
solidez de la aplicación en los momentos de carga extrema y ayuda a los
administradores para determinar si la aplicación rendirá lo suficiente en
caso de que la carga real supere a la carga esperada.
2.6.2. BETA TESTING
Prueba de un producto o servicio prácticamente acabada; se
distribuye fuera de la empresa u organización para que la puedan probar
y detectar posibles fallos que, de este modo, pueden depurarse antes de
lanzar el producto y/o servicio al mercado. Cuando una versión beta llega
a estar disponible para el público en general, a menudo es extensamente
probada por los tecnológicamente expertos o familiarizados con versiones
53
anteriores, como si el producto estuviera acabado. Generalmente los
desarrolladores de las versiones betas del software gratuito o de código
abierto los lanzan al público en general, mientras que las versiones betas
propietarias van a un grupo relativamente pequeño de probadores.
2.7. Tabla de variables
VARIABLES
SE
E
R
S
-Sounds Effects
INDICADORES
-Desarrollo de la
-Modelos Estadísticos
DIMENSIONES
Técnicos
Mecánica del juego -Mecánica del Juego
-Servidor Web
O
H
C
E
ER
D
R
-Requerimientos
Funcionales
- Motor gráfico de
desarrollo
-Socket Server
-PostgreSQL
- Plugin
- JSFramework
-Modelo de datos
-Modelado de
Datos
-Codificación
-Prueba
-Elementos
Multimedia
Juego de
S
O
D
VA
Operativos
-Conexión a
Internet
-Browser
-Unity Web
Plugin
-Diagrama ER
-Diagrama de Clases
-Diagrama de Casos
de Uso
-Diagrama de
Componentes
-C#
-UnityEngine
-Photon Server
-TBTK
-NGUI
-JavaScript
-AngularJs
-PHP
-SQL
-Pruebas de Estrés
-Beta Testing
-Sprites
-SoundTrack
-MonoDevelop
-SublimeText3
-PgAdminIII
-Pruebas de
Funcionalidad
54
CAPITULO III
MARCO METODOLÓGICO
3.1 TIPO DE INVESTIGACIÓN
S
O
D
VA
R
En la presente investigación se utilizó un tipo de investigación
proyectiva.
SE
E
R
S
O
H
C
E
ER
D
Según Hurtado (2000), “consiste en la elaboración de una
propuesta o de un modelo, como solución a un problema o necesidad de
tipo práctico, ya sea de un grupo social, o de una institución, en un área
particular del conocimiento, a partir de un diagnóstico preciso de las
necesidades del momento, los procesos explicativos o generadores
involucrados y las tendencias futuras”. (p.325)
De
acuerdo
con
lo
expuesto
anteriormente,
la
presente
investigación es de tipo proyectiva debido a que tiene como finalidad el
desarrollo de un juego de estrategia por turnos con capacidad
multijugador utilizando el motor gráfico Unity.
3.2 DISEÑO DE INVESTIGACIÓN
Algunos autores hacen mención a aspectos metodológicos para
referirse al concepto de diseño y otros incluyen, además de estos asuntos
de
la
elaboración
del
marco
teórico
y sus
actividades,
aspectos administrativos de la investigación.
Tal es el caso de Ander Egg (2006) quien, además de
metodológicos, involucra aspectos tales como la constitución del equipo
56
55
de investigación, la coordinación de las actividades de investigación y la
definición del esquema presupuestario administrativos.
Sobre este tema no existe un criterio único acerca de lo que es
diseño de investigación. Se le agrega además, que este se encuentra
asociado
a
otros
términos
como
marco
metodológico,
tipo
de
investigación y nivel de investigación, que en ocasiones se usan
indistintamente.
S
O
D
VA
R
SE
E
R
S
HO
C
E
básicamenteE
no R
está interesado en comprobar explicaciones, ni en probar
D
determinadas hipótesis, ni en hacer predicciones. Los autores Hernández,
Esta investigación se encuentra dentro del diseño No Experimental
descriptivo, busca únicamente describir situaciones o acontecimientos;
Fernández
y
Baptista
(1991)
refieren
de
una
investigación
no
experimental:
Es aquella que se realiza sin manipular deliberadamente variables.
Es decir, una investigación donde no hacemos variar intencionalmente
las variables independientes. Lo que hacemos en la investigación no
experimental es observar fenómenos tal y como se dan en su contexto
natural, para después analizarlos. (p.189)
Es debido a las razones anteriormente expuestas que se presenta
un diseño no experimental descriptivo, debido a que se realiza la
descripción de los procedimientos necesarios
para la realización del
juego, según las características indispensables para su elaboración,
adicionando la especificación de los requerimientos mínimos para el
debido funcionamiento del juego, y también debido que para la realización
de este proyecto no se manipula deliberadamente las variables.
56
3.3 TÉCNICA E INSTRUMENTOS DE RECOLECCIÓN DE DATOS
Según Hurtado (2008, p. 153), las técnicas tienen que ver con los
procedimientos utilizado para la recolección de datos, es decir el cómo
estas pueden ser de revisión documental. Además, según el mismo autor
(2006, p.164), la selección de técnicas e instrumentos de recolección de
datos implica determinar por cuáles medios o procedimientos el
S
O
D
VA
investigador obtendrá la información necesaria para alcanzar los objetivos
ER
S
E
R
Para la recolección de información
en la presente investigación, se
S
O
H
Cayudaron al logro de los objetivos y a obtener la
optaron por aquellosE
que
R
DE
información
necesaria de manera organizada y precisa. Las técnicas
de la investigación.
empleadas son las enunciadas y desarrolladas a continuación:
3.3.1 REVISIÓN DOCUMENTAL
Para Hurtado (2008, p. 427), es una técnica en la cual se recurre a
información escrita, ya sea bajo la toma de datos que pueden haber sido
producto de mediciones hechas por otros o como texto que en sí mismo
constituyen los eventos de estudio.
Para esta investigación se aplicó la técnica de revisión documental,
consultando textos asociados a los sistemas de información bajo
ambiente web, de igual forma, fue estudiada la gestión electrónica de
documentos, con el fin de obtener una base de conocimiento.
3.3.2 OBSERVACIÓN DIRECTA
Según Hurtado (2008, p. 459), la observación directa constituye un
proceso de atención, recopilación, selección y registro de información,
para el cual el investigador se apoya en sus sentidos.
57
3.3.3 INSTRUMENTOS
También para Hurtado (2008, p. 153), representa la herramienta
con la cual se va a recoger, filtrar y codificar la información, es decir el con
qué.
Los
instrumentos
pueden
estar
ya
elaborados
normalizados.
incluso
S
O
D
VA
R
SE
E
R
S
3.3.4 CUADERNO DE NOTAS
e
HO
C
E
de notas esE
unRdocumento similar al diario. En él se registran las
D
informaciones de los hechos, eventos o acontecimientos en el propio
Por otra parte, según Finol y Camacho (2006, p. 77) un cuaderno
terreno; ayudará a analizar la situación al momento de recoger el material.
3.4
UNIDAD DE ANÁLISIS
Según Hurtado (2010 p. 267), “La Unidad de Análisis se refiere al
ser o entidad poseedora del evento que se desea estudiar; se define de
tal modo que a través de ellas se puede dar una respuesta a la
interrogante de la investigación”. Ante dicha definición, y evaluando los
eventos a estudiar, concluimos identificando la unidad de análisis como
todos los tipos de usuarios que le darán uso a la aplicación a través de los
navegadores web.
3.5
FASES DEL PROYECTO
• Analizar los requerimientos funcionales un juego de estrategia por
turnos con capacidad multijugador utilizando el motor gráfico Unity.
• Investigar tecnologías actuales para el desarrollo web y
desarrollo mediante Unity
58
o Consultar bibliografía
o Consultar proyectos de desarrollo web recientes y
proyectos realizados con Unity
• Realizar una comparación de dichas tecnologías
• Seleccionar la más óptima
• Diseñar estructuras de información del juego de estrategia por
S
O
D
VA
turnos con capacidad multijugador utilizando el motor gráfico Unity.
R
E
S
E
• Realizar el Diagrama de Clases
R
S
HO de Casos de Uso
• Realizar elC
Diagrama
E
R
• E
Realizar el Diagrama Entidad - Relación
D
• Realizar el Modelo de Datos
• Realizar el Diagramas de Interfaces
• Diagramas de Componentes
• Codificar las clases según el diagrama de clases
• Desarrollar los elementos visuales y multimedia que conforman el
juego de estrategia por turnos con capacidad multijugador
utilizando el motor gráfico Unity.
• Diseñar los Rigs de las Unidades de batalla.
• Aplicar texturas a los Rigs realizados.
• Agregar detalles finales a los modelos 3D
• Diseñar los ambientes de Batalla
• Confeccionar los escenarios en base a dichos ambientes
• Aplicar detalles correspondientes a los escenarios según su
clasificación
• Diseño de las interfaces de usuario
• Aplicación de los efectos de sonido
59
• Codificar el juego de estrategia por turnos con capacidad
multijugador utilizando el motor gráfico Unity.
• Evaluar el juego de estrategia por turnos con capacidad
multijugador utilizando el motor gráfico Unity.
• Aplicar prueba de funcionalidad
• Realizar Beta testing.
D
H
C
E
ER
O
SE
E
R
S
R
S
O
D
VA
60
CAPÍTULO IV
ANÁLISIS DE LOS RESULTADOS
En este capítulo se plasman los resultados de la investigación, los
cuales permiten dar respuesta a los objetivos planteados.
4.1.
S
O
D
VA
R
SE
E
R
S
ANÁLISIS DE LOS REQUERIMIENTOS BÁSICOS
HO
C
E
El análisis
DdeElosRrequerimientos debe ser lo suficientemente flexible y
Al momento de desarrollar un juego online es necesario determinar
los requerimientos básicos para el desarrollo y funcionamiento del mismo.
permitir mostrar lo mínimo necesario para el funcionamiento del juego,
para no exceder en gastos de equipos adicionales. Antes de realizar el
análisis de los requerimientos de un juego de estrategia por turnos con
capacidad multijugador, se procederá a determinar las características
generales del mismo y los requerimientos básicos que necesita.
4.1.1. REQUERIMIENTOS DE HARDWARE
Requerimientos funcionales:
-Intel Core 2 Duo con 2.4 Ghz, su equivalente en AMD o superior.
-Tarjeta gráfica Nvidia 7800, su equivalente en ATI o superior.
-4gb de RAM.
Requerimientos operativos:
-Intel Core i3 de 2Ghz, su equivalente en AMD o superior.
-Tarjeta integrada de Intel.
-4 Gbs de RAM.
60
61
4.1.2. REQUERIMIENTOS DE SOFTWARE
-Windows XP SP3; o Windows Vista o posterior.
-Navegador Web Chrome, Mozilla, Opera o Safari.
-Servidor Web Apache 2.2 o superior
-Gestor de base de datos Postgre 9.1 o superior
-Editor de texto Sublime Text 2 y Brackets 1.1.
-IDE Visual Studio 2013.
S
O
D
VA
R
SE
E
R
S
HO
C
E
R proyecto sin embargo, se maneja mayormente las
al juego. Para
Eeste
D
librerías de AngularJS y las pertenecientes al paquete Grid Framework.
En cuanto a las librerías de desarrollo son muy variadas y pueden
implantarse según convenga para brindar más dinamismo y presentación
Estas otorgan facilidades de configuración y utilización para el proyecto.
4.2.
REQUERIMIENTOS DE DISEÑO
Los requerimientos de diseño para el desarrollo de un juego de
estrategia por turnos con capacidad multijugador
requirieron de la
observación de otros juegos que tuvieran características y funcionalidades
similares, a partir de los cuales se observaron ciertas tendencias a
mantener ciertos elementos presentes para la interacción con el usuario,
la forma de interactuar con el juego y elementos de presentación y
configuración. Estos elementos observados son aplicables tanto para el
juego en si como para la aplicación web, la cual contendrá el juego y
permitirá realizar configuraciones dentro de él.
Debido a esto, se decidió implementar una serie de módulos para
dividir la funcionalidad de la página y manejar las acciones del usuario de
manera más eficiente y cómoda; además la estructura interna del juego
también fue manejada modularmente, de tal manera que el despliegue del
62
juego y su interacción con el juego sean lo más cómodas e intuitivas
posibles.
De este modo, mediante Angular Js se logró estructurar la
aplicación web a través del modelo vista-controlador para obtener una
aplicación organizada y fácilmente manejable, esto se logró mediante el
desarrollo modular y permitiendo la reutilización de varios componentes
S
O
D
A unas
usuario de Unity y usando la opción “+”, es posible crearV
y mantener
R
SE de tal manera que
interfaces cómodas e intuitivas para el E
usuario,
R
S
O
aprender a manejar el juego
sea
un proceso fácil y entretenido.
H
C
E
R
E
D
4.3. MODELADO DE DATOS DEL JUEGO
para facilitar el trabajo. Dentro del juego, con la utilización de la interfaz de
La realización del juego y de la aplicación web requirió de una serie
de diagramas UML para el diseño generalizado y para tener una idea
clara de cómo se realizaría la codificación en su momento.
Para ello se realizaron los diagramas de casos de uso para mostrar
como el usuario interactuaría con la aplicación y el juego,
se realizó
igualmente un modelo de datos con el cual se facilita la visualización del
flujo de datos dentro del juego y la aplicación, este diagrama sirve como
base para la realización del diagrama de entidad-relación, que dentro del
mismo se muestra la estructura de la bases de datos, las tablas que
posee y las relaciones entre ellas, el diagrama de despliegue muestra
como la aplicación, el juego y el usuario se relacionan entre ellos y el
diagrama de clases que muestra las interacciones entre las diversas
clases y sus métodos dentro del código del juego y de la aplicación web.
63
4.3.1. CASOS DE USO
De acuerdo con lo descrito por Dan Pilone y Neil Pitman en su libro
“UML 2.0 in a Nutshell”, los diagramas de casos de uso de son una
manera de capturar la funcionalidad del sistema y los requisitos en UML.
Los diagramas de casos de uso consisten en piezas nombradas de
funcionalidad (casos de uso), las personas o las cosas invocando la
S
O
D
VA
funcionalidad (actores) y posiblemente los elementos responsables de
ER
S
E
R
una clase. Cada caso de uso debe
tener
un nombre que suele ser de
S
O
H
Cdescriben la funcionalidad necesaria.
unas pocas palabrasE
que
R
DE
implementar los casos de uso (temas). Casos de uso representan
distintas piezas de la funcionalidad de un sistema, componente o incluso
A continuación se presentan los casos de uso de la aplicación web
y de juego, en donde se observa la interacción del Usuario con cada
elemento.
FallStar World Game
Figura Nº 7: Casos de uso Fallstar World.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
64
En este diagrama se muestra la interacción que tiene el Usuario
con el Juego, este puede realizar ciertas operaciones básicas como las
que se muestran en el diagrama:
S
O
D
VA
El Usuario realiza las siguientes operaciones en el videojuego:
R
SE
E
R
S
● Login: El Usuario debe iniciar sesión para acceder al juego.
HO
C
E
CreateE
Game:
R Se crea una nueva sala para iniciar una partida.
D
Join Game: Ingresar a una sala creada por un usuario conocido.
● Home: Pantalla principal donde el usuario escoge una acción.
●
●
● Find Game: Lista de todas las salas disponibles, para que el
usuario seleccione en cual entrar.
● Loading: Pantalla de espera mientras se carga la interfaz del juego.
● Play: Pantalla donde se desarrolla el Juego.
● Salir: Volver al home desde cualquier pantalla.
Figura Nº 8: Casos de uso Fallstar World
65
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
En este diagrama se muestra la interacción que tiene el Usuario
con la aplicación web, este puede realizar ciertas operaciones básicas
como las que se muestran en el diagrama:
S
O
D
VA
El Usuario realiza las siguientes operaciones en la aplicación web:
ER
S
E
R
S
SignIn: Si el Usuario no O
tiene
una cuenta, debe registrarse.
H
C
E
Start Game:
abre
en
DER una nueva tab del navegador el juego.
● Login: El Usuario debe iniciar sesión para acceder al juego.
●
●
● User menu: menú donde se despliegan todas las acciones
disponibles para el usuario.
● Ver Record: El usuario visualiza una lista de todas las partidas
jugadas, y sus resultados.
● Ver unidades Disponibles: El usuario visualiza una lista de las
unidades disponibles actualmente en el juego.
● Ver unidades Propias: El usuario visualiza una lista de las unidades
disponibles adquiridas por el usuario.
● Comprar unidades: El usuario visualiza una Pantalla para comprar
unidades nuevas.
● Ver Mapas Disponibles: El usuario visualiza una lista de los Mapas
disponibles.
● Ver tipos de Batalla: El usuario visualiza una lista de los tipos de
batalla disponibles.
4.3.2. MODELO DE DATOS
El modelado de datos es un proceso utilizado para definir y analizar
requerimientos de información necesarios para apoyar el proceso de
66
negocio dentro del rango del sistema de información en organizaciones.
Por ende, el proceso de modelado de datos involucra modeladores de
datos profesionales que trabajan muy cerca de las partes interesadas de
la empresa, como también potenciales usuarios del sistema de
información. De acuerdo con Steve Hoberman, el modelado de datos es
un proceso de aprendizaje de información, y el modelo de datos es el
resultado de los procesos de modelados de datos.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 9: Modelo de datos Fallstar World.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Como puede observarse en la figura, se tienen 7 entidades cuyas
relaciones se puedes apreciar, la entidad “Battle”, relaciona un
“Battle_type” y unos “Mapas” representando que una batalla tiene un tipo
y un mapa, “Player_Battle” representa la relación entre los jugadores y las
67
batallas realizadas, “Player” es la entidad que representa a los usuarios,
“Player_unit” es la relación de las unidades que posee cada usuario y
“Unit” es la entidad que representa las unidades del juego.
4.3.3. ENTIDAD RELACIÓN
Según Dan Pilone y Neil Pitman, el Modelo de Entidad Relación es
S
O
D
Aentidades y
consiste en un conjunto de objetos básicos llamados
V
R
SE en forma gráfica a
relaciones entre estos objetos, implementándose
E
R
S
O
través del Diagrama Entidad
Relación.
H
C
E
R
DE
un modelo de datos basado en una percepción del mundo real que
Se procedió a diseñar la estructura de la base de datos para la cual
se utilizó el manejador PostgreSQL. La base de datos fallstar_world_db
fue creada en PostgreSQL.
Figura Nº 10: Entidad Relacion Fallstar World.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
68
Como puede observarse en la figura, se tienen 9 tablas cuyos
campos se pueden apreciar, entre ellas la tabla “player”, en la cual se
almacenan los usuarios registrados.
Los campos de la tabla son los
siguientes:
• id_player: Existe por motivos de optimización de búsquedas.
S
O
D
A de tipo
• player_nombre: Nombre del usuario de la aplicación,
V
R
SE
Varchar con un máximo de 20E
caracteres.
R
S del usuario de la aplicación, de tipo
O
• player_apellido:
Apellido
H
Cun máximo de 20 caracteres.
E
R
Varchar
con
DE
Es llave primaria, siendo ésta un valor entero.
• player_email: Email del usuario de la aplicación, de tipo
Varchar con un máximo de 40 caracteres.
• player_password: Contraseña de la cuenta de usuario, de
tipo Varchar con un máximo de 15 caracteres.
• player_username: Nombre usuario de la cuenta, de tipo
Varchar con un máximo de 10 caracteres.
• player_color: color de la facción del usuario, de tipo Varchar
con un máximo de 10 caracteres.
• player_money: Dinero con el que cuenta el usuario, de tipo
entero.
En la tabla “unit” se guardan los datos de las unidades, los campos
son los siguientes:
• id_unit: Existe por motivos de optimización de búsquedas.
Es llave primaria, siendo ésta un valor entero.
• unit_name: nombre de la unidad, de tipo Varchar con un
máximo de 40 caracteres.
• unit_prefab_name: nombre del prefab, de tipo Varchar con
un máximo de 30 caracteres.
69
• unit_price: precio de la unidad, de tipo entero.
• unit_img: imagen de la unidad, de tipo Varchar con un
máximo de 20 caracteres.
• unit_color: color de la unidad, de tipo Varchar con un
máximo de 10 caracteres.
• id_unit_atrib: atributos de la unidad, es llave foránea de la
S
O
D
VA
tabla unit_atrib.
R
SE
E
R
S
HO
C
E
ER
los campos
los siguientes:
Dson
En la tabla “unit_atrib” se guardan los atributos de las unidades,
• id_ unit_atrib: Existe por motivos de optimización de
búsquedas. Es llave primaria, siendo ésta un valor entero.
• hp: Cantidad de “puntos vitales” que poseen las unidades,
de tipo entero.
• ataque: Cantidad de “puntos vitales” que poseen las
unidades, de tipo entero.
• defensa: Cantidad de “puntos vitales” que poseen las
unidades, de tipo entero.
• hit: Cantidad de “puntos vitales” que poseen las unidades, de
tipo entero.
• critical: Cantidad de “puntos vitales” que poseen las
unidades, de tipo entero.
• movimiento: Cantidad de “puntos vitales” que poseen las
unidades, de tipo entero.
En la tabla “player_unit” se guardan los datos de las unidades
adquiridas por un jugador, los campos son los siguientes:
70
• id_ player_unit: Existe por motivos de optimización de
búsquedas. Es llave primaria, siendo ésta un valor entero.
• id_unit: id de la unidad, es llave foránea de la tabla unit.
• id_player: id del jugador, es llave foránea de la tabla player.
S
O
D
A
En la tabla “player_atrib” se guardan los datosR
deV
los atributos de
SE
las unidades adquiridas por un jugador,R
losE
campos son los siguientes:
S
O
H
C
E
R
• E
Id_ player_atrib: Existe por motivos de optimización de
D
búsquedas. Es llave primaria, siendo ésta un valor entero.
• Id_ player_unit: id de la unidad perteneciente al usuario, es
llave foránea de la tabla player_unit.
• Hp: Cantidad de “puntos vitales” que poseen las unidades,
de tipo entero.
• Ataque: Cantidad de “puntos vitales” que poseen las
unidades, de tipo entero.
• Defensa: Cantidad de “puntos vitales” que poseen las
unidades, de tipo entero.
• Hit: Cantidad de “puntos vitales” que poseen las unidades,
de tipo entero.
• Critical: Cantidad de “puntos vitales” que poseen las
unidades, de tipo entero.
• Movimiento: Cantidad de “puntos vitales” que poseen las
unidades, de tipo entero.
En la tabla “map” se guardan los datos de los mapas, los campos
son los siguientes:
71
• id_map: Existe por motivos de optimización de búsquedas.
Es llave primaria, siendo ésta un valor entero.
• map_descripcion: descripción del mapa, de tipo Varchar con
un máximo de 40 caracteres.
• map_ancho: ancho del mapa en cuadros, de tipo entero.
• map_largo: largo del mapa en cuadros, de tipo entero.
• map_nombre: nombre del mapa, de tipo Varchar con un
S
O
D
A
V
• map_image: imagen del mapa, de tipo
Varchar con un
R
SE
máximo de 10 caracteres.RE
S
O
H
C
E
R
EnD
la E
tabla “battle_type” se guardan los datos de los tipos de
máximo de 20 caracteres.
batalla, los campos son los siguientes:
• id_battle_type: Existe por motivos de optimización de
búsquedas. Es llave primaria, siendo ésta un valor entero.
• battle_type_name: nombre del tipo de batalla, de tipo
Varchar con un máximo de 15 caracteres.
• battle_type_descripcion: descripción del tipo de batalla, de
tipo Varchar con un máximo de 40 caracteres.
• battle_type_tiempo_total: tiempo total que dura la partida, de
tipo time.
• battle_type_tiempo_por_turno: tiempo por turno para los
jugadores, de tipo time.
• battle_type_max_units: máximo de unidades por jugador, de
tipo entero.
• battle_type_objects: indica si hay obstáculos en el mapa, de
tipo boolean.
• battle_type_time_limit: indica si la partida es contra el reloj,
de tipo boolean.
72
En la tabla “battle” se guardan los datos de las batallas realizadas,
los campos son los siguientes:
• id_battle: Existe por motivos de optimización de búsquedas.
Es llave primaria, siendo ésta un valor entero.
• id_map: id del mapa, es llave foránea de la tabla map.
S
O
D
VA
• id_battle_type: id del tipo de batalla, es llave foránea de la
tabla battle_type.
R
SE
E
R
S
HO
C
E
EunRjugador, los campos son los siguientes:
realizadasD
por
En la tabla “player_battle” se guardan los datos de las batallas
• id_player_battle: Existe por motivos de optimización de
búsquedas. Es llave primaria, siendo ésta un valor entero.
• player_battle_time: duración de la batalla, de tipo time
• player_battle_result: boolean que representa el resultado de
la batalla, true si el usuario gano, false si perdió.
• id_player: id del jugador, es llave foránea de la tabla player.
• id_battle: id de la batalla, es llave foránea de la tabla battle.
• id_adversario: id del jugador contrincante, es llave foránea
de la tabla player.
4.3.4. DIAGRAMA DE DESPLIEGUE
Según Dan Pilone y Neil Pitman, los diagramas de despliegue
modelan la asignación de piezas de software de un sistema para el
hardware que se va a ejecutar. Elementos de software (componentes,
clases, etc.) se manifiestan típicamente usando artefactos y se asignan al
medio ambiente de hardware o software que será la sede de ellos,
llamados los nodos.
73
Porque
muchos
nodos
pueden
estar
asociados
con
la
implementación de un sistema, comunicación entre nodos puede ser
modelada usando vías de comunicación.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 11: Diagrama de Despliegue Fallstar World.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Dentro del primer diagrama se puede evidenciar como interactúa el
usuario con los elementos de hardware, inicialmente el usuario ingresara
a la aplicación web a través de su browser, en esta pude realizar
cualquier operación de mantenimiento de su cuenta, para estas
operaciones se comunica con el servidor principal del juego, y este a su
vez se conecta con la base de datos, dentro de la aplicación igualmente
puede acceder al juego, adicionalmente, puede acceder al juego
introduciendo la URL correspondiente en el explorador, una vez dentro del
juego este también realiza una conexión al servidor principal del juego
para realizar la validación de la cuenta del usuario, está a su vez retorna
74
la información del usuario, necesaria para que el juego funcione, una vez
culminada la validación de la cuenta introducida, el juego se conecta a la
Photon Cloud, en la cual se gestiona el intercambio de información entre
los jugadores.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 12: Diagrama de Despliegue Fallstar World.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
En el Diagrama anterior se representa como se comunican los
usuarios del juego a través del Photon Cloud.
4.3.5. DIAGRAMA DE CLASES
De acuerdo con Dan Pinone y Neil Pitman, los diagramas de clase
son uno de los más fundamentales tipos de diagrama UML. Se utilizan
para capturar las relaciones estáticas de su software; en otras palabras,
cómo las cosas se ponen juntas y se relacionan. Al realizar software, se
están tomando constantemente decisiones de diseño: Qué clases de
sostener las referencias a otras clases, la clase "posee" alguna otra clase
75
y así sucesivamente. El diagrama de clase proporciona una manera de
capturar esta estructura "física" de un sistema.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 13: Diagrama de Clases Fallstar World.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
76
En la figura No X se parecía el diagrama de clases del juego, en él
se tiene un total de 8 clases, de las cuales 5 se encargan de gestionar las
conexiones entre los jugadores y 3 se encargan de la jugabilidad en sí del
juego.
En los diagramas de conexión de los jugadores se encuentran
Menú, Menú Multiplayer, Menu Join y Menú Lobby.
S
O
D
VA
R
SE
E
R
S
La clase Menu usa los atributos y métodos de sus los demás
O
H
C
E
de Menu son un
Rbooleano llamado “requierePlayerName” que dictara
E
D
cuando será necesario ingresar el nombre el usuario y que habilitara los
scripts que dependen de él; posee 7 atributos y 4 métodos, los atributos
demás menús, “playerNameInput” que es el nombre que tendrá el usuario
dentro del juego; posee también los atributos “skin” en el cual se le
adjunta alguna apariencia a los textos y cuadros que se utilizan en el
menú, SP que viene a ser una variable del mismo tipo que la clase que la
utiliza, y variables que llaman a los demás scripts de los cuales dependen
la clase Menu.
Para los métodos de la clase Menu se tienen el método “Awake” en
el cual se inicializan los valores de algunas variables al inicio del juego, el
método “OnGUI” que se encarga de las interacciones con el usuario con
los botones y cuadros de textos, el método “OpenMenu” que tiene como
parámetro un string llamado ‘newMenu’, este método se encarga de
habilitar cuál de todos los menús deben abrirse e identifica cual menú
debe abrirse con el parámetro que recibe; y utiliza el método NameMenu
que tiene como parámetro un int llamado ‘id’ y con este método muestra
el menú en el cual se ingresara el nombre que utilizara el usuario.
En la clase Menu Multiplayer se tienen 2 atributos y 4 métodos, un
booleano llamado ‘showMenu’ que se utiliza para saber cuándo debe
77
mostrarse este menú al usuario y un Rect llamado ‘myWindowRect’ el
cual es simplemente un cuadro en el cual se coloca texto. Entre los
métodos que utiliza se encuentran “Awake” en el cual se inicializa el
cuadro donde se mostrara la información, el método “EnableMenu” que
coloca el booleano ‘showMenu’ como verdadero, y se usan los métodos
“OnGUI” y “WindowGUI” para gestionar la interfaz de usuario.
S
O
D
Ala interfaz,
se utiliza para colocar una apariencia personalizada
a
V
R
SE
‘windowRect1’ y ‘windowRect2’ que son
cuadros
en los cuales se coloca
E
R
S
texto, botones y otros elementos
HO para la interacción con el usuario, un
C
E
string ‘errorMessage’
DER que se utiliza para mostrar que tipo de error ha
En la clase Menu Join se tienen 7 atributos y 5 métodos, ‘skin’ que
ocurrido, un botón llamado ‘customButton’, un booleano llamado
“showMenu” que se utiliza para verificar cuando el menú debe ser
mostrado, y un Vector2 “joinScrollPosition” utilizado para ajustar las
posiciones de algunos elementos de la interfaz de usuario. Los métodos
que posee son “Awake” que inicializa un cuadro donde se mostrará
información, “EnableMenu” que coloca el booleano ‘showMenu’ como
verdadero y permitiendo mostrar el menú, el método “OnJoinedRoom” en
el cual desabilita mostrar el menú actual y muestra el menú del lobby, y
los métodos “OnGUI” y “listGUI” para manejar las interacción del usuario
con la interfaz y el comportamiento de la interfaz.
Para la clase MenuLobby se tienen 10 atributos y 12 métodos, un
int llamado ‘selGridInt’ que se utiliza para la selección del nivel que se
cargará, un arreglo de strings llamado ‘selStrings’ en el cual se almacenan
los nombres de los niveles que se van a cargar, un atributo ‘skin’ para
colocarle una apariencia personalizada al menú, un atributo ‘SP’ de tipo
MenuLobby, dos atributos booleanos ‘launchingGame’ y ‘showMenu’ que
se utilizan para verificar cuando debe cargarse la escena en la que se
desee jugar y cuando debe mostrarse el menú del lobby respectivamente,
78
se tienen dos strings ‘serverTitle’ y ‘hostSettingTitle’ los cuales como sus
nombres lo indican son los nombres que se le asignan a las salas creadas
por los usuarios, y están los int ‘serverMaxPlayers’ y ‘hostSettingPlayers’
los cuales se utilizan para limitar la cantidad de usuarios que pueden estar
en una sala simultáneamente.
La clase MenuLobby posee los métodos “Awake” en el cual se
S
O
D
A
habilita el menú del lobby, el método “OnGUI” en donde
se maneja la
V
R
E
interacción del usuario con la interfaz,
el S
método “LeaveLobby” que
E
R
S
Odel lobby y corte la conexión con él, el
permite que el usuario se H
salga
C
E
método “CreationSettings”
el cual se utiliza para ajustar cómo será la
ER
D
configuración de la sala, el método “StartHost” con el cual se crea la sala,
inicializan algunas variables, el método “EnableLobby” en el cual se
el método “ShowLobby” que muestra el lobby con todas las partidas en
las cuales el usuario puede ingresar.
También posee el método “OnCreatedRoom” en el cual permite
que la sala pueda ser vista desde el lobby, el método “SetServerSettings”
en el cual se realizan las configuraciones deseadas para el servidor, el
método “HostLaunchGame” en el cual se le quita la visibilidad de la sala a
los demás jugadores en el lobby para que no puedan ingresar en una
partida en progreso, y que llama al método LaunchGame, el método
“LaunchGame” el cual setea el booleano ‘launchingGame’ como
verdadero y el método “LaunchingGameGUI” se encarga de mostrar un
menú que dice que está por empezar el juego y carga la siguiente escena
para que todos los jugadores empiecen la partida.
La clase GameScript es una clase la cual funciona mayormente en
el background dentro de las partidas. Esta muestra los estados de
conexión (como la latencia y jugadores conectados) y permite salirse de la
sala. También se encarga de mantener las conexiones de los jugadores
79
del momento de pasar de la sala en el lobby hasta la partida como tal.
Esta clase maneja 5 métodos, los cuales son “Awake” que se encarga de
habilitar que mensajes puedan ser transmitidos entre los jugadores, el
método “OnGUI” que se encarga de mostrar los botones para salir de la
partida y muestra los estados de conexión del jugador, el método
“OnDisconectedOnPhoton” que muestra un mensaje si se pierde la
conexión,
y
los
métodos
“OnPhotonPlayerConnected”
y
S
O
D
A
jugador se ha conectado o desconectado respectivamente.
V
R
SE
E
R
S
La clase DBConnectH
es O
una clase con un solo parámetro y un solo
EparaClograr la conexión con un script de PHP el cual
R
método, y seE
utiliza
D
“OnPhotonPlayerDisconnected” que muestran un mensaje diciendo cual
maneja toda la conexión con base de datos. Esta clase tiene de
parámetro el string ‘url’ el cual contiene la dirección a la cual debe
conectarse, y tiene un método “Connect” con el cual realiza la conexión al
script de PHP y manda y recibe toda la información que necesite de él.
Para el manejo de la jugabilidad del juego, se utilizan 3 clases
“GameUnits”, “RoamGrid” y “GridScript”.
En la clase GameUnits se maneja los atributos que todas las
unidades poseen y se manejan los métodos de atacar a otras unidades,
recibir daño y morir. La clase maneja 16 atributos y 6 métodos. De
atributos posee 4 de tipo int que son ‘hp’, ‘atk’, ‘def’ y ‘dmgResult’ los
cuales son la energía de la unidad, el daño que es capaz de hacer, la
defensa de la unidad y una variable auxiliar que se utiliza para calcular
cuánto daño recibirá una unidad en algún momento. Usa 2 atributos de
tipo float que son ‘hitChance’ y ‘critChance’ los cuales se utilizan para
calcular cuando una unidad acertará su ataque y cuando ocasionará daño
adicional respectivamente. Posee 2 booleanos que son ‘canAttack’ y
‘isSelected’ los cuales se utilizan para identificar cuando una unidad ya
puede atacar y cuando esta seleccionada. Se tienen 5 atributos de tipo
80
GamaObject los cuales son ‘grid’, ‘gui1’, ‘gui2’, ‘gui3’, y ‘explosion’ con los
cuales se seleccionan el grid de referencia, los botones de mover, atacar
y terminar turno, y un sistema de partículas que se activa cuando una
unidad muera.
Los métodos que posee la clase GameUnits son “Awake” con el
cual se inicializan una serie de variables, el método “RecieveDamage”
S
O
D
A por otra y
se disminuye el hp de la unidad cada vez que esta es atacada
V
R
Sa 0,Ese ejecutar el método
cuando esta termina con un hp menor R
o igual
E
Sde instanciar un sistema de partículas
O
Dead. El método Dead se H
encarga
ECla unidad destruida en forma de explosión y
R
en donde seE
encuentre
D
que contiene un parámetro de tipo int llamado ‘damage’, con este método
también se encarga de eliminar la unidad de la escena. El método
“EnableMove” es un método que se encarga de habilitar el movimiento de
una unidad de un sitio del grid al otro. El método “OnMouseOver” se
encarga de que cuando se le haga click en una unidad se habiliten los
botones de acción (moverse, atacar) para que la unidad pueda realizar
cualquier acción que el jugador desee.
La clase RoamGrid es la que se encarga de manejar el movimiento
de la unidad dentro del grid. Esta clase posee 12 atributos y 6 métodos.
Se tienen 6 atributos de tipo Vector3 los cuales son ‘PI’, ‘PF’,
‘newPosition’, ‘lastPosition’, ‘start’ y ‘goal’, todos estos atributos se utilizan
para obtener las posiciones en las cuales debe moverse la unidad.
También posee un atributo de tipo GFGrid llamado ‘grid’ en el cual se
almacena el grid en el cual la unidad se moverá, un atributo tipo transform
llamado ‘mySelf’ en el cual se almacena la unidad como en sí, un atributo
de tipo int llamado ‘distanciaUnidad’ el cual es utilizado para almacenar la
distancia máxima la cual una unidad es capaz de recorrer dentro del grid,
y dos atributos de tipo float que son ‘counter’ y ‘roamingSpeed’ los cuales
son utilizados como variable auxiliar para saber cuándo una unidad se
81
podrá mover y la velocidad a la cual la unidad se moverá dentro de la
animación respectivamente y un booleano llamado ‘myTurn’ en el cual
inidca si la unidad puede moverse o no.
La clase tiene RoamGrid tiene los métodos “Awake” en el cual
inicializa los valores de algunas unidades, el método “SetTurnFalse” que
coloca como verdadero la variable ‘myTurn’, tiene el método “converter”
S
O
D
A“Update” que
posiciones vectoriales a un valor de tipo int, tiene el método
V
R
SE “OnMouseOver” con
en cada frame actualiza algunos valores,
el
método
E
R
S
O
el cual al hacer click en la H
unidad
habilita su turno y adquiere la posición
C
E
inicial del traslado,
ERy tiene el método “MoveUnit” que es el que llama a la
D
animacion de la unidad para moverla de un sitio al otro.
que se encarga de convertir la distancia que recorrerá la unidad de
Y finalmente se tiene la clase GridScript, esta es una clase auxiliar
para la clase Roamgrid ya que le pasa parámetros los cuales necesitará
la mover la unidad al sitio donde se desee. Esta clase posee 5 atributos y
3 métodos, 2 Vector3 llamado ‘newPoint’ y ‘PF’ los cual son utilizados
para almacenar que punto del grid fue clickeado, un GFGrid llamado ‘grid’
que almacena que grid debe de tener como referencia, una variable de
tipo RoamGrid llamada ‘roamgrid’ la cual se utiliza para obtener y pasar
valores a las variables de ese script, y un arreglo de GameObjects
llamado ‘Units’. Tiene como métodos “Awake” el cual utiliza para inicializar
algunas variables y el método “OnMouseOver” con el cual al hacer click
en el grid, almacena que punto del grid fue clickeado.
En la figura No 4, se aprecia el diagrama de clases para la
aplicación web, en él se tiene las siguientes clases:
82
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 14: Diagrama de Clases Fallstar World.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
83
Primeramente se tiene la clase App.js, esta es la encargada de
gestionar el enrutamiento, tiene 2 atributos, $urlRouterProvider y
$stateProvider, el primero representa el actual url que se muestra en el
browser, y el $stateProvider es la nueva ruta referenciada dinámicamente
mediante Ajax, esto se realiza mediante el método state, el cual recibe
como parámetro, un nombre, una url, un template html y de ser necesario
S
O
D
VA
un controlleR y de ser necesario un controller, a esta clase se encuentran
R
SE
E
R
S
asociadas todos los controladores de la aplicación.
Luego tenemos los controladores, estas son las clases responsables de
O
H
C
E
siguientes 8 controladores
DER para este proyecto:
manipular los datos que se despliegan a través de las vistas, se tienen los
• signInCtrl.js: este es el controlador encargado de enviar la
información en forma de JSON al Servidor Web, tiene un atributo
color que representa el color seleccionado por el usuario para sus
unidades, el atributo $scope que se utiliza para manipular la
información que viene desde la vista, el atributo $http es el objeto
encargado de realizar las llamadas asíncronas al servidor, y el
atributo $window que se encarga de redireccionar la pagina al
Login una vez registado el usuario. Adicionalmente se tiene el
método signIn(), que envia los datos en formato JSON al Servidor
Web.
• listCtrl.js: este es el controlador del menú lateral de la aplicación, el
atributo $scope que se utiliza para manipular la información que
viene desde la vista, UserService es un objeto que almacena los
datos del usuario logueado en el localStorage del explorador, el
atributo $window que se encarga de re direccionar la página al
Login en caso que el usuario no este logueado.
84
• cartCtrl.js: este es el controlador que maneja el módulo de comprar
unidades, sus métodos se basan en el funcionamiento en un carrito
de compras, el método findUnits() obtiene la información de las
unidades desde el Servidor web, el método agregar() ingresa una
unidad al carrito de compras, los métodos aumentar() y disminuir()
se utilizan para gestionar la cantidad de unidades dentro del carrito
y el método comprar envía la información mediante json a la base
S
O
D
Aobtener la
V
mapCtrl.js: este controlador es el encargado
de
R
SE
información de los mapas desde
elE
servidor web y desplegarla a
R
S
través de la vista. HO
C
E
R
recordCrtl.js:
DE este controlador es el encargado de obtener la
de datos para realizar la compra.
•
•
información de los records de un usuario desde el servidor web y
desplegarla a través de la vista.
• loginCtrl.js: este es el controlador encargado de gestionar los
ingresos de los usuarios al sistema, valida si el usuario existe
llamando al Servidor Web.
• UnidadesPropiasCtrl.js: este controlador es el encargado de
obtener la información de las unidades propias de un usuario
desde el servidor web y desplegarla a través de la vista.
• UnidadesDisponiblesCtrl.js: este controlador es el encargado de
obtener la información de todas las unidades disponibles en el
juego desde el servidor web y desplegarla a través de la vista.
Una vez definidos los controladores cabe mencionar que estos
trabajan en conjunto con los scripts php respectivos dependiendo de la
función a realizar, los scripts con los que cuenta el proyecto son los
siguientes:
• Constantes.php: clase ne la cual fueron definidas las constantes de
conexión a base de datos.
85
• PhpPDBC.php: clase que gestiona la conexión a base de datos,
tiene 3 metodos fundamentales, conectar (), query () y destruir ().
• fallstar_world_login.php: clase que maneja el Login en la
aplicación, recibe un JSON con el username y el password, realiza
la consulta correspondiente a la base de datos y de existir
coincidencia, retorna un JSON con la cantidad de dinero, el color
S
O
D
VA
de las unidades y el id del jugador, estos datos serán utilizados por
el cliente para búsquedas posteriores, de no existir conincidencia
R
E
S
E
fallstar_world_sigin.php: recibe un
JSON con los datos ingresados
R
S
al formulario delC
cliente
HOy crea el nuevo registro en la base de
E
datos.
DER
retorna un “Error de Usuario o Contraseña”.
•
• fallstar_world_map.php: retorna un JSON con la data de los mapas
que se encuentra en la base de datos.
• fallstar_world_record.php: recibe un JSON con el id del jugador y
realiza una búsqueda en base a este parámetro, retorna un json
con la información encontrada.
• fallstar_world_UnidadesDisponibles.php: retorna un JSON con la
información de todas las unidades que posea el juego actualmente.
• fallstar_world_UnidadesPropias.php: recibe un JSON con el id del
usuario y retorna un JSON con la información de todas las
unidades que posea el jugador actualmente.
• fallstar_world_unit.php: recibe como parámetro un JSON con los Id
de las unidades según su color, y retorna un JSON con la
información de esas unidades.
• fallstar_world_playerUnit.php: recibe un JSON con la información
de las unidades compradas y en qué cantidad, y realiza la inserción
en la base de datos.
• fallstar_world_playerMoney.php: recibe un JSON con el id del
jugador y retorna un JSON con la cantidad de dinero que posee.
86
4.4.
DISEÑO Y ESQUEMATIZACIÓN DE LOS ASPECTOS VISUALES
Una vez terminada la planificación del desarrollo del juego, se
procedió a la parte del diseño, la cual es parte del funcionamiento básico
que debe de tener la aplicación web y el juego, y que ayudó al momento
de realizar la codificación y permitió tener presente la estructura de los
S
O
D
A se maneja
mismos. Los diseños incluyen a la aplicación web, con la
cual
V
R
SEal juego, también se
la cuenta de cada usuario y se puede
acceder
E
R
S
O
diseñaron las interfaces dentro
del juego, con las cuales el jugador
H
C
E
R que se utilizan en el juego, los ambientes en los
interactúa, las
DEunidades
módulos a realizar, la forma de realizarlos y las interacciones entre los
cuales las batallas se realizarán y efectos especiales utilizados en el
juego.
4.4.1. DISEÑO DE LA APLICACIÓN WEB
Una vez terminada la planificación del desarrollo del juego, se
procedió a realizar el diseño de la aplicación web, se planteó el uso de un
esquema SPA (Single Page Application), el cual dictamina que todas las
operaciones dentro de la aplicación web se realizaran en una sola pág., y
las opciones se irán desplegando dinámicamente en concordancia con las
acciones del usuario, en cuanto a la estética de la aplicación se buscó
principalmente la cohesión de los colores junto con la implementación una
interfaz agradable al usuario.
A continuación se presentan las pantallas utilizadas en la aplicación web:
87
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 15: Pantalla de LogIn.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Figura Nº 16: Pantalla de SignIn.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
88
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 17: Pantalla de Menú Principal.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Figura Nº 18: Comprar Unidades.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
89
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 19: Unidades Disponibles.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Figura Nº 20: Unidades del Usuario.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
90
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 21: Records del Usuario.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Figura Nº 22: Tipos de batalla.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
91
4.4.2. DISEÑO DE LAS INTERFACES DEL JUEGO
El diseño de las interfaces se realizó primero determinando cuáles
serían las interacciones adecuadas a las necesidades del usuario.
Entre ellas se encuentran los menús en los cuales seleccionará si
se desea ver las partidas existentes, entrar en una partida o crear una
nueva.
S
O
D
VA
ER
S
E
respectivos lobbies se realizaron S
sin R
la utilización de las herramientas
O
H
C
visuales de Unity, y E
adicionalmente
se utilizó una interfaz básica de Unity,
R
E
además D
de agregarle un Skin adicional que provino del paquete de
La interfaz del menú de acceso a las diferentes salas y a sus
Photon para darle un estilo y color distinto. Se realizó de esta manera ya
que resultaba más fácil para la implementación posterior de los eventos y
las modificaciones que se estarían realizando para la creación de salas y
la conexión hacia las mismas, además de que esta interfaz no requería
ser demasiado elaborada.
La interfaz del juego fue realizada con una herramienta visual para
el desarrollo de interfaces que fue implementada en la versión 4.6 de
Unity, la cual da una mayor libertad y facilidades para el desarrollador.
Ésta metodología requiere un poco más de tiempo pero los resultados son
estéticamente mejores y permiten mayor interactividad con el usuario y
con algunos de los eventos que se estén desarrollando dentro del juego.
El paquete Unity provee una interfaz básica basada en la que está
presente en Unity 4.6 la cual fue modificada de tal manera que se
adaptara mejor a las necesidades del juego, incluyéndole algunos
botones con eventos especiales los cuales no estaban anteriormente y se
eliminaron algunas de las acciones las cuales se realizaban con la interfaz
que se tenía por defecto.
A continuación se presentan las pantallas utilizadas en el juego:
92
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 23: Login.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Figura Nº 24: Menu Principal.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
93
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 25: Crear partida.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Figura Nº 26: Menu partida actual.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
94
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 27: Lobbies partidas Disponibles.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Figura Nº 28: Interfaz del Juego.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
4.4.3. DISEÑO DE LOS “MODELS” DE LAS UNIDADES
95
Para el diseño de los “models” de las unidades, se procedió
primeramente concebir
qué tipo de unidades contendría el juego, se
eligieron tanques y naves debido a que estas eran relativamente fáciles
de crear y requerían pocas animaciones dentro de las batallas y animar
sus movimientos alrededor del campo es más sencillo que con unidades
humanoides. Posteriormente, se dibujaron unos bocetos de cómo se
verían cada una de las unidades y se les dieron nombres a cada una.
S
O
D
A este
cual se crearon los rigs y modelos 3D de cada una de las
unidades;
V
R
SEgeométricas en 3D ya
proceso consistió básicamente en colocar
figuras
E
R
S
predefinidas en la aplicación
yO
‘moldearlas’ de manera tal que tuvieran la
H
C cambiar sus tamaños, sus formas e inclusive
E
R
forma deseada,
esto
incluye
DE
Después de eso se utilizó el programa de modelado 3D Blender con el
tomar varias de estas figuras y juntarlas para obtener el resultado final.
Ese proceso se realizó para todas las unidades de manera tal de
tener todos los models preparados para las siguientes fases del desarrollo
del
juego.
Posteriormente,
se
crearon
una
serie
de
texturas
correspondientes a las diferentes áreas de cada unidad, de tal manera
que tuvieran los colores que originalmente se deseaban. Una vez creadas
las unidades, se exportaba los modelos con sus respectivas texturas a
Unity, y se realizaban las animaciones respectivas para cada unidad,
como las animaciones de ataque, movimiento, entre otras.
4.4.4. DISEÑO DE LOS AMBIENTES DE JUEGO
Los ambientes del juego fueron creados dentro del editor de
escenas Unity. Se crearon 2 mapas distintos, y de cada uno existe 2
96
variantes, en el primero se encuentra el terreno libre de tal manera que
hay total libertad de movimiento, en la segunda forma, se encuentra el
mismo ambiente pero con obstáculos en el campo de batalla, de tal
manera de dificultar el paso y como consecuencia de esto las batallas.
Los mapas fueron creados importando algunos elementos visuales
disponibles dentro de la tienda de Unity de manera gratuita y
S
O
D
VA
colocándolos de manera tal, que se insertó la plataforma principal, los
ER
S
E
R
S
algunos efectos especiales como
sistemas
de partículas e iluminaciones
O
H
C efectos para simular el ambiente donde se
E
especiales, Se R
agregaron
DE
caminos que conducen a las salidas y las paredes que contienen el lugar;
de esta manera obtuvo su forma final. Adicionalmente, se le agregaron
encuentra la plataforma. A parte de esto, se le agregaron algunos
elementos decorativos de tal manera de que el ambiente no pareciera
vacío. Para la versión del mapa que posee obstáculos, se colocaron estos
mismos elementos que se encontraban distribuidos alrededor del mapa
dentro del campo de batalla.
La escena de la plataforma espacial se desarrolló importando un
paquete de props de Unity que contenía los elementos necesarios para la
creación del mapa. Se creó
la escena, y se agregó el grid principal
usando el editor de Grid Framework. Observándose en la figura 29:
97
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 29: Grid.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Posteriormente, se colocó una previamente realizada, dentro del
cual se desarrollan las batallas, se realizaron modificaciones en la
posición para que concordara con el Grid, de tal manera que parezca que
las unidades están sobre la plataforma. Esto se observa en la figura No
30.
98
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 30: Primera plataforma.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Después de eso, se procedió a colocar plataformas de conexión las
cuales conectan
los extremos de la plataforma principal, de tal manera
que da la impresión de que de no estar totalmente suspendida. Estas
tenían las texturas previamente aplicadas, así que se procedió a
posicionarlas de la manera deseada, con la orientación correcta. A su vez,
se comenzó a aplicar efectos especiales, que consisten en los
“propulsores” de la plataforma, pero dentro de esta fase aún no estaban
finalizados. Los resultados pueden observarse en la figura 31.
99
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 31: Plataforma con puentes.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Posteriormente, se colocaron las paredes que cubren la plataforma
espacial de tal manera que de la sensación que se encuentra dentro de
una edificación. Estos muros eran pocos en variedad, por lo cual se
duplicaron de tal manera de cubrir todo el espacio necesario para dar la
sensación anteriormente mencionada. A su vez, se le agregaron una serie
de props como cajas y generadores de energía para llenar espacios
vacíos en la plataforma. Esto se observa en la imagen 32.
100
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 32: Plataforma con ambiente.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Una vez agregados todos estos elementos, se culminaron los
efectos de partículas que simulan los propulsores para la plataforma, y se
agregaron los obstáculos que impedirán el paso de las unidades a través
de ciertos espacios del grid, se inhabilitaron dichos espacios para
asegurarse de que ninguna unidad pudiese posicionarse dentro de ellos.
Esto se observa en la figura 33.
101
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 33: Grid.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Para la realización del mapa de Lava, se empezó por crear una
escena nueva el editor de Unity, para posteriormente agregar el Grid
utilizando el editor de Grid Framework. Después, se creó un terreno
utilizando las herramientas nativas de Unity, y se configuro su tamaño de
tal manera que se adaptara al grid y tuviera un espacio amplio para
colocar elementos adicionales posteriormente. Esto se observa en la
figura 34.
102
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 34: Grid y terreno inicial.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Con el terreno ya creado, se procedió a cambiar su forma utilizando
las herramientas de modelado de Unity, se modificaron de tal manera que
se enfocara el epicentro del escenario como la zona de batallas, y los
alrededores se moldearon de tal manera que quedaran fosas de lava y
algunas montañas que enmarcaran el escenario. Esto se puede observar
en la imagen 35.
103
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 35: Terreno modificado.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Con el terreno ya moldeado, se procedió a la aplicación de las
texturas. Utilizando texturas disponibles gratuitamente de la tienda de
Unity, se descargaron y se le aplicaron con las herramientas de modelado
integradas de Unity. Se utilizaron texturas de tierra rojiza con rocas para
el área de la batalla principal, una textura de lava para las fosas,
marrones, grises con rocas y terrenos para las montañas que cubren el
área. Esto se observa en la figura 36.
104
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 36: Terreno con textura.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Después de eso, se procedió a realizar los efectos especiales de
escena, implementando primero una nueva iluminación rojiza que
produjera el efecto de altas temperaturas, las cuales serían causadas por
la lava. Esto se observa en la figura 37.
Figura Nº 37: Efectos especiales iniciales.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
105
A partir de este punto, se le realizó un cambio al tamaño del grid
perteneciente escena de tal manera que se adaptara un poco más al
tamaño del terreno y para que fuera capaz de albergar más unidades
dentro de la plataforma, y a su vez se ajustó el terreno cambiando el
tamaño y posición de las montañas y de las fosas de lava, de manera tal
que se adaptaran al nuevo tamaño del grid y logrando un mejor acabado
final para el terreno. Estos cambios se observan en la figura 38.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 38: Ajuste de Terreno.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Por último, se implementaron una serie de sistemas de partículas
con los cuales se da el efecto de lava dentro de las fosas, además se
agregaron pilares de fuego en los alrededores para dar una mayor
sensación de inestabilidad al ambiente. Estos pilares se realizaron usando
el sistema de partículas nativo de Unity, se le agregaron texturas nuevas y
se adaptaron nuevos comportamientos para obtener los efectos
deseados.
Una vez aplicados, se agregaron algunos props adicionales como
rocas, el mapa puede observarse en la figura 39.
106
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 39: Versión Final.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
4.4.5. DISEÑO DE LOS EFECTOS ESPECIALES DEL JUEGO
Los efectos especiales dentro del juego vienen a ser los sistemas
de partículas utilizados en todas las escenas y además, la iluminación
especial en algunos de los escenarios para dar un mejor ambiente. En la
realización de los efectos especiales principalmente se utilizó el sistema
integrado de Unity para generar partículas, con este sistema se
modificaron los patrones, forma de la salida, tamaño y duración de dichas
partículas dentro de la escena, para de esta manera añadir los efectos
deseados, como fueron los mares de lava, pilares de fuego y los
propulsores de la plataforma espacial. Pero, estos sistemas de partículas
vienen con texturas blancas las cuales solo sirven de referencia, estas
fueron sustituidas por otras texturas obtenidas de la tienda de Unity de
manera gratuita las cuales transmitían la sensación de fuego, y de esta
manera, permitieron simular los efectos deseados.
107
Para la iluminación de los ambientes se utilizaron los sistemas de
luces de Unity; en particular las Directional Lights, con estas se logra una
iluminación casi total de un área determinada. Para el escenario de la
plataforma espacial se utilizó una Directional Light normal y a su vez
algunos Spot Lights para resaltar algunas áreas en particular dentro de la
plataforma, como los rieles que conducen las entradas; en el escenario de
lava se utilizó una Directional Light de color anaranjado para dar
la
S
O
D
VA
sensación de calor que causa la lava que se encuentra distribuida por
4.5.
O
H
C
E
ER
CODIFICACIÓN
D
R
SE
E
R
S
todo el mapa.
Con el diseño ya definido, se procede a implementar las
herramientas de desarrollo para codificar las instrucciones necesarias
para llevar el diseño a la realidad. Por medio de sprints pertenecientes a
la metodología Scrum, se comenzó a desarrollar el proyecto partiendo
desde la parte lógica hasta la gráfica. La culminación de esta fase
constituye el cumplimiento del objetivo dirigido a la codificación de las
instrucciones.
108
4.5.1. CODIFICACIÓN DEL SERVIDOR DEL JUEGO
Para este proyecto se implementó lenguaje PHP como lenguaje de
servidor, primeramente se desarrolló una clase llamada PhpPDBC.php
que gestionara la conexión con la base de datos, esta cuenta con los
métodos conectar(), query() y destruir(), el método conectar() utiliza la
S
O
D
VA
instrucción “pg_connect("host=$this->host port=$this->port dbname=$this-
ER
S
E
R
establecidos dentro de la misma,S
para
el método query() se utilizó la
O
H$Consulta)” siendo $Valor la conexión a la
C
instrucción “pg_query($Valor,
E
ER
base de D
datos realizada con el método conectar() y $Consulta el query
>db user=$this->user password=$this->pass");” mediante la cual se
realiza la conexión con la base de datos según los parámetros
escrito en lenguaje SQL en formato String, el método destruir() ejecuta la
sentencia pg_close() la cual cierra la conexión realizada.
Una vez terminada la clase PhpPDBC.php se creó una clase
denominada Constantes, esta almacena datos constantes compartidos
por todos los scripts del servidor como por ejemplo los atributos para la
conexión a la base de datos, en total se disponía de 5 constantes:
• define("DB","fallstar_world_db");
• define("SERVIDOR","localhost");
• define("PUERTO","5432");
• define("USER","postgres");
• define("PASS","daniel230394leo");
Posteriormente se fueron desarrollando scripts encargados de
ejecutar determinadas tareas, mayormente de lectura y escritura en la
base de datos.
109
4.5.2. CODIFICACIÓN DE LA APLICACIÓN WEB
Una vez culminada la codificación general del servidor se procedió
a codificar la aplicación web según los parámetros establecidos por el
modelo vista controlador aplicado en el Framework AngularJS, siguiendo
el diseño planteado anteriormente se creó el proyecto de la Aplicación
Web de manera modular, de manera que cada módulo posea una vista y
S
O
D
VA
un controlador asignados, estas vistas serian desplegadas en la página
ER
S
E
R
despliegue de la aplicación Web, estos
son:
S
O
H
C
<header ng-include="'templates/nav.html'"></header>
E
R
DE
<div ui-view></div>
según el usuario las solicite, apegado al modelo de las SPA, la página
principal index.html contiene los 3 elementos fundamentales para el
<footer ng-include="'templates/footer.html'"></footer>
La etiqueta <header> es en la cual mediante la directiva ng-include
se carga el fragmento correspondiente a la barra principal de navegación
contenida dentro de nav.html, donde se encuentran los enlaces al Login,
sigin, about, todos estos organizados dentro de una etiqueta <ul>, luego
de este se colocó un <div> con la directiva ui-view, que es la encargada
de gestionar el enrutamiento dinámico entre los módulos de la aplicación
de manera asíncrona, mediante AJAX, y finalmente una etiqueta <footer>
en la cual se carga el fragmento informativo sobre los derechos de la
página, esto se realiza igualmente mediante la directiva ng-include.
A continuación se describen los módulos de la aplicación web:
110
Módulo Login:
En esta pantalla el usuario podrá hacer Login para ingresar a la
aplicación. Si el usuario no existe, se emitirá un mensaje informando al
usuario para que se registre. Cuando se pulsa el botón Login se llamara
al loginCtrl.js, que es el controlador encargado de manipular la vista del
Login.html, dentro de este controlador se valida que los campos estén
S
O
D
Ade datos, de
encargado de verificar si el usuario existe dentro de la base
V
R
E la cantidad de
Sunidades,
existir retorna el id del jugador, el color
deE
sus
R
S
Units Points y la cantidadH
deO
dinero que posee, todo estos datos se
C de no existir el usuario se retorna “Error de
E
R
retorna en forma
de
JSON,
DE
llenos y se envía la información al script fallstar_world_login.php
Usuario o Contraseña”.
Figura Nº 40: Login.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
111
Módulo Sign In:
En esta pantalla el usuario podrá hacer signIn dentro de la
aplicación, llenando los campos solicitados, una vez presionado el botón
signIn, se llama al controlador siginCtrl.js, este envía todos los datos
introducidos en formato JSON al script fallstar_world_sigin.php, que es el
S
O
D
VA
encargado de escribir en la tabla usuarios y crear el nuevo registro.
O
D
H
C
E
ER
R
SE
E
R
S
Figura Nº 41: SignIn.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
112
Modulo Ver Record:
En este módulo el usuario podrá ver el Record de todas las
partidas jugadas dentro de una tabla, la misma será generada
dinámicamente por el controller recordCtrl.js dependiendo del usuario con
S
O
D
VA
el que se hizo login, los datos desplegados se obtienen del script
O
D
H
C
E
ER
R
SE
E
R
S
fallstar_world_record.php en formato JSON.
Figura Nº 42: Record.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
113
Modulo Ver Unidades:
En este módulo el usuario podrá ver todas las unidades con las que
el juego cuenta actualmente y su variedad de colores, los datos
desplegados
se
obtienen
del
script
fallstar_world_UnidadesDisponibles.php en formato JSON y se despliegan
a través del controller UnidadesDisponiblesCtrl.js.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 43: Ver unidades.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
114
Modulo Ver Unidades Propias:
En este módulo el usuario podrá ver todas las unidades que ha
adquirido y también utilizar los Units Points obtenidos en mejorar los
atributos de sus unidades, los datos desplegados se obtienen del script
fallstar_world_UnidadesPropias.php en formato JSON y se despliegan a
través del controller UnidadesPropiasCtrl.js.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 44: Unidades Propias.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
115
Modulo Comprar Unidades:
En este módulo el usuario podrá adquirir las unidades que desee a
cambio de los créditos que posea, la funcionalidad general de este
módulo se basa en la de un carrito de compras, del lado izquierdo de la
pantalla se encuentran todas las unidades disponibles para comprar,
debajo de cada imagen se encuentra un botón que al ser presionado
S
O
D
A puede
de esa unidad dentro del carrito, del lado derecho del
módulo
V
R
SEdel carrito y el botón
observarse una tabla que muestra elR
contenido
E
Sllamando al cartCtrl.js, y enviando la
O
comprar que finaliza la transacción,
H
C al script fallstar_world_playerUnit.php.
E
R
información mediante
JSON
DE
incluye la unidad al carrito, si vuelve a ser presionado aumenta la cantidad
Figura Nº 45: Comprar Unidades.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
116
Modulo Ver Mapas
En este módulo el usuario podrá ver todos los mapas con los que el
juego cuenta actualmente y una descripción de los mismos, los datos
desplegados se obtienen del script fallstar_world_map.php en formato
JSON y se despliegan a través del controller mapCtrl.js.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 46: Ver Mapas.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
117
Modulo Ver tipos de Batalla:
En este módulo el usuario podrá ver todos los tipos de batalla con
los que el juego cuenta actualmente y una descripción de los mismos, los
datos desplegados se obtienen de manera estática de los recursos
multimedia del proyecto y se despliegan en la vista denominada
verBattleTipes.html.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Figura Nº 47: Tipo de Batalla.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
118
4.5.3. CODIFICACIÓN DEL JUEGO
El proceso de codificación del juego se hizo de manera modular,
siguiendo la metodología Scrum que especifica que se deben realizar
diferentes partes del código dependiendo de la importancia de cada una
la cual debe ser establecida previamente y siguiendo un orden de tareas
asignadas las cuales deben ser completadas durante cada sprint que se
realice.
S
O
D
VA
ER
S
E
R
del movimientos de las unidadesS
dentro
del grid, esto implica tener el
O
H
Cen la escena en el cual se puedan desplazar las
script que genere elE
grid
R
E
unidades,D
un método que permita traducir coordenadas entre el grid y las
El primer módulo consiste en la creación de los scripts encargados
coordenadas que trabaja normalmente Unity, crear una animación en la
cual se pueda indicar punto de inicio de la unidad, punto final de destino,
el tiempo de la animación para el traslado de la unidad, y limitar el
movimiento de cada unidad a cierta cantidad de cuadros de manera que
no pueda recorrer todo el grid en un solo turno.
Para la creación del grid, utilizando el Grid Framework se puede
crear un grid con el editor visual, esto crea un gameObject sencillo el cual
posee el un Script llamado GFRectGrid, este se encarga de crear el grid
en la escena y da las opciones de configurar sus dimensiones en el editor
visual de Unity; y además, contiene métodos adicionales que permiten
utilizar el grid de manera dinámica y cómoda.
Para establecer las rutas que se utilizaran para mover una unidad
de un espacio del grid al otro, se requiere de hacer click en la unidad que
se desee mover, tomar la ubicación y que sea almacenada en una
variable. Luego hacer click en el botón de la UI que dice Move para
activar el booleano que habilitara el movimiento, y posteriormente hacer
119
click en algún lugar que se desee dentro del grid, guardando dicho valor
en una variable.
Para la realización de todos estos procesos fue necesario crear
una serie de métodos los cuales trabajaran en conjunto para lograr
desplazar la unidad de un lugar al otro. En primer lugar, los clicks
normalmente devuelven una posición basada en la escena como tal, no
S
O
D
A esos
a uno relativo al grid para el manejo de las funciones que
requerirán
V
R
E de código:
Sporción
valores. Para realizar esto, se utilizó la siguiente
E
R
S
O
H
C
E
R
DE
una posición relativa al grid, por lo cual es necesario convertir dicho valor
if (Input.GetMouseButtonDown (0)) {
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray, out hit) && hit.collider.name=="Grid") {
newPoint = grid.WorldToGrid (hit.point);
roamGrid.PF = newPoint;
}
}
Este método recibe el click del jugador, lanza una línea invisible
desde la cámara principal, si consigue algún objeto con un collider que
tenga el nombre “Grid”, obtendrá la coordenada de colisión. Esta
coordenada la traduce a un valor relativo al grid, y se lo asigna a una
variable. Este método se aplica igual a las unidades, pero en vez de
buscar por el nombre “Grid”, lo realiza por el nombre “Unit”.
Las dos ubicaciones que regresa el método anterior están
referenciadas como un plano cartesiano, por ende, para realizar una
comparación que será necesaria para verificar si la unidad será capaz o
no de moverse hasta cierto punto dentro del grid es necesario convertir a
ese valor a uno comparable con un integer que será el límite de cuadros
120
que podrá moverse una unidad por turno. Para ello se utiliza la siguiente
sección de código:
float converter (Vector3 spot1, Vector3 spot2) {
return (Mathf.Abs (spot1.x - spot2.x) + Mathf.Abs (spot1.z - spot2.z));
}
Y para verificar si una unidad podrá realizar la traslación, se utiliza la siguiente porción
de código:
S
O
D
VA
counter = converter (PF, PI);
if (counter <= distaciaUnidad) {
}
O
H
C
E
ER
D
R
SE
E
R
S
MoveUnit ();
El método para mover a la unidad consiste en verificar si es el turno
de la unidad para habilitar su movimiento, luego utiliza un método de
movimiento de iTween que permite desplazar un gameObject de manera
directa a un sitio con alguna animación en particular (se utilizó el estilo de
animación standard) realizándose en algún tiempo dado, y luego se
deshabilita el turno de la unidad para que esta no pueda moverse
después. El código es el siguiente:
void MoveUnit () {
if (myTurn) {
iTween.MoveTo (gameObject, goal, roamingSpeed);
//GameU.myButton3.interactable = false;
myTurn=false;
}
Una vez terminados las funciones para realizar los movimientos de
las unidades dentro del grid, se procedió a crear las funciones de recibir
daño y las funciones de muerte de las unidades. La función de recibir
daño es una función con un solo parámetro de tipo int, la función consiste
en restar el daño recibido como parámetro menos la defensa de la unidad
atacada, si el resultado es un numero positivo, le reduce a la unidad
121
atacada su vida, y si la vida de la unidad es igual o menor a 0, se
ejecutara el método de morir. Todo esto se realizó en el siguiente código:
public void ReceiveDamage(int damage) {
Debug.Log ("damage" + damage);
dmgResult = damage - def;
Debug.Log ("dmgResult: " + dmgResult);
if (dmgResult > 0) {
S
O
D
VA
hp -= dmgResult;
Debug.Log ("hp: " + hp);
O
H
C
E
ER
if (hp <= 0) {
Dead ();
D
}
}
R
SE
E
R
S
}
La función de morir es una función la cual instancia un sistema de
partículas de una explosión para simular la destrucción de la unidad, y
mientras se realiza la explosión se destruye la unidad. El código de la
función es el siguiente:
public void Dead () {
if (gameObject! =null) {
Instantiate (Explosion, gameObject.transform.position,
gameObject.transform.rotation);
Destroy (gameObject);
isSelected = false;
}
}
Para la función de atacar, se utiliza un método el cual verifica si el
usuario acierta el ataque sobre la otra unidad, después de eso verifica si
la unidad acierta un ataque crítico, y según sea el resultado llama al
método de recibir daño con el daño normal que puede ocasionar la unidad
122
o haciendo un daño crítico. Además, se encarga de colocar en false
algunos parámetros como si es seleccionado o si ya tiene la capacidad de
atacar, de tal manera que no ataque más de un vez por turno. El código
del método de ataque es el siguiente:
public void Attack () {
if (canAttack) {
if (Random.Range (0.0F, 1.0F) <= hitChance) {
if (Random.Range (0.0F, 1.0F) <= critChance) {
int critAttack = atk * 3;
ReceiveDamage (critAttack);
return;
}
ReceiveDamage (atk);
return;
}
canAttack = false;
myButton.interactable = false;
myButton.onClick.RemoveAllListeners ();
myButton.onClick.AddListener (() => {
Attack ();
});
isSelected=false;
}
}
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Una vez terminadas las funciones que se encargarán de la
jugabilidad en general, se pasó a crear un sistema de Lobby que permitirá
a los usuarios crear salas en las cuales podrán conectarse otros
jugadores, y que posteriormente permitirá cargar el escenario que se haya
elegido para que los jugadores puedan jugar entre ellos. El script principal
se encarga de gestionar 2 tipos de usuarios, un MasterClients que será el
que cree la sala, el que decidirá el nivel donde se jugara y el que dira
cuando empieza la partida. El otro tipo de son los clientes normales, los
cuales son los que simplemente entran en la salas. La asignación de
estos clientes se hace por orden de entrada, el primero en entrar a una
sala (que es el que la crea) es el cliente maestro, todos los demás que
entres después de él en esa sala serán clientes normales. Las salas están
123
configuradas para que solo se permitan dos usuarios en cada una, y de
que una vez una partida empiece no se pueda acceder a ella. El script
principal que se encarga de gestionar todo lo mencionado anteriormente
es el siguiente:
public class Example3_Menu_Lobby: Photon.MonoBehaviour {
public int selGridInt = 0;
public string[] selStrings = new string[] { "Space Station 1", "Space Station 2", "Lava
World 1", "Lava World 2" };
public GUISkin skin;
public static Example3_Menu_Lobby SP;
private bool launchingGame = false;
private bool showMenu = false;
private int serverMaxPlayers = 2;
private string serverTitle = "Loading..";
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
void Awake() {
SP = this;
showMenu = false;
}
public void EnableLobby(){
launchingGame = false;
showMenu = true;
}
void OnGUI() {
if (!showMenu) {
return;
}
//Back to main menu
if (GUI.Button(new Rect(40, 10, 150, 20), "Back to main menu")) {
LeaveLobby();
}
if (launchingGame) {
LaunchingGameGUI();
}
else if (!PhotonNetwork.isMasterClient &&
!PhotonNetwork.isNonMasterClientInRoom) {
//First set player count, server name and password option
CreationSettings();
}
else {
//Show the lobby
ShowLobby();
124
}
}
void LeaveLobby() {
//Disconnect fdrom host, or shutduwn host
PhotonNetwork.LeaveRoom();
Example3_Menu.SP.OpenMenu("multiplayer");
showMenu = false;
}
private string hostSetting_title = "No server title";
private int hostSetting_players = 2;
S
O
D
VA
R
SE
E
R
S
void CreationSettings() {
GUI.BeginGroup(new Rect(Screen.width / 2 - 175, Screen.height / 2 - 75 - 50, 500,
250));
GUI.Box(new Rect(0, 0, 350, 150), "Server options");
O
H
C
E
ER
D
GUI.Label(new Rect(10, 20, 150, 20), "Server title");
hostSetting_title = GUI.TextField(new Rect(175, 20, 160, 20), hostSetting_title);
selGridInt = GUI.SelectionGrid(new Rect(25, 50, 180, 100), selGridInt, selStrings, 1);
if (GUI.Button(new Rect(240, 125, 100, 20), "Go to lobby")) {
StartHost(hostSetting_players, hostSetting_title);
}
GUI.EndGroup();
}
void StartHost(int players, string serverName) {
players = Mathf.Clamp(players, 1, 64);
serverTitle = serverName;
PhotonNetwork.CreateRoom(serverName, true, true, players);
}
void ShowLobby() {
string players = "";
int currentPlayerCount = 0;
foreach (PhotonPlayer playerInstance in PhotonNetwork.playerList) {
players = playerInstance.name + "\n" + players;
currentPlayerCount++;
}
GUI.BeginGroup(new Rect(Screen.width / 2 - 200, Screen.height / 2 - 200, 400,
180));
GUI.Box(new Rect(0, 0, 400, 200), "Game lobby");
GUI.Label(new Rect(10, 40, 150, 20), "Server title");
GUI.Label(new Rect(150, 40, 100, 100), serverTitle);
GUI.Label(new Rect(10, 60, 150, 20), "Players");
125
GUI.Label(new Rect(150, 60, 100, 100), currentPlayerCount + "/" +
serverMaxPlayers);
GUI.Label(new Rect(10, 80, 150, 20), "Current players");
GUI.Label(new Rect(150, 80, 100, 100), players);
GUI.Label(new Rect(10, 120, 150, 20), "Selected Map");
GUI.Label(new Rect(150, 120, 100, 100), selStrings[selGridInt]);
if (PhotonNetwork.isMasterClient) {
if (GUI.Button(new Rect(25, 140, 150, 20), "Start the game")) {
HostLaunchGame();
}
}
else {
GUI.Label(new Rect(25, 140, 200, 40), "Waiting for the server to start the
game..");
}
GUI.EndGroup();
}
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
void OnCreatedRoom() {
//Called on masterclient
photonView.RPC("SetServerSettings", PhotonTargets.OthersBuffered,
hostSetting_title);
}
void OnMasterClientSwitched(PhotonPlayer newMaster) {
Debug.Log("The old masterclient left, we have a new masterclient: " + newMaster);
if (PhotonNetwork.player == newMaster) {
photonView.RPC("SetServerSettings", PhotonTargets.OthersBuffered,
serverTitle);
}
}
[RPC]
void SetServerSettings(string newSrverTitle) {
serverTitle = newSrverTitle;
}
void HostLaunchGame() {
if (!PhotonNetwork.isMasterClient) {
return;
}
//Close the room for future connections
PhotonNetwork.room.open = false;
PhotonNetwork.room.visible = false;
photonView.RPC("LaunchGame", PhotonTargets.All);
}
126
[RPC]
void LaunchGame() {
PhotonNetwork.isMessageQueueRunning = false;
launchingGame = true;
}
void LaunchingGameGUI() {
//Show loading progress,
GUI.Box(new Rect(Screen.width / 4 + 180, Screen.height / 2 - 30, 280, 50), "");
if (Application.CanStreamedLevelBeLoaded((Application.loadedLevel + 1))) {
GUI.Label(new Rect(Screen.width / 4 + 200, Screen.height / 2 - 25, 285, 150),
"Loaded, starting the game!");
if (selGridInt == 0){
Application.LoadLevel(("Battle Scene 1 Platform (no obs)"));
}
if (selGridInt == 1){
Application.LoadLevel(("Battle Scene 1 Platform (with obs)"));
}
if (selGridInt == 2){
Application.LoadLevel(("Battle Scene 2 LavaField (no obs)"));
}
if (selGridInt == 3){
Application.LoadLevel(("Battle Scene 2 LavaFiled (with obs)"));
}
}
else {
GUI.Label(new Rect(Screen.width / 4 + 200, Screen.height / 2 - 25, 285, 150),
"Starting..Loading the game: " +
Mathf.Floor(Application.GetStreamProgressForLevel((Application.loadedLevel + 1)) *
100) + " %");
}
}
}
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
Finalmente, dentro de cada una de las escenas que se carguen
dentro del juego, se agregó un script se en encarga de gestionar los
jugadores que se encuentran dentro de la sala, mantiene la conexión
entre los dos, muestra cuando se conectan y cuantos jugadores se
encuentran dentro de la sala y muestra la latencia del jugador. Y además
muestra botones los cuales permiten regresar al menú principal del juego.
Ese script es el siguiente:
127
void Awake() {
//RE-enable the network messages now that we've loaded the right level
PhotonNetwork.isMessageQueueRunning = true;
}
void OnGUI() {
if (PhotonNetwork.connectionState == ConnectionState.Disconnected) {
//We are currently disconnected: Not a client or host
GUILayout.Label("Connection status: We've (been) disconnected");
if (GUILayout.Button("Back to main menu")) {
Application.LoadLevel(("Example3_lobbymenu"));
}
}
else {
//We've got a connection(s)!
if (PhotonNetwork.connectionState == ConnectionState.Connecting) {
GUILayout.Label("Connection status: Connecting");
}
else {
GUILayout.Label("Connection status: Server!");
GUILayout.Label("Connections: " + PhotonNetwork.playerList.Length);
if (PhotonNetwork.playerList.Length >= 1) {
GUILayout.Label("Ping to first player: " + PhotonNetwork.GetPing());
}
}
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
if (GUILayout.Button("Disconnect")) {
PhotonNetwork.Disconnect();
}
}
}
//Client&Server
void OnDisconnectedFromPhoton() {
Debug.Log("Lost connection to the server");
}
//Server functions called by Unity
void OnPhotonPlayerConnected(PhotonPlayer player) {
Debug.Log("Player connected from: " + player);
}
void OnPhotonPlayerDisconnected(PhotonPlayer player) {
Debug.Log("Player disconnected from: " + player); }
Para el manejo de la sincronización de las unidades dentro del
juego, cada prefab de las unidades utiliza un script proveniente de Photon
llamado PhotonView, con este script puesto, todos los jugadores que
128
estén en una partida podrán ser capaces de observar el objeto y ver como
interactúa con su entorno. Para identificar a quien le pertenece cada
objeto dentro del juego con un PhotonView, cada uno posee un id el cual
oscila entre 1000 y 1999 para el primer usuario, entre 2000 y 2999 para el
segundo usuario, y así sucesivamente; por ende, cada usuario puede
poseer hasta 1000 elementos. Y para lograr que los métodos utilizados en
una unidad puedan afectar o ser vistos por otra, es necesario llamarlos
S
O
D
puede ejecutar un método en un cliente y puede ser visto
oA
puede afectar
V
R
E
Smisma sala, para usarlos
a cualquier otro cliente que se encuentre
en
la
E
R
S
O
antes del nombre del método
se
coloca [RPC] y al momento de hacer una
H
Cse desea que afecte a otros se utiliza de esta
E
R
llamada al método
que
E
D
manera:
utilizando los llamados RPC (Remote Procedure Call), con estos, se
photonView.RPC ("LaunchGame", PhotonTargets.All);
Se utiliza la función “photonView.RPC” en la cual se utiliza como
parámetros el nombre del método que se desee ejecutar y el o los
objetivos que serán capaces de detectar dicha función.
Para el manejo de la conexión con base de datos, se utiliza una
clase llamada DBConnect en la cual se tiene una URL con la cual se
conectara a un archivo PHP que maneja todas las conexiones con base
de datos, y se tiene un método Connect al cual se le pasan en forma de
Json la información el archivo PHP debe recibir y él se encargará de
manejar toda esa información de manera transparente para el juego. Para
el manejo de los JSON, se utiliza un código similar al presentado a
continuación:
129
var jsonPrueba = JsonConvert.SerializeObject (new {nick = formNick.Trim (), pass =
formPassword.Trim ()},
new JsonSerializerSettings () {Formatting = Newtonsoft.Json.Formatting.None});
using (WebClient wc = new WebClient ())
{
wc.Headers [HttpRequestHeader.ContentType] = "application/x-www-formurlencoded";
string HtmlResult = wc.UploadString (url, jsonPrueba);
return HtmlResult;
4.6.
EVALUACIÓN DEL SISTEMA
Para determinar la efectividad
S
O
D
A
V
y el alcance
del software
R
E
S
E
R
S
HdeO
del sistema con la finalidad
detectar imperfecciones y posibles errores
C
E
R
E corregirlos de manera efectiva.
a tiempo D
y poder
desarrollado, realizaron pruebas a lo largo de cada una de las iteraciones
4.6.1. PRUEBA DE ACEPTACIÓN
Fine (2002) define la prueba de aceptación como una técnica para
medir la relación entre el usuario y el sistema haciendo énfasis en
factores como la adaptabilidad, rapidez del aprendizaje y la aceptación del
diseño por parte de usuario con las operaciones del sistema. En efecto,
las pruebas de aceptación marcan el camino a seguir en cada iteración,
indicándole al equipo de desarrollo hacia donde ir y en qué puntos o
funcionalidades se debe poner el mayor esfuerzo y atención.
Dado que el presente trabajo de investigación no posee una
muestra a analizar sino una unidad de análisis, las pruebas de aceptación
se aplicaron a diversos usuarios que tuvieron acceso al juego mediante el
uso de un computador.
4.6.1.1.
DISEÑO DE LA PRUEBA DE ACEPTACIÓN
Para el presente proyecto se manejó el test de aceptación como un
cuestionario aplicado a los usuarios que tuvieron acceso al juego, para
130
este caso, un total de 20 usuarios. Con esta prueba se buscó determinar
factores básicos de la integración del usuario con el juego, basándose en
resultados ponderados del uno (1) al cinco (5).
Las condiciones de evaluación fueron explícitas en el cuestionario
el cual estuvo diseñado como se muestra a continuación:
S
O
D
A
ESTRATEGIA POR TURNOS CON CAPACIDAD MULTIJUGADOR
V
R
SE
E
R
S
Test de Aceptación HO
C
E
R
Instrucciones
DE
VIDEOJUEGO DE NAVEGADOR WEB DE GÉNERO
Antes de realizar el siguiente test, por favor asegúrese de haber
realizado todas las operaciones disponibles en el videojuego tantas veces
como desee. Se le realizarán una serie de preguntas con relación al nivel
de aceptación que usted tiene ante la aplicación desarrollada.
Las
respuestas varían en valores numéricos del uno (1) al cinco (5), siendo
uno (1) “Deficiente”, dos (2) “Regular”, tres (3) “Bueno” y cuatro (4) “Muy
Bueno”. Asegúrese de leer cuidadosamente cada pregunta y en caso de
no entender consultar con algún miembro del equipo de desarrollo.
Gracias por su apoyo.
1. Evalúe la interfaz gráfica del juego
1
2
3
4
2. Evalúe el Diseño de las Unidades
1
2
3
3. Evalúe los Mapas
4
131
1
2
3
4
4. Evalúe la jugabilidad
1
2
3
4
5. Evalúe la Aplicación Web
1
2
3
4
S
O
D
6. Evalúe la fluidez en las interfaces del juego VA
ER
S
1
2
3
4
E
R
S
HO
C
E
R la fluidez en las interfaces de la Aplicación Web
7. E
Evalúe
D
1
2
3
4
4.6.1.2.
RESULTADO DE LA PRUEBA DE ACEPTACIÓN
Una vez aplicado el test de aceptación a los usuarios que
accedieron al juego, se procedieron a analizar los resultados de cada
pregunta de manera individual, identificando los resultados por usuario y
finalmente promediando el nivel de aceptación del sistema en cada uno
de estos aspectos. Se considera como buena aceptación de más de tres
y medio (3.5) y poca aceptación las calificaciones inferiores a ésta.
Los resultados del test se muestran a continuación:
En el Gráfico Nº 1 se puede observar que de los 20 usuarios que
probaron el juego, 5 indicaron las interfaces del juego como “muy buena”,
132
8 como “bueno”, 4 usuarios señalaron que era “regular” y un usuario
señaló que eran “deficientes”.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
En el Gráfico Nº 2 se puede observar que de los 20 usuarios que
probaron el juego, 2 usuarios señalaron el diseño de las unidades como
“muy bueno”, 13 “bueno” y 5 usuarios indicaron que era “regular”.
133
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
En el Gráfico Nº 3 se puede observar que de los 20 usuarios que
probaron el juego, 6 usuarios señalaron el diseño de los mapas como
“muy bueno”, 8 “bueno”, 4 usuarios indicaron que era “regular” y 2
usuarios señalaron que era “deficiente”.
134
En el Gráfico Nº 4 se puede observar que de los 20 usuarios que
probaron el juego, 1 usuario evaluó la jugabilidad como “muy buena”, 16
“buena” y 3 usuarios indicaron que era “regular”.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
En el Gráfico Nº 5 se puede observar que de los 20 usuarios que
probaron el juego, 3 usuarios evaluaron la Aplicación Web como “muy
buena”, 10 “buena”, 3 usuarios indicaron que era “regular” y 1 usuario
señalo que era “deficiente”.
135
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
En el Gráfico Nº 6 se puede observar que de los 20 usuarios que
probaron el juego, 2 usuarios evaluaron la fluidez en las interfaces de la
Aplicación Web como “muy buena”, 14 “buena”, 3 usuarios indicaron que
era “regular” y 1 usuario señalo que era “deficiente”.
136
En el Gráfico Nº 7 se puede observar que de los 20 usuarios que
probaron el juego, 4 usuarios evaluaron la fluidez en las interfaces del
juego como “muy buena”, 10 “buena”, 4 usuarios indicaron que era
“regular” y 2 usuarios señalaron que era “deficiente”.
D
R
SE
E
R
S
O
H
C
E
ER
S
O
D
VA
4.6.2. PRUEBA DE ESTRÉS
Esta prueba se utiliza normalmente para romper el sistema. Se va
doblando el número de usuarios que se agregan al sistema y se ejecuta
una prueba de carga hasta que se rompe. Este tipo de prueba se realiza
para determinar la solidez del sistema en los momentos de carga extrema
y ayuda a los desarrolladores a determinar si el sistema rendirá lo
suficiente en caso de que la carga real supere a la carga esperada.
Para el presente proyecto, se aplicó una prueba de estrés haciendo
múltiples solicitudes de registro de usuarios e inicio de sesión, además de
guardado y cargado de una partida respectivamente.
137
4.6.2.1.
RESULTADO DE LA PRUEBA DE ESTRÉS
Resultados de la Prueba de Estrés para el Inicio de Sesión:
Nº de usuarios
Latencia
S
O
D
115msVA
R
ESE
10
15
110ms
R
S
HO
C
E
R
DE
20
118ms
Tabla Nº 1: Resultados de la Prueba de Estrés para el Inicio de Sesión.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Resultados de la Prueba de Estrés para el Registro de Usuarios:
Nº de usuarios
Latencia
10
130ms
15
140ms
20
150ms
Tabla Nº 2: Resultados de la Prueba de Estrés para el Registro de Usuarios.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
Resultados de la Prueba de Estrés de latencia dentro de las
partidas:
138
Nº de usuarios
Latencia
10
150ms
15
180ms
20
200ms
S
O
D
VA
Tabla Nº 3: Resultados de la Prueba de Estrés de latencia dentro de las partidas.
Fuente: Carlos Sotolongo y Leonardo Fuenmayor
O
H
C
E
ER
R
SE
E
R
S
Según Nielsen (1996) existen tres límites importantes en el tiempo de
D
respuesta:
-
0,1 segundo: es el límite en el cual el usuario siente que está
“manipulando” los objetos desde la interfaz de usuario.
-
1 segundo: es el límite en el cual el usuario siente que está
navegando libremente sin esperar demasiado una respuesta del
servidor.
-
10 segundos: es el límite en el cual se pierde la atención del
usuario, si la respuesta tarda más de 10 segundos se deberá
indicar algún mecanismo por el cual el usuario pueda interrumpir la
operación.
Dado que los resultados de tiempo de respuesta arrojaron
unidades de tiempo aceptables en concordancia con la anterior
clasificación, se puede decir el tiempo de respuesta garantiza en un alto
porcentaje la estabilidad y solidez de la aplicación.
139
CONCLUSIONES
Se realizó un proceso de recolección de información mediante la
consulta de manuales y textos referenciales, los cuales permitieron
determinar los requerimientos técnicos y operativos para el desarrollo y
funcionamiento del videojuego de estrategia por turnos, cumpliendo con el
S
O
D
A
V
Se realizó una planificación general del proyecto
de
desarrollo de la
R
SE
E
aplicación involucrando prácticas propias
de
la metodología de desarrollo
R
S distribuyendo el desarrollo de
O
H
SCRUM, como el Release
Planning,
C
E
R
Eperíodo determinado. Esto permitió dedicar más tiempo a
módulos D
en un
objetivo de analizar los requerimientos para el desarrollo mismo.
los módulos de mayor prioridad y garantizar la culminación del proyecto
en el tiempo establecido.
Se diseñaron las estructuras de información que abarcan los
diagramas de casos de uso de la aplicación, de modelado de datos, de
entidad relación, de despliegue y de interfaces, de igual forma se diseñó
el videojuego de estrategia, desarrollando los elementos visuales, los
cuales abarcan las unidades y escenarios; así como también la
composición de los elementos multimedia como los sound Effects.
Una vez finalizado el diseño, se procedió a codificar el mismo,
utilizando PHP como lenguaje de servidor y HTML, Javascript, CSS y el
Framework AngularJs para el desarrollo de las interfaces de la aplicación
Web que será utilizada para la gestión de usuarios. Para el desarrollo del
juego de estrategia por turnos se utilizó el motor gráfico Unity, en conjunto
con una serie de pluggins como GridFramework e iTween.
140
Se aplicaron pruebas de aceptación y estrés, planteadas en la
metodología de desarrollo SCRUM, para determinar la aceptación de los
usuarios y la solidez de la aplicación bajo condiciones de evaluación
específicas. Los resultados obtenidos para ambas pruebas fueron
satisfactorios.
S
O
D
A
futuras investigaciones en el área de desarrollo deV
videojuegos
de
R
E
S el uso de diversas
estrategia por turnos. De igual manera,R
seE
demuestra
S
O
herramientas para el desarrollo
de videojuegos como el Motor gráfico
H
EdeCantecedente para trabajos de investigación con
R
Unity. ServiráE
también
D
objetivos similares, así como fuente de consulta para aquellos interesados
Los resultados de este proyecto pueden servir como insumo para
en el ámbito de las nuevas tecnologías orientadas a medios de
entretenimiento.
141
RECOMENDACIONES
En este proyecto de investigación, se plantearon objetivos dirigidos
a la solución de una problemática específica con la implementación de
herramientas determinadas y concluyendo con el desarrollo de una
S
O
D
A
V
complementación de cualquiera de sus aspectos.
Por tanto, a
R
SE para que futuras
E
continuación, se presentan algunas recomendaciones
R
OS
investigaciones tengan C
unaH
guía de posibles mejoras o ampliaciones que
E tratada en la presente investigación.
R
E
podrían partir
de
la
temática
D
aplicación orientada a satisfacer necesidades puntuales. Sin embargo,
este proyecto abre muchas posibilidades para el mejoramiento o
-
Desarrollar más elementos dentro de la jugabilidad, como
habilidades especiales, Perks y nuevos tipos de Batalla
-
Desarrollar una mayor cantidad de elementos disponibles para
el usuario, como mapas y unidades.
-
Implementar un servidor que permita la conexión simultanea de
más de 20 jugadores.
142
REFERENCIAS BIBLIOGRÁFICAS
LIBROS
• Regina Obe y Leo Hsu (2012). PostgreSQL Up and running.
O’Reilly
• Brad Green y Shyam Sehadri (2013). AngularJS. O’Reilly.
• Alan Thorn (2013). Learn Unity 2D Game Development. APRESS.
S
O
D
VA
• Sue Blackman (2013). Beginning 3D Game Development with Unity
R
E
S
E
Shyam Seshadri y Brad Green (2014).
AngularJS Up and Running.
R
S
O’Reilly
HO
C
E
ER y Susan Douglas (2005). Postgres SQL. Sams.
Korry
DDouglas
4. APRESS.
•
•
Segunda Edición.
• Adam Freeman (2014). Pro AngularJS. APRESS.
TRABAJOS DE GRADO
• Igor Galochkin (2013) Implementation of a cross-platform strategy
multiplayer game based on Unity 3D. (tesis de grado) Universidad
de Munich, Alemania.
• Pan Dam Tien (2013) Android Android Simulation videogame
based on Unity 3D engine. (tesis de grado) Vietnam National
University, Vietnam.
• David Lopez (2013) Study of multiplayer features for Unity
Applications. (tesis de maestria) Universidad Politecnica de
Catalonia, España.
• Jason Dansie (2013) Game development in Unity. (tesis de grado)
Helsinki Metropolia University of Applied Sciences, Finlandia.
• Rainier Araujo, Miguel Peña (2012) Sistema de información web
para a gestión de pólizas para corredores de seguros con interfaz
143
para dispositivos móviles. (tesis de grado) Universidad Rafael
Urdaneta, Venezuela.
• G. Frassca (2001) Videogames of the oppressed: Videogames as a
means for critical thinking and debate. (Magister de diseño de
información y tecnología) Georgia Institute of Technology. Estados
Unidos.
FUENTES ELECTRÓNICAS
•
•
S
O
D
VA
R
E
S
E
http://www.statisticbrain.com/blizzard-entertainment-statistics/
R
S
http://www.statisticbrain.com/call-of-duty-franchise-game-salesHO
C
E
statistics/
DER
• http://vgsales.wikia.com/wiki/Best_selling_Square-Enix_games
• http://vgsales.wikia.com/wiki/Best_selling_Microsoft_games
• http://www.eluniversal.com/vida/121104/videojuegos-en-fuga
• http://www.jesperjuul.net/text/gameplayerworld/
ARTÍCULOS DIGITALES
• Simone Belli y Cristian López Raventós. (2008). Breve historia de
los videojuegos.
http://psicologiasocial.uab.es/athenea/index.php/atheneaDigital/arti
cle/view/570
• J. L. González Sánchez, N. Padilla Zea, F. L. Gutiérrez, M. J.
Cabrera. (s.f) De la Usabilidad a la Jugabilidad: Diseño de
Videojuegos Centrado en el Jugador.
http://aipo.es/articulos/2/10.pdf