Defensa Mayo 25 - ARNM - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Grabación de defensa de proyecto final.
Bienvenido a tu presentación y defensa del proyecto final. Bueno, has comparecido a la hora acordada, así que vamos a proceder a esta presentación.
00:00:00
Aunque es información con la que ya contáis de antemano, simplemente recordarte que tu presentación consta o se prevé que sea de un máximo de 15 minutos.
00:00:10
Ya te indiqué que a los 15 minutos no voy a detener, no voy a intervenir hasta que no llegue a unos 20 minutos, etc.
00:00:24
Pero bueno, se espera que más o menos ocupe ese tiempo.
00:00:31
Y posteriormente habrá una ronda de preguntas, algunas que ya tengo de los compañeros que han visto tu entrega.
00:00:34
y mías que surjan a partir de la defensa también, de la presentación
00:00:40
y que bueno, dependerá un poco pero suele ser de alrededor de 10 minutos
00:00:45
aparte de eso pues
00:00:49
si tienes alguna duda previa pues la resolvemos ahora mismo y si no pues
00:00:52
cuando me digas vemos que hora es y
00:00:56
empiezan a contabilizar esos 15 minutos
00:00:59
Empezamos ya
00:01:02
vale pues te voy a marcar a las 18 y 6 que va a cambiar en breves
00:01:03
cuando quieras puedes empezar bueno me pregunto ante que nada porque no sé quién más va a ver
00:01:08
esta presentación soy en un aula estoy presentando el proyecto y bueno es un multiproyecto que he
00:01:16
resumido en una solo como la extensión del mismo es más o menos grande voy a sentar en la parte
00:01:23
más que me parece más interesante de explicar para esta presentación el proyecto nace
00:01:30
Como una necesidad de integrar controles.
00:01:38
Originalmente era para integrar controles virtuales dentro de aplicaciones.
00:01:42
En este caso fue cuando se propuso la tarea de Dane, del Saxon, que era un granal que se movía y tal.
00:01:47
Le presenté a algunas personas el juego y la mayoría de ellas me pidieron una versión que fuese con controles, ¿vale?
00:01:53
Entonces, yo no la quería hacer con controles porque no era la idea, pero bueno.
00:02:03
Me metí en el tema de integrar los controles y ahí me di cuenta que Unity no viene con unos assets o con una forma de implementación fácil para una persona que no sabe de este mundo para que se pueda integrar, para generar rápidamente una aplicación para WebGL o Android.
00:02:06
que debo aclarar yo yo no sabía y yo he aprendido aquí en el curso y yo me esperaba que este tipo de
00:02:27
controles fuesen nativos como yo vengo del mundo de visuales y qué cosa ha sido donde está casi
00:02:34
todo hecho bueno no casi todo pero la mayoría de las cosas tú colocaste el control y ya tienes una
00:02:39
aplicación funcional con la medida que necesitas y es cierto que perdón me faltó esa parte entonces
00:02:44
Entonces lo que hice fue empezar a investigar porque había que hacer los controles de cero, había que hacer desde la lógica de todo, que por un lado está bien, pero para quien no sabe, pues se le hace cuesta arriba todo este tema.
00:02:54
voy a resumir un poco
00:03:10
porque realmente el proyecto
00:03:14
que si bien empezó con todo lo que
00:03:15
el control visual y el control electrónico
00:03:17
derivó
00:03:20
después en la necesidad de que cuando yo
00:03:21
en los controles virtuales quise
00:03:23
darle más funcionalidad
00:03:25
integrar teclado, integrar mandos
00:03:27
y todo para que funcionase todo junto
00:03:29
y me di cuenta que
00:03:31
estaba metiendo peras con manzanas
00:03:33
o sea una cosa era
00:03:36
todo lo que es la interfaz visual
00:03:37
Era un mando más, era un input más, pero lo que yo quería hacer realmente era un controlador de varias interfaces. De ahí salió la necesidad de generar una clase que reemplazase lo que era el input manager que viene con Unity.
00:03:39
De ahí dejé aparcado todo lo que ya tenía hecho de los controles virtuales y me lancé a generar esta implementación.
00:03:59
No con el objetivo inicial de reemplazar completamente el Input Manager, pero a medida que estuve aprendiendo cosas, me di cuenta que sí era factible y era conveniente en algunos casos hacerlo.
00:04:12
Porque me daba, como yo lo estaba haciendo, yo me proveía de las funcionalidades que me faltaban del Input Manager.
00:04:25
¿Vale? Entonces, llegando a este punto, empecé a integrar varias cosas.
00:04:31
De hecho, voy a ejecutar la demo que tengo aquí y a medida que la voy ejecutando voy a ir explicando cosas que están todas integradas.
00:04:39
La demo, cuando empieza...
00:04:47
De hecho, perdón, voy a...
00:04:52
No voy a arrancar la demo en el orden que corresponde porque no voy a ir donde me interesa comentar.
00:04:54
Aquí son los contrarreactores.
00:05:00
Cuando...
00:05:05
es el concepto mío de lo que es un mando y lo que yo quería era integrar varios distintos
00:05:12
distintos tipos de entradas que se transformarán en un solo gamepad y no tener que estar yo como
00:05:32
desarrollador y luego el que la persona que esté utilizando herramientas que no esté pensando en
00:05:39
cómo pueden acceder a tal o cual de los de los tipos de los dispositivos para poder implementar
00:05:46
los ojos yo quería hasta ver todo eso en un tiempo en una clase entonces de aquí empezó a surgir toda
00:05:53
la idea bueno ya había surgido ya ya se empezó a implementar de hecho esto tenía otra implementación
00:06:02
que he quitado que en el futuro pretendo añadir por ejemplo añadir controles de giro controles
00:06:07
de voz etcétera etcétera y todo transformarlo siempre en un gamepad que sea estándar
00:06:13
bueno por ahí va todo lo del concepto ahora lo que voy a hacer es ejecutar la demo desde el diálogo 1
00:06:23
de la primera pantalla. La demo consta de 4 módulos. Nuevamente quito el sonido. La demo consta de 4 módulos. El primer módulo, realmente que fue el de los controles virtuales,
00:06:31
derivó de ahí el módulo que va a ser el X-Input, que es el Input Manager, el reemplazo. Y voy a empezar por el último de los módulos que creé, que es el de la presentación.
00:06:55
Y este módulo realmente lo creé porque necesitaba yo mostrar la demo de una manera un poco interactiva, porque no ser un juego no es una cosa evidente lo que estás haciendo, entonces necesitas explicarte las cosas que están sucediendo.
00:07:07
Esto no es una demo para un usuario final, para un jugador, es una demo para un desarrollador, para el que entiende lo que está pasando por detrás.
00:07:23
El primer componente que voy a mostrar aquí va a ser el de esta interfaz que parece un diálogo de un juego RPG, ¿vale?
00:07:31
Básicamente se consta de... Aquí vamos a ver un poco el código para entender qué está haciendo.
00:07:43
Si ves, sale un personaje en la batalla.
00:07:48
Bueno, incluso lo voy a silenciar, ¿vale?
00:07:54
Bueno, lo voy a bajar.
00:07:57
Vale, este.
00:08:05
vale, en principio
00:08:05
como necesito también he explicado una parte que es
00:08:08
de la demo, que son los sólidos
00:08:09
por eso lo voy a dejar, después lo voy a quitar
00:08:11
entonces, esta demo
00:08:13
lo que tiene es
00:08:15
hablando de una forma muy
00:08:17
resumida, he creado una
00:08:20
lista, es una lista
00:08:22
con frases, que son las que van apareciendo aquí
00:08:24
que como se pueden ver también se pueden
00:08:26
formatear, etcétera
00:08:28
encienden HTML
00:08:29
para presentarlo, porque es un componente
00:08:32
text
00:08:34
ahora mismo se me ha ido el nombre
00:08:35
pero el componente este que se utiliza
00:08:37
en Unity
00:08:40
y lo que hace
00:08:41
básicamente es esto, escena 1
00:08:44
para generar los diálogos
00:08:46
el componente
00:08:49
es muy simple, voy a generarlo de esta manera
00:08:50
¿por qué quiero mostrar esto?
00:08:52
porque aparte de los textos
00:08:54
cada línea
00:08:56
cada vez que hago un ente
00:08:58
un siguiente va mostrando una de estas líneas
00:09:00
Además de esto, tiene la facilidad
00:09:03
Que se lo he añadido
00:09:05
Después de estar dando una vuelta con esto
00:09:06
De que yo puedo añadir
00:09:09
Estados de avatar
00:09:11
Los avatares son estos que aparecen aquí
00:09:12
Estos avatares dentro del componente
00:09:14
Se añaden
00:09:17
Aquí dentro de una lista de avatares
00:09:19
Que son imágenes
00:09:21
Entonces
00:09:22
Los avatares
00:09:23
Puedes indicar que avatar quieres que aparezca
00:09:25
De esta manera, con un índice
00:09:29
O también se lo puedes indicar con
00:09:31
un texto. El texto lo que va a hacer, por ejemplo, este, que está diciéndole, quiero que esta línea
00:09:32
me aparezca con una avatar de Smile, de Swambrisa. ¿Cómo él decide cuál es Smile? Simplemente porque
00:09:39
va a buscar dentro de la lista de avatares, el que ponga la palabra Smile va a sacar una sublista
00:09:47
y de esas va a sacar una al azar y esa es la que va a mostrar. Entonces, con eso te permite no estar
00:09:51
repitiendo, sino que saca un poco, de alguna manera, un poco al azar los avatares que quieres.
00:09:56
También tiene, estoy explicando muy rápido lo que es esto porque no es lo importante, ¿vale? No es lo importante del proyecto. También tiene aquí un avatar máximos. Este índice indica hasta qué avatar se va a tomar como un avatar por defecto.
00:10:02
Este está indicando que es el 2.
00:10:20
Entonces, el 0, el 1 y el 2, cuando yo le indique un avatar
00:10:22
o indique uno que sea inválido,
00:10:25
él va a tomar uno de estos tres por defecto.
00:10:28
Entonces, para que no se caiga el programa,
00:10:30
para que siga avanzando, vamos a eso.
00:10:31
¿Vale?
00:10:34
Básicamente era eso.
00:10:35
Y la otra particularidad que tiene,
00:10:36
bueno, tiene más funciones, pero la otra es esto,
00:10:39
que le puedo dar una llave, una key a cada uno de los diálogos.
00:10:41
¿Para qué uso esto?
00:10:44
Cuando está en ejecución el código,
00:10:45
por ejemplo este que se llama dentro del de por ejemplo estoy preguntando constantemente por el
00:10:47
diálogo en que en qué línea y con la que sacó es para esto lo puedo sacar por un número lo puedo
00:10:56
sacar por un texto y en función de la que estoy presentó a una cosa es un evento básicamente vale
00:11:03
entonces tengo dos tipos de eventos lo que estar que cuando entra en el texto en el diálogo y el
00:11:10
page change que cuando cambia ya sea para adelante para atrás porque además este componente tiene
00:11:18
ahora no lo hace porque no lo tengo interactivo que vaya utilizando el botón supuestamente me
00:11:26
aparece un botón previo yo podría volver atrás voy a seguir con la demo porque esto básicamente
00:11:39
explicado lo que hace este componente el sonido bueno cierto tiene una característica más
00:11:48
un poco lo que está aumentando
00:11:56
los avatares que son estos que están cargados que si lo colocas también en el índice si aquí
00:12:03
yo por ejemplo en los avatares como el índice negativo simplemente así en vez del 5 que va
00:12:09
ser el índice 5 de los que están aquí si es un menos 5 lo único que va a ser es la
00:12:15
según frío es para ir variando un poco y por último tiene dos componentes más este
00:12:20
que es el sonido voy avanzando que los sonidos aquí está jugando con los pitch que son estos
00:12:28
de aquí el sonido es uno solo aunque podría tener una lista de sonido vale pero yo he jugado
00:12:35
solamente con uno y siempre estoy cambiando el pitch para arriba y para abajo y aquí tengo un
00:12:40
mi límite cuanto más arriba y cuanto más abajo puedo variar entonces con eso voy generando
00:12:45
distintas voces si lo coloco más abajo en una voz más grave será así y lo otro es que voy a continuar
00:12:49
y bueno no voy a volver atrás pero también tiene una lista de música que se ejecuta
00:13:02
automáticamente y un fade como se ha podido ver cuando entra y cuando sale en la escena
00:13:06
tiene un fake que le indicó el color así es lo que va seguimos con los controles virtuales que
00:13:11
es la segunda demo que tiene este problema voy a ir avanzando los controles virtuales como he
00:13:16
dicho se componen el x gamepad que yo he creado es este esto es lo que internamente estoy
00:13:22
controlando que yo estoy representando como analista para ver los valores entonces la como
00:13:29
lo reemplazo yo con respecto al input manager. El input manager tienes un get down, get down,
00:13:35
bueno, tienes un serie de métodos que aquí tienes sus equivalentes, pero tienen más
00:13:41
datos. Por ejemplo, el digital. Aquí, ahora voy a explicar por qué tiene un digital o
00:13:46
un análogo y un vector, ¿vale? Pero el get down, por ejemplo, aquí se puede ver por
00:13:51
una propiedad que se llama isPreset, pero también en código. Estoy saltando un poco
00:13:56
lo que quería comentar pero
00:14:03
este es mi clase
00:14:04
¿vale? esta es una variable que está llamando mi clase
00:14:11
y este
00:14:13
es un método que yo he copiado
00:14:15
el mismo nombre que lo que tiene el input manager
00:14:17
¿vale? para que sea fácil de implementar
00:14:19
a quien lo quiera implementar en su
00:14:21
código, para que no sea un cambio muy grande
00:14:23
lo único que voy cambiando es que yo
00:14:25
tengo una serie de botones
00:14:27
y ejes que están con
00:14:28
un nombre definido, que son los que están dentro de mi
00:14:31
x gamepad
00:14:33
¿vale? entonces siempre vamos
00:14:35
a llamar de la misma manera el botón Start, el botón
00:14:37
Up, el botón Home,
00:14:39
el Stick, que son para los
00:14:41
Stick analógicos, etc.
00:14:42
Estos son los componentes
00:14:45
que están dentro y
00:14:47
lo bueno es que no importa si tú lo manejas
00:14:49
desde aquí o puedes manejar desde un
00:14:51
...
00:14:52
No sé si está encendido.
00:14:55
No sé si es todo.
00:14:58
No, y acá justo no funciona.
00:15:01
Bueno, lo estoy volviendo
00:15:02
a encender, a ver si...
00:15:08
al mando.
00:15:11
Lo que quería decir es que no importa desde dónde lo marques.
00:15:11
Ah, no, perdón, perdón, perdón, me estoy mirando porque estoy
00:15:15
mostrando los controles virtuales,
00:15:20
no estoy mostrando todavía los demás.
00:15:21
Estos son todos controles virtuales, ¿vale?
00:15:23
Entonces, aquí se puede ver cómo recubre los valores.
00:15:25
Hay algunas características especiales,
00:15:30
como, por ejemplo, lo que es la emulación de controles
00:15:32
analógicos, que si yo muevo, arrastro,
00:15:35
aquí se puede ver que en el analógico va cambiando el
00:15:38
valor, ¿vale?
00:15:40
Yo puedo controlar qué tan largo es el arrastre que tiene, todo eso.
00:15:41
Puedo controlar que se arrastre solamente en vertical o en horizontal.
00:15:45
Una serie de propiedades que le he añadido a los controles para que emulen lo mejor posible lo que es un mando real dentro de lo que es la pantalla.
00:15:48
Aquí estoy explicando lo de los controles horizontales, verticales.
00:15:58
Voy a saltarme un poco porque esto más o menos se entiende.
00:16:03
La implementación de los sticks son sticks dinámicos que van apareciendo en pantalla en función de donde presionas.
00:16:06
Que, por cierto, aquí yo estoy ejecutando en PC.
00:16:13
En estricto rigor, en PC no deberían aparecerme los controles.
00:16:17
Yo los estoy forzando porque en PC no tienes...
00:16:20
Si estoy con un ratón, estoy con un ratón en el control SS.
00:16:22
Yo los estoy forzando y por eso aparecen, ¿vale?
00:16:26
Entonces, como digo, tienes dos tipos de controles y además tienes el botón L3 y R3
00:16:28
que no lo había mencionado, que ahora lo voy a mencionar
00:16:35
en la demo
00:16:37
que lo haces con doble clic
00:16:38
bueno, ya le he pasado, voy a seguir avanzando
00:16:40
los efectos, vale
00:16:43
los controles
00:16:46
tienen unos efectos básicos para poder
00:16:49
utilizar, que lo, bueno, ahora mismo
00:16:51
la demo te muestra que no
00:16:53
tienes, ninguno habría habilitado
00:16:55
el web, he echado
00:16:57
le agregué una pequeña sombra
00:16:58
todo es controlable y todo desde el
00:17:01
desde el
00:17:03
desde el inspector
00:17:05
¿vale? que aquí voy a mostrar una cosa
00:17:09
que antes, que me parece interesante mostrarla
00:17:11
bueno, tiene aquí los efectos de
00:17:13
presionado, por ejemplo este que rebote
00:17:15
que parezca una burbuja, ese es el track
00:17:17
por cierto, aquí voy a
00:17:18
detener un momento la demo para mostrar algo
00:17:21
estoy en la 3
00:17:23
bueno, en realidad
00:17:24
la misma 1 me vale
00:17:30
porque está limpia, por eso lo estoy
00:17:32
cargando aquí
00:17:34
Una cosa que no he explicado yo en la memoria, no la he explicado,
00:17:35
que me parece interesante explicarla aquí, es que para poder implementar
00:17:47
todas las funcionalidades de los controles en el inspector,
00:17:50
he tenido que programar el inspector, que me parece interesante también hacerlo.
00:17:53
Y aquí, por ejemplo, son tantas las funcionalidades que tienen los controles
00:17:59
que aquí se me hacía un panel interminable de LED.
00:18:02
Lo que he hecho yo es sintetizar los controles para que, por ejemplo, aquí se haga aparecer el A, pero todas las propiedades están dentro cuando yo las marco aquí y están divididas en segmentos según su funcionalidad.
00:18:07
Me explico. Cuando la abrigo, esto es simplemente para mostrar la propiedad que tiene ahora. Aquí yo lo podría colocar. Lo que sea. Podría incluso, para cambiarle una imagen, yo no he querido complicarme la vida, vas aquí al botón A y le cambias la imagen dentro del control aquí.
00:18:20
entonces
00:18:40
lo que estaba comentando
00:18:42
dentro del panel
00:18:44
yo tengo dividido por funcionalidades
00:18:46
ahora mismo funciona con un botón digital
00:18:48
que tú presionas y ya está
00:18:50
pero el mismo control
00:18:51
y lo he comentado ahí en la memoria
00:18:54
y la DEMA también lo explica
00:18:57
todos los controles que están definidos
00:18:58
del mando
00:19:01
todos los controles
00:19:02
son el mismo control
00:19:04
simplemente con las propiedades cambian su funcionalidad
00:19:05
me explico
00:19:08
Tenemos aquí que este funciona como un botón digital
00:19:09
Y aquí tiene un iconito que por cierto
00:19:12
Que va cambiando en función de lo que nosotros
00:19:14
Definamos, ¿vale? El icono en el inspector
00:19:16
Si le coloco que sea analógico
00:19:18
Ha cambiado el inspector
00:19:20
He buscado un icono
00:19:21
Simplemente para que visualmente
00:19:24
Estaba trabajando como un analógico
00:19:25
Y ya nos cambia la funcionalidad
00:19:28
¿Cómo trabajo con un analógico?
00:19:30
Si este, voy a ejecutar esto
00:19:32
Pero no importa, lo vemos simplemente
00:19:34
Para ver la parte de la funcionalidad de esto
00:19:36
como puedes ver, para donde vaya
00:19:38
va cambiando el valor
00:19:43
¿vale? y eso lo controlamos
00:19:45
aquí, le estoy diciendo que permite los valores
00:19:47
en todos los verticales, le digo que
00:19:49
solamente los horizontales, entonces
00:19:51
los verticales ya no le hace caso
00:19:53
eso se cambia aquí, otra cosa que también
00:19:55
aquí visualmente
00:19:57
voy a ocultar las propiedades
00:19:58
visualmente puedes ver que es lo que está pasando con los controles
00:20:00
si te das cuenta aquí en el analógico
00:20:03
va cambiando la barra
00:20:05
además de que aquí te va indicando
00:20:07
son cosas que no realmente no son quizás útiles directamente pero visualmente ayudan mucho vale
00:20:09
para estar hecho sigo esto es el control lo que son el comportamiento como botón analógico que
00:20:15
es arrastrando y finalmente tenemos el comportamiento del mismo control lo transformamos
00:20:23
en un stick virtual como se ve aparece por detrás lo que es el rango donde se puede mover y
00:20:28
Y lo podemos mover como si fuese un stick cualquiera, ¿vale?
00:20:35
Aquí al lado se puede ver que algunos valores van cambiando.
00:20:40
Aquí hay unas flechitas, etcétera, etcétera.
00:20:44
Que eso sirve cuando tenemos esto así.
00:20:47
Se va mostrando ahí y se van cambiando de valor y sabemos lo
00:20:50
que está pasando es que se están sucediendo cosas, ¿vale?
00:20:52
Podría yo, por ejemplo, tener varios controles en pantalla
00:20:56
que sean sticks.
00:21:01
Podría tener todos los controles como stick y todo funciona sin problema al mismo tiempo.
00:21:04
Y todo con su lectura aparte.
00:21:07
La implementación de esto.
00:21:10
Esto es específico de los controles virtuales.
00:21:12
Puedes hacer un juego que use más de un stick.
00:21:15
Eso ya es cosa de quien vaya a integrarlo a su juego.
00:21:17
Porque además el control este se puede integrar de una manera standalone.
00:21:20
No necesitas integrar todo el proyecto para poder ejecutarlo.
00:21:26
Paso a la siguiente demo.
00:21:29
entonces
00:21:30
la siguiente me voy a pasar rápidamente porque
00:21:34
esto es una implementación de lo que es el
00:21:38
X Gamepad
00:21:40
perdona, solo indicarte que llevas 20 minutos, ¿vale?
00:21:41
continúa, pero era la indicación
00:21:44
que te decía
00:21:46
ok, trato de hacerlo lo más rápido posible
00:21:47
voy a pasar rápidamente esto
00:21:49
aquí lo interesante de la implementación
00:21:51
del X Gamepad
00:21:54
es que he añadido lo que es
00:21:55
un control de
00:21:58
de Autofire
00:21:59
por ejemplo, ahí se puede ver
00:22:02
que está activo
00:22:04
y lo estoy activando con lo que dice en pantalla
00:22:06
con Start y un botón
00:22:08
y con Select
00:22:09
ah bueno, es que ha avanzado
00:22:10
pero bueno, voy a seguir
00:22:14
vale, las implementaciones que tiene el X-Gamepad
00:22:15
especial son
00:22:20
Autofile, que tienen remapeo
00:22:22
y tienen remapeo físico, existen dos tipos de
00:22:23
mapeo importantes, una cosa es
00:22:26
lo que yo mapeo desde un
00:22:28
teclado, desde un ratón, a lo que sea
00:22:30
a mi control X-Gamepad
00:22:32
a mi control que he creado y lo otro es el mapeo físico, o sea, el lógico que es una vez ya asignado los controles,
00:22:34
yo puedo mapear, decirle un botón es este, lo puedo cambiar, ¿vale? Son dos tipos de mapeo
00:22:41
y me estoy pasando rápidamente para poder explicar esto porque me queda muy poco tiempo.
00:22:46
Aquí en pantalla, bueno, no lo he podido mostrar, pero que no se la demos a dar cuenta que originalmente
00:22:51
W, W, A, S, D es el control del stick izquierdo en teclado y ahora lo he cambiado, he mapeado físicamente
00:22:56
para que sean estas otras teclas, las que están acá, ¿vale?
00:23:04
O estas, ¿vale?
00:23:07
Simplemente para que se muestre que fácilmente por código se
00:23:10
puede realizar TMPyro, ¿vale?
00:23:13
Voy a seguir avanzando porque, y llego a la última parte de la
00:23:16
demo, que realmente era el plato fuerte, pero, bueno,
00:23:21
ya me he comido el tiempo en el otro,
00:23:24
que son la generación de listas de movimientos, ¿vale?
00:23:26
Voy a adelantar, adelantar, ¿vale?
00:23:30
Uf, qué feo se ve esto.
00:23:34
Voy a ejecutarlo de nuevo.
00:23:36
No sé por qué a veces se van los colores de esto.
00:23:37
Realmente, lista de movimientos.
00:23:44
Lo que he hecho yo es implementar,
00:23:46
ya que tengo el control del mando,
00:23:48
es proveer una forma de generar listas de movimientos,
00:23:49
como si fuesen juegos de lucha, juegos de acción, lo que sea,
00:23:53
donde hay secuencias de movimientos.
00:23:56
Y yo, por medio de la clase,
00:23:58
indicar si se ejecuta uno de esos movimientos.
00:24:00
Básicamente es eso.
00:24:02
He generado un concepto que se llama VFrame,
00:24:03
que es
00:24:05
en un lapso de tiempo
00:24:07
lo que yo he generado es un momento
00:24:11
donde leo estados
00:24:14
leo estados de gamepad
00:24:16
asigno estados lógicos
00:24:18
porque por ejemplo determino si no es posible hacer
00:24:21
izquierda y derecha al mismo tiempo
00:24:23
entonces lo que hago, voy generando
00:24:25
estoy explicando muy rápido, lo sé, pero es que
00:24:27
no tengo que hacer así
00:24:29
en ese estado lo que hago es
00:24:30
determinar frames
00:24:33
lógicos válidos
00:24:35
y si no son lógicos, voy generando frames
00:24:37
nuevos. Y con esto lo que hago es secuencias
00:24:40
de movimientos lógicas, ¿vale?
00:24:42
Y donde hay combinación de botones
00:24:43
con mandos, etcétera, etcétera.
00:24:46
A ver, voy a ir rápidamente
00:24:49
a ver si llegamos a la parte de la
00:24:50
demo. Vale.
00:24:52
Es una implementación rápida,
00:24:55
¿vale? Esto lo, se crea
00:24:56
bueno,
00:24:58
no voy a mostrar el código porque se me va a ir el tiempo,
00:25:00
Pero básicamente con esto lo que hago es, sin tener que codificar yo todo lo que es la implementación del motor de movimientos, el usuario simplemente, si voy a, lo muestro porque es lo más fácil, lo muestro en la escena 4 y esto es, por ejemplo, para generar un movimiento hago esta línea.
00:25:02
Con esta línea solamente yo estoy indicando al motor que este movimiento se llama de esta manera y que se ejecuta de esta manera.
00:25:28
Es el motor que lo resuelve. ¿Cómo después yo lo obtengo? Simplemente después tengo aquí un GetMove, que lo hago en el update, y simplemente el GetMove me dice, ¿se ha ejecutado tal movimiento? Sí, me trae el nombre del movimiento. Yo no tengo que preocuparme más como desarrollador.
00:25:35
Entonces, con eso puedo integrar todo este tipo de funcionalidades como movimientos, bueno, lo que está viendo aquí. La gracia del motor que yo he creado es que además permite movimientos en árbol, que son estos, movimientos que son requisitos para otros movimientos.
00:25:57
rápidamente le explico aquí por ejemplo el primer movimiento que se llama custom mode y tiene el
00:26:13
río y si ejecutas puedes ejecutar el siguiente si me sale bueno hay una implementación si lo haces
00:26:18
por ejemplo si hago el de arriba tengo los dos de abajo como posibles entonces por eso se ponen
00:26:26
verde y si ejecuta uno de abajo sigue la rama y se pueden así hacer x ramas hacia adentro para
00:26:32
la nueva complejidad esto sirve tanto para como lo que estoy colocando tiene un demo de lucha
00:26:41
y esto es una demo como si fuese un juego de arcade un juego de hacks y flash del mercado
00:26:49
que sea donde tienes aquí movimientos y en función de lo que estaba haciendo también puedes ir
00:26:56
generando ahora mismo porque estoy un poco nervioso tratando de sacarlo pero la idea
00:27:00
es que esto se sacan sin que consideren los los de las direcciones solamente con botones
00:27:08
ya tengo un poco un poco porque tengo que terminar
00:27:17
pues eso sería la presentación más o menos de lo que hace mi clase
00:27:29
me ha faltado tiempo para explicarlo
00:27:33
lo sé, pero
00:27:35
pues eso
00:27:36
vale, perfecto
00:27:39
dame un segundillo que
00:27:41
recopilo un poco cosas que te quiero
00:27:43
preguntar
00:27:45
prefiero las preguntas
00:27:46
bueno
00:27:48
lo primero, como tutor
00:27:51
también transmitirlo
00:27:54
es un proyecto muy muy avanzado
00:27:55
que está muy bien, además lo
00:27:58
se ha estado probando y
00:27:59
bastante robusto además
00:28:01
que digo que está muy conseguido
00:28:02
y de hecho
00:28:05
en relación a esto
00:28:07
la primera pregunta
00:28:08
¿crees que
00:28:09
mejora mucho?
00:28:13
la respuesta se sabe
00:28:15
lo que quiero es ver el razonamiento
00:28:16
con respecto al input system
00:28:18
que no sé si lo has
00:28:19
la alternativa que ha ofrecido Unity
00:28:20
como paquete frente al input manager
00:28:23
¿qué ventajas tiene
00:28:25
este paquete?
00:28:28
entiendo que hay algunas obvias
00:28:31
pero hay alguna más también vale a ver la más importante para mí no es un reemplazo completo
00:28:32
porque quise hacerlo pero primero que algunos event system y todo eso están amarrados con el
00:28:38
input manager entonces no te lo puedes quitar de encima vale existía un hack para poder yo
00:28:43
inyectar valores dentro de youtube manager pero sirve solamente en algunos yuri que lo estuve
00:28:49
investigando pero lo descarté la idea del miedo original bueno original pero la verdad es que
00:28:53
después quería hacer era el reemplazo completo porque se podía hacer en una de las ventajas más
00:28:58
evidentes para mí es la separación de controles sin tener que estar configurando el input manager
00:29:06
vale había una cosa que no está explicando la demo y que la verdad que es bastante si lo tenía
00:29:12
que haber explicado que era esto mira esto que yo no le explicaba el legacy vale no sé si alcanzaste
00:29:21
a entender que era aún sin una explicación básicamente lo que hace el legacy es leer lo
00:29:29
que hacía el input manager o sea yo podía acceder a los mismos valores podía acceder a las mismas
00:29:34
variables y eso por ejemplo ahora mismo lo más evidente con el teclado si yo hago derecha
00:29:38
izquierda tengo aquí asignada en mi x gamepad lo que es el de el de paz y aquí con el w a s de el
00:29:47
stick en el de gas y como tú sabes en la flecha está asignado a los dos entonces no puedes
00:29:54
discriminar con ellas a no ser que la configure tú manualmente desde el manager antes de compilar
00:30:01
pues ahora mismo están las dos enlazadas que es el comportamiento que tendría si estuviesen
00:30:07
leyendo el horizontal y el vertical.
00:30:12
¿Me entiendes? Vale.
00:30:15
Ese es uno de los...
00:30:17
de las razones más pensibles
00:30:19
para lo que yo usaría esto. Bueno, por lo que
00:30:20
he diseñado realmente esto.
00:30:23
Vale. Luego en la documentación, aparte
00:30:25
de la memoria,
00:30:27
que sí que es verdad que la presentación me ha faltado
00:30:28
un poquito más de empaque con
00:30:31
respecto a lo que es el proyecto, es decir,
00:30:33
no el proyecto, lo que es las conclusiones
00:30:34
que has derivado, que es la primera parte,
00:30:37
parte del factor tiempo.
00:30:39
Pero
00:30:41
aparte has presentado un manual
00:30:41
que está muy bien documentado y muy
00:30:44
extenso, además hay incluso
00:30:46
cosas que no has comentado en la presentación como
00:30:48
esta tipografía que has adaptado para ir mostrando
00:30:50
los controles, que hay más abajo
00:30:52
incluso, pero eso
00:30:54
lo vemos en la memoria
00:30:56
pero te quería preguntar
00:30:59
que me sigue faltando
00:31:01
una cosa que es básica
00:31:05
y esto no te lo digo como
00:31:07
porque además es muy fácilmente corregible
00:31:08
que es, al principio de tu presentación
00:31:10
y de tu memoria hablas de que es una forma
00:31:12
de acercar a desarrolladores
00:31:14
sobre todo principiantes
00:31:16
aunque evidentemente lo puede usar cualquiera
00:31:18
un
00:31:20
uso basiquísimo
00:31:22
es decir, de primeras a la persona
00:31:24
que quiera implementar este paquete
00:31:26
este asset
00:31:28
que es hablar de que tienes que incorporar
00:31:29
estos prefabs
00:31:32
primero a tu proyecto para poder capturarlos
00:31:34
porque es verdad que
00:31:36
aquí hay tanto código metido
00:31:37
etcétera, que a no ser que te pongas a analizar
00:31:40
los ejemplos, en este manual me
00:31:42
faltan primeros pasos
00:31:44
y que sea, incorpora este prefab
00:31:46
a tu juego
00:31:48
y a partir de ahí captúralo
00:31:50
es decir, esos prefabs no es obvio
00:31:52
que estén ahí, luego
00:31:54
evidentemente cuando ya sabes usarlo, ah bueno, sí hay que arrastrar el prefab
00:31:56
porque ahí es donde están todas las clases
00:31:59
y todo el desarrollo, pero falta
00:32:00
ese paso, es decir
00:32:02
un ejemplo muy básico
00:32:03
Esto arrastra instancias
00:32:06
De esta manera y ya lo usas
00:32:09
Igual que me has hecho
00:32:10
A mí y al resto del tribunal
00:32:11
Las instrucciones de cómo coger
00:32:15
El package para ver la demo
00:32:17
Faltaría una vez arrancas tu juego
00:32:18
Tienes que incorporar
00:32:21
Estos prefabs en la escena
00:32:23
Y hablar
00:32:25
Es verdad que en el manual está
00:32:26
La herramienta de diálogo
00:32:28
La herramienta de los inputs virtuales
00:32:30
Pero en ningún momento
00:32:32
Igual lo has puesto y yo no lo he encontrado
00:32:33
has puesto este primer paso, que parece
00:32:35
una tontería, pero como alguien
00:32:37
no se enganche directamente
00:32:38
a ver cómo va la herramienta en lo más básico,
00:32:41
igual pierde esa gente.
00:32:44
¿Vale? Y es una tontería.
00:32:45
No, no, es válido.
00:32:48
De hecho, si subo esto,
00:32:49
porque mi intención es subirla
00:32:51
al store de Unity,
00:32:52
posiblemente me lo echen para atrás por eso, porque
00:32:55
uno de los requisitos es
00:32:57
colocar precisamente ese ejemplo.
00:32:58
Ese ejemplo primero.
00:33:00
Es así.
00:33:02
Sí, esta herramienta yo no sé luego a qué precio y de qué manera, pero esta herramienta desde luego pulida ya con las cositas de esta documentación, yo le veo un potencial muy alto. Así que sí, yo te animo a que lo hagas.
00:33:05
Bueno, sobre los inputs virtuales
00:33:20
Yo lo he probado en móvil
00:33:25
¿Ves alguna
00:33:27
Es decir
00:33:29
¿Ves algún problema con este manejo de los inputs virtuales
00:33:31
En pantallas táctiles?
00:33:33
A ver, yo no
00:33:35
Las pantallas táctiles
00:33:37
No es equivalente a un mando
00:33:39
Empezando por ahí
00:33:40
Pero sí que es cierto que es una demanda
00:33:42
¿Vale? Entonces
00:33:46
Yo los inputs manuales
00:33:46
los he creado precisamente por esa demanda que me han pedido y por eso mismo he intentado generar
00:33:48
esta otra manera de leer los inputs del árbol de movimientos que no simplificaron lo máximo posible
00:33:58
para que sean válidos dentro de un entorno virtual con pantalla táctil. Entonces, por eso la segunda
00:34:06
demo, que ahora no me ha funcionado, no sé muy bien
00:34:14
por qué, todo el mundo se me funciona menos ahora
00:34:16
por eso la segunda demo era
00:34:17
básicamente todos los comandos eran
00:34:19
presionar A, A, A, B, B, B y ya está
00:34:22
y con eso generaban movimientos
00:34:24
que con eso sí que diable
00:34:26
a usarlo dentro de una pantalla táctil
00:34:28
¿me entiendes?
00:34:30
lo que es movimientos tipo de lucha y todo eso
00:34:32
a mí me consta porque eso es difícil
00:34:34
no se puede hacer porque no tienes el
00:34:36
no tienes el tacto, no tienes
00:34:37
la funcionalidad
00:34:40
se la puedes implementar de una manera muy simple
00:34:41
pero no te va a dar
00:34:43
en eso soy consciente
00:34:45
que es así
00:34:48
y luego, ya última pregunta
00:34:48
hablar de que te has apoyado en
00:34:51
en Ollama, te has apoyado en
00:34:53
inteligencia artificial
00:34:55
todo, es decir
00:34:56
el script, evidentemente
00:34:59
no es una crítica en absoluto que se use la IA
00:35:01
es como se trabaja
00:35:04
evidentemente
00:35:05
pero
00:35:07
digamos, aparte de también
00:35:08
tu bagaje previo
00:35:11
laboral, etcétera, que tiene sus conocimientos
00:35:13
más avanzados probablemente que los del curso
00:35:15
suelen tener en este ciclo
00:35:17
pero digamos que la IA
00:35:19
¿cuánto has tenido que pulir?
00:35:21
¿cómo la has enfocado
00:35:24
el uso de la IA para este proyecto?
00:35:25
porque es muy complejo
00:35:27
ocupa muchas cosas y bueno
00:35:28
un poco tu opinión
00:35:30
o tu forma de trabajar
00:35:32
de hecho mi idea es
00:35:34
que no sube un vídeo a mi canal hablando del tema
00:35:36
porque me parece súper interesante
00:35:39
la IA
00:35:41
la he utilizado sobre todo
00:35:42
para ahorrarme mucho trabajo
00:35:45
de leer
00:35:47
cuando empecé a hacer
00:35:47
el proyecto, como ves es grande y todo eso
00:35:51
es grande y he podido avanzar mucho
00:35:53
gracias a que la IA me ha dado directamente
00:35:55
hay que utilizar esta herramienta
00:35:57
hay que usar esto
00:35:59
que se podría haber hecho
00:36:00
me imagino que igual hubiese llegado a un
00:36:02
a un resultado parecido a lo que tengo
00:36:05
pero evidentemente con mucho más tiempo
00:36:08
¿Cómo he integrado la IA?
00:36:10
De dos maneras. Una, que corriéndolo en local, me ha apoyado de Oyama para integrarlo dentro de lo que es el Visual Studio y que me vaya completando sobre todo las funciones que no sabía.
00:36:12
abrió un prompt
00:36:25
y le decía, necesito
00:36:28
colocar un ejemplo, necesito
00:36:30
hacer que este valor
00:36:35
en el tiempo vaya
00:36:36
variando, porque todavía no tenía
00:36:38
muy claro lo de los ler, o cómo funcionaban
00:36:40
los updates, entonces
00:36:42
me ayudaba mucho con eso, y la otra
00:36:44
manera era directamente,
00:36:46
abría una página, por ejemplo,
00:36:48
le decía, léeme este manual
00:36:50
y dime si esta función me sirve,
00:36:52
a ver, que era una locura
00:36:54
tiene muchas cosas
00:36:58
para usar, muchas herramientas
00:36:59
muchos métodos, todo lo que es
00:37:02
la integración de Unity
00:37:04
y
00:37:06
te vuelves loco
00:37:07
te vuelves loco, y entonces
00:37:08
la mejor manera de utilizar ahora
00:37:11
la IA es de esa, es
00:37:13
ahorra mi trabajo, dime si esto me sirve o no
00:37:15
si no, pasa otra cosa, también
00:37:17
también para preguntarte
00:37:19
cómo podría aceptar cosas, porque me daban
00:37:23
orientaciones
00:37:25
porque claro, al principio
00:37:26
con los controles virtuales
00:37:29
me hace un lío
00:37:31
tengo que explicar, yo vengo de todo lo que es
00:37:33
el mundo Visual Basic de los 90
00:37:35
donde yo trabajaba
00:37:37
haciendo herramientas, no haciendo programación
00:37:39
herramientas
00:37:41
entonces todo este
00:37:42
desarrollo no me da extraño para mí
00:37:45
hacer esto de hacer una herramienta
00:37:47
para otras personas
00:37:49
me resulta más o menos natural
00:37:50
pero claro, todos los conceptos nuevos
00:37:52
he tenido que aprenderse
00:37:55
o que tampoco sabía hacer
00:37:56
en diciembre con el curso ese
00:37:58
que se recomendaba
00:38:00
y todas estas cosas
00:38:02
hombre, necesité
00:38:04
ayuda para ingerirlo todo
00:38:07
de una manera más rápida
00:38:09
porque si no, no sale
00:38:10
no sale lo mismo, o saldría
00:38:12
solamente teníamos una partida
00:38:14
Vale, pues nada, por mi parte
00:38:16
poco más, darte las gracias por la presentación
00:38:19
y por
00:38:23
¿Qué preguntas te hacían mis compañeros?
00:38:24
¿Me interesa?
00:38:26
No, la que te he estado...
00:38:27
Ya te he leído alguna.
00:38:28
La IA, por ejemplo, era una de ellas.
00:38:29
Ah, sí, sí, de eso le estoy explicando el tema,
00:38:30
porque sí que estaban con la posibilidad del tema.
00:38:34
Es que hay mucho malentendido de qué es lo que es la IA.
00:38:37
Se piensa que es decirle qué es lo que te haga
00:38:41
y que el programa...
00:38:43
Y ojalá lo hiciera.
00:38:43
Bueno, a ver, que no quite el puesto de trabajo,
00:38:45
pero ojalá hiciera el trabajo de manera perfecta.
00:38:47
Pero te va a hacer que tengas que ser más productivo.
00:38:50
Claro. Una muestra de lo que te acabo de mostrar.
00:38:53
Perfecto. Pues nada, muchas gracias. Sobre las calificaciones, aunque no puedo dar un plazo exacto, no va a ser algo inmediato, van a tardar porque al ser la segunda convocatoria, aunque a vosotros os vaya a constar como la primera de proyecto, porque hubo otra en enero, va asociada a la convocatoria extraordinaria.
00:38:59
Es decir, va a ser avanzado junio, ¿vale? No puedo decir fecha porque hasta que no se pongan todas las notas de los exámenes de convocatoria extraordinaria no va a estar.
00:39:16
Seguramente si hay algún cambio en este sentido o que vaya a ser antes, pues os lo comunicaré, pero eso, que no va a ser algo inmediato.
00:39:26
Pues nada más, muchas gracias y ánimo con la herramienta y cuando publiques esos vídeos o esa documentación, pues yo estaré interesado.
00:39:34
Así que todo lo que vaya subiendo estaré atento, ¿vale?
00:39:42
vale, genial, pues nada, muchas gracias
00:39:46
gracias a ti, ánimo con todo
00:39:49
hasta luego
00:39:51
- Materias:
- Imagen y Sonido
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Segundo Curso
- Subido por:
- Daniel M.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 3
- Fecha:
- 21 de mayo de 2025 - 18:47
- Visibilidad:
- Clave
- Centro:
- IES CIFP a Distancia Ignacio Ellacuría
- Duración:
- 39′ 54″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 339.85 MBytes