Tutoría 4 - DEIM - UT0,1,2 - Curso 24·25 - 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 tutoría de DEIM realizada el 19 de noviembre de 2024.
Hola, bienvenidos a una tutoría de Dame.
00:00:01
Esta tutoría, imagino que habéis estado viendo las que dejé colgadas, no sé en qué punto estáis.
00:00:06
Sobre todo es una tutoría de dudas que tengáis hasta este momento.
00:00:12
Si no, pues explicaré alguna cosilla más, pero sobre todo está dirigida a que me hagáis dudas
00:00:17
ahora que ya habéis tenido un tiempo para ver la unidad 1 y la 0,
00:00:23
que bueno, el acero pues sigue, digamos, estando en marcha, ¿no? Por eso de que es transversal, que ya hablé en su momento, pero bueno, no sé cómo lo lleváis, un poco comentadme dudas o de la tarea, problemas que estéis encontrando.
00:00:28
Bueno, veo que lo lleváis todo bastante bien y bastante claro
00:00:44
Me indican... todavía me estoy pegando con el temario y no he llegado a la tarea
00:00:58
Vale, bueno, las tareas son importantes en el sentido de que es donde se aplica
00:01:05
Y donde realmente uno se pone en juego todo, pero bueno, como siempre
00:01:12
Primero no son obligatorias, etc.
00:01:19
Entonces, bueno, otro compañero me indica, de momento la UT1 bien y la 0 acabo de terminarla, me faltaría la 2. Vale, sí, la 2 la abrí hace, bueno, menos de una semana, bueno, entiendo que todavía estaréis con ella, sí que la 1 y la 1 sobre todo sí que es la que más deberíamos llevar ahora mismo ya vista, incluso con la tarea pues realizada.
00:01:22
Dudas, aunque no hayáis hecho la tarea o tal, bueno, es verdad que en esta ocasión teníais bastantes vídeos que van hablando de la tarea, en específico de la 1 sobre todo, entonces entiendo que las dudas ya en esos vídeos se van resolviendo, aparte de todo lo que se iba explicando de la 0 en realidad, de cómo se funciona.
00:01:44
indican ya tengo todas hechas
00:02:04
lo que no sé si están muy bien
00:02:07
vale, bueno, a ver, esto es verdad
00:02:08
que hasta que no me la envíéis y la corrija
00:02:10
pues va a haber feedback que no voy a poder dar
00:02:12
si tenéis dudas en el proceso
00:02:15
pues perfecto
00:02:17
plantearlas por favor
00:02:18
si no, pues sobre todo el criterio
00:02:20
es que
00:02:23
vais consiguiendo lo que se pide
00:02:24
es decir, lo bueno y malo
00:02:27
de este módulo
00:02:29
bueno, en realidad en lo nuestro pasa
00:02:30
en casi todo, se puede llegar por varios caminos.
00:02:32
Entonces, mientras no se desvíe mucho de lo que se ha explicado
00:02:36
y se aplique lo que se dice en el enunciado,
00:02:39
si se consigue el objetivo, pues estará bien.
00:02:41
A veces se puede llegar de un camino más rápido
00:02:44
o de forma más optimizada, pero bueno, de cara a las tareas, eso.
00:02:46
Lo importante es que vayáis consiguiendo los objetivos
00:02:51
y si os bloqueáis en algo, pues me preguntéis.
00:02:58
Me indican de mirar la tarea 2 y me surge una duda,
00:03:00
Pero como no he mirado el temario igual es una duda tonta
00:03:02
Puede serlo
00:03:04
Porque igual está en el temario
00:03:06
Pero bueno, si quieres comentarla
00:03:07
Es verdad que la unidad 2 no es la que más me interesa
00:03:09
Ahora mismo
00:03:12
Ya habrá momentos, pero bueno
00:03:13
Si estás con ello, planteala
00:03:15
Y si veo que es de leerte el temario
00:03:17
Pues te lo indico
00:03:20
En ausencia de otras
00:03:21
Me escribe
00:03:24
Se indica que para las entradas del jugador
00:03:29
puedes elegir joystick o teclado, ¿vale?
00:03:31
¿Es excluyente o podrían ponerse las dos?
00:03:34
No, no es excluyente.
00:03:36
Cuando vayáis leyendo el tema 2, lo primero, ¿vale?
00:03:37
Bueno, el tema 2 es en el que ya se van introduciendo interacciones,
00:03:41
pues eso, que ya podréis ir indicando mediante, en este caso,
00:03:44
pues joystick, teclado o con el dispositivo que sea que capte inputs,
00:03:48
¿no? Entradas, interacciones, pues vais a poder ya asignar acciones, ¿no?
00:03:53
Que es básicamente lo fundamental para que un videojuego sea tal, ¿no? Que sea interactivo. Entonces, se habla de que en este punto, bueno, ya llevo unos años, digamos que dentro de Unity había un sistema tradicional de capturar, capturar como captar, mejor dicho, esos inputs, había un método tradicional, ¿vale?
00:03:58
que se gestiona con lo que se llama los Axies.
00:04:23
Cuando lleguéis al tema lo veréis, en los Project Settings va a haber una forma
00:04:25
de gestionar las entradas, estas interacciones, dentro del menú Edit.
00:04:29
Ah, perdonad, que no os estoy compartiendo la pantalla, perdonad.
00:04:36
Os comparto que si no me pongo a hablar y, pues bueno, le hablo al aire.
00:04:39
¿Veis mi monitor, verdad? Bueno, que es una pantalla de Unity.
00:04:46
Si la veis, vale. Dame un segundo que se grabe bien. Vale. Pues lo que estaba comentando, que ya me había lanzado yo. Dentro de esos comportamientos tradicionales para que Unity pueda gestionar las entradas que vamos teniendo, si vamos a esta sección de Edit, en el menú Edit, Project Settings, hay una sección específica de lo que se llama el Input Manager.
00:04:51
¿Vale? Input Manager, en oposición a Input System, creo que esto queda bastante destacado además en los apuntes, Input Manager es el sistema clásico, digamos, de gestión que todavía sigue vigente, pero es verdad que está siendo reemplazado o complementado, se podría decir, por otro sistema que es este Input System, que aquí vamos a manejar de una forma un poco por encima y lo pone el temario que ni siquiera es, hay un apartado que sí, pues lo que es la filosofía,
00:05:17
Pero luego el uso es más avanzado y en estas alturas de curso es complicada. Es un sistema que está pensado para gente que ya se lleva mejor con Unity que nosotros en estos momentos. Porque ya a nivel de programación tiene más miga que aún así.
00:05:47
oye si os ponéis también con los tutoriales dejo bastante documentación creo para ir viendo las
00:06:03
bondades básicamente sobre todo tiene más cosas sobre todo por lo que este input system el que
00:06:09
es el novedoso novedoso que bueno que en realidad llevar varios años ese sistema lo que incorpora
00:06:16
es que es mucho más versátil a la hora de detectar distintos inputs y esto es sobre todo en un
00:06:22
momento en el que pues hay más dispositivos con la realidad virtual pues que va con pues eso con
00:06:27
gafas que van captando las inclinaciones, los movimientos, luego los móviles también
00:06:33
con sus osciloscopios, acelerómetros, etc. Había un momento que había muchas más formas
00:06:37
de meter inputs que las que estaban planteadas por defecto mediante este input manager. Eso
00:06:45
es como una introducción. Cuando os metáis en estos axes vais a ver que tiene varias
00:06:51
opciones, se describe en el
00:06:56
contenido de ese tema 2, pero vais a ver que hay momentos
00:07:00
en el que dentro de cada uno de estos ejes, que estos son nombres que vamos
00:07:05
dando a conjuntos, ¿vale? Estos que se despliegan, conjuntos de instrucciones
00:07:09
que recogen, pues eso, ese input, se puede decir de qué tipo es
00:07:13
si mediante un movimiento de ratón, vais a ver que son movimientos
00:07:17
pues eso, basados sobre todo para
00:07:21
para gamepads o teclado y ratón, ¿vale?
00:07:23
Por eso falta un poco todo lo más avanzado en cuanto a móviles y VR, por ejemplo, ¿vale?
00:07:29
Que también se puede hacer con librerías que hay aparte, ¿vale?
00:07:34
Que gestionan los access de otra forma, pero bueno, así por defecto vais a ver
00:07:37
pues eso, que se refiere a teclas o botones de un teclado,
00:07:42
que también pueden ser de un gamepad, ¿vale?
00:07:47
Aunque aquí no lo ponga claramente.
00:07:50
también puede ser el movimiento de un ratón o ejes de un joystick, que realmente también se pueden asociar, dependiendo del dispositivo, a teclas de un gamepad.
00:07:53
Entonces, cuando nosotros hacemos un axis de esto, por ejemplo, este horizontal, y vais a ver que ya viene prehecho,
00:08:04
vienen varios prehechos para usarlo, porque son como los típicos, como este de movimiento, botón para movimiento negativo y positivo,
00:08:11
que son los dos ejes de dirección, por ejemplo
00:08:18
en un gamepad
00:08:21
cuando tenemos la cruceta, cuando hablo de gamepad
00:08:22
me refiero, por si acaso alguien no lo tiene
00:08:25
claro, al mando de la Xbox o de la
00:08:27
Playstation, cuando tenemos esa cruceta
00:08:29
de dirección, al final son ejes
00:08:31
opuestos
00:08:33
los de dirección, si movemos
00:08:34
el joystick o la cruceta
00:08:37
hacia la izquierda
00:08:39
pues es el valor negativo
00:08:40
que indicará que
00:08:43
mediante la programación que ya iremos haciendo, que se mueve
00:08:44
a la izquierda, si le damos a ese
00:08:47
mismo eje pero a la otra dirección, al positivo
00:08:49
¿vale? por eso están estos contrapuestos
00:08:51
que en el teclado además vais a
00:08:52
ver que se relacionan
00:08:55
con la cruceta esta típica del WAS
00:08:57
¿no? de la WASD
00:08:59
entiendo que sabéis de qué hablamos
00:09:00
bueno, está ya, está este control
00:09:02
de horizontal, si os dais cuenta, para ir de izquierda a derecha
00:09:05
para el movimiento horizontal
00:09:07
y en este momento está
00:09:08
pensado para
00:09:10
para el
00:09:12
para ser usado con
00:09:15
con teclas del teclado por ejemplo. Si aquí pusiéramos joystick estaríamos cancelando que se usen ratón y tecla, pero no hay nada que impida y si os dais cuenta aquí hay una entrada que se llama horizontal, un eje llamado horizontal, pero luego hay otro que se llama horizontal y vais a ver que se pueden hacer diferentes entradas.
00:09:16
Entonces, si aquí hacemos otra llamada igual que se llama joystick, pues aquí podemos configurar lo de joystick y funcionan en base al mismo nombre.
00:09:42
Cuando ya veáis cómo se mete el nombre del axis por código que lo pone en el tema, pues habrá que poner horizontal.
00:09:52
Dependiendo del input, si tocamos la tecla A, por ejemplo, vas a ver que es la izquierda por lo que le estamos determinando.
00:09:59
Pero si en la cruceta tocamos la tecla izquierda, se moverá a la izquierda, pero si además en los joystick le definimos otro, con estas acciones también que hay aquí, que también se explican, pues dependerá de qué detecte, de qué entrada esté detectando.
00:10:06
Entonces, no son excluyentes, se pueden poner ambas, ¿vale? Entonces, básicamente, los ejes incluso se pueden duplicar y a un mismo control darle distintos, es decir, se puede poner ahora que mouseX también sea la A, que es lo que estaba, pues ya dependiendo del contexto donde se desencadene este comando, ¿no?
00:10:20
En el tema 2, en la tarea vais a ver que ya hay que mover la nave, que se mueva, sube, baja, izquierda, derecha y gira, rota sobre sí misma para esquivar los obstáculos.
00:10:52
Bueno, pues ahí ya iremos poniendo las distintas operaciones que tienen que hacer. Esto al final son ejes preparados para ser usados con acciones que luego pongamos, pues con el transform o con lo que hagamos, o añadiendo fuerzas como veremos en la física del tema 3, pero esto al final son como instrucciones de inputs.
00:11:06
me preguntan, en la tarea de igual
00:11:28
¿qué inputs, botones ponemos para la dirección
00:11:30
y rotación? porque lo verías tú en Project Settings
00:11:32
¿no? lo suyo sería usar
00:11:34
los lógicos, pero si no me equivoco
00:11:36
y dame un segundo que me meto
00:11:38
otra vez en el enuncio de la tarea
00:11:40
si no me equivoco ya os daba
00:11:41
porque depende de la tarea a veces
00:11:43
los dejo
00:11:45
y a veces no, estamos hablando
00:11:48
de la tarea 2, bueno sí, porque en las
00:11:50
anteriores todavía no hay inputs
00:11:52
bueno, en la 0 alguno
00:11:53
puedo ver déjame un segundo que me meta vale aquí lo tenemos en la tarea 2
00:11:56
si no me equivoco no pongo que inputs hay que hacer vale ya no me acuerdo a veces pero creo
00:12:03
que no entonces podéis poner los que queráis sí que es verdad que os pediría que puede ser
00:12:10
joystick derecho del gamepad o teclas adicionales del teclado hago referencias en ocasiones
00:12:16
a elementos, pero sí
00:12:20
yo voy a poder verlo con los
00:12:23
cuando habrá vuestro proyecto
00:12:26
los project settings se guardan, entonces
00:12:29
yo podré verlo, sí, pero intentad
00:12:31
si es que si no me equivoco, sí que lo
00:12:34
poní en algún punto, intentad que sea
00:12:37
con la combinación de teclas WAS, entiendo
00:12:41
esto también por si ocurre en algún momento, teclado
00:12:43
ordenador, cuando digo
00:12:47
cuando digo las teclas WAS, son, a ver si me meto aquí en el teclado, la W para ir hacia adelante o subir, vamos, es la cruceta que tenemos aquí, que también se suele duplicar, esta cruceta se traslada a la W como la flecha de arriba, a la de izquierda, ese de abajo, de derecha, por si acaso.
00:12:48
Entonces, los suyos que uséis, de hecho, dupliquéis esta cruceta y esta
00:13:10
Que es como viene por defecto además en los ejes
00:13:18
En este sentido tampoco deberíais trastear o variar demasiado los que ya vienen preparados
00:13:20
En la horizontal vais a ver eso, que A y D se refieren a los laterales
00:13:26
Las flechas en el teclado, las que corresponden a izquierda y derecha en este WASD
00:13:30
pero también tiene la alternativa, bueno, se complementa con Lord del teclado aquí,
00:13:36
tanto si tocamos la tecla de la flecha izquierda como si tocamos la A,
00:13:41
haría la misma acción mediante este horizontal y vertical vais a ver que es arriba-abajo o SW,
00:13:46
que también son las correspondientes a WASD, entonces intentad que sea a través de esas.
00:13:52
luego por ejemplo para la rotación
00:14:01
tu BQ
00:14:05
vale, pues también se puede
00:14:07
sí, sí, sí, sin problema
00:14:09
yo luego lo voy a poder ver
00:14:11
siempre que me compartáis el proyecto de Unity
00:14:12
lo digo porque más adelante también
00:14:15
y probablemente en posteriores tareas
00:14:17
os lo pido así
00:14:19
una cosa es
00:14:20
esto ya es avanzar un poco, pero lo que os pido es que me compartáis el proyecto
00:14:22
quitando el library
00:14:25
si es posible, más que nada para que no pese
00:14:27
Todavía en estas tareas no es súper pesado el proyecto
00:14:29
Yo voy a ver
00:14:32
Al abrir aquí, al cargar el proyecto
00:14:33
Voy a ver vuestros project settings como los habéis configurado
00:14:35
Pero ojo
00:14:37
También si hacéis la cabeza en otro momento
00:14:38
A lo mejor lo que os pido es que me compartáis
00:14:41
No el proyecto en sí, todo lo que es el proyecto
00:14:42
Sino que me compartáis
00:14:45
Por ejemplo esto
00:14:47
Una parte de
00:14:49
Vuestro videojuego, de vuestra aplicación
00:14:51
Como un package
00:14:53
Y un package al final lo que hace es guardar
00:14:54
Todo esto que tenemos aquí, los scripts
00:14:57
Los assets, incluso si nos metemos en las escenas, hasta la jerarquía y todo lo relacionado con la escena.
00:14:58
Pero es verdad que lo que es el proyecto en sí, que es un orden superior, que está fuera de lo que es la escena y todo se supedita a lo que vayamos poniendo aquí,
00:15:08
eso ahí no lo voy a tener. Entonces en ocasiones, si me ponéis controles que se salen, en otros sí que ser específico,
00:15:17
Pues tenéis que hacer que la izquierda sea con tal tecla, ¿no?
00:15:24
Si me vais a hacer algo diferente, deberíais indicarlo, a lo mejor en el código mediante comentarios o, bueno, en la entrega de la tarea me lo indicáis, ¿vale?
00:15:27
Si llegara el caso de eso. Normalmente en la propia tarea se indica.
00:15:38
¿Vale? No sé si me estoy explicando.
00:15:44
¿Vale? ¿Sí? Vale.
00:15:48
Más dudas.
00:15:53
¿Tengo que ir a esta manera?
00:15:57
Vale, me pregunta una compañera. Una pregunta. Todas las veces que habrá Unity tengo que ir a External Tools y cambiarlo para Visual Studio. ¿Es normal? ¿Resulta un poco incómodo?
00:15:58
No, debería quedarse por defecto cuando abrimos Edit y Preferencias. Bueno, lo que ponía en los apuntes, que hay que escoger mediante esta opción de External Tools, habría que seleccionar de este desplegable el que os corresponda.
00:16:08
En este caso, 2019, el Visual Studio 2019 o 2022, va a dar un poco igual los suyos que escogéis el 2022.
00:16:26
En este ordenador, por lo que sea, tengo 2019 y no debería ser buscar aquí por Browse, debería ser seleccionarlo aquí y una vez se tiene aquí y se guarda proyecto y se cierra, debería estar ya seleccionado.
00:16:34
No hay que cambiarlo todas las veces, ¿no? El tuyo no se guarda, pero ¿te sale en el desplegable la versión? Sí.
00:16:47
Pues no sé por qué puede ser, entonces.
00:16:59
Debería funcionar. Nunca me he topado con este problema.
00:17:08
Porque en tu caso... Ya has conseguido, lo digo porque con esta compañera hubo conflictos al principio.
00:17:13
¿Conseguiste que el Unity corriera sin ser administrador de manera normal en los proyectos?
00:17:20
Sí, vale. Eso está resuelto.
00:17:27
Pues te lo tendría que mirar porque es una de esas cosas que a mí nunca me ha ocurrido. Por ejemplo, para que os hagáis una idea, yo si aquí escojo 2022, ¿vale? Y cierro el proyecto. Bueno, lo guardo primero y lo cierro. Si ahora lo vuelvo a abrir, ¿vale? Estoy en Unity Hub y lo vuelvo a abrir.
00:17:30
cuidado un segundico
00:17:47
bueno, se está abriendo en el otro monitor, no lo veis
00:17:48
pero se está abriendo el proyecto
00:17:51
yo ahora cuando me meta aquí
00:17:52
en edit
00:17:57
preferencias, external tools
00:17:58
ves que se mantiene al que he cambiado
00:18:01
entonces no lo sé, te lo tendría que mirar
00:18:03
porque bueno, habría que buscarlo
00:18:05
yo no tengo
00:18:07
no tengo claro por qué ocurre eso
00:18:09
vale
00:18:11
vale, a ver una cosa
00:18:13
perdonad
00:18:16
que me está abriendo aquí un código
00:18:17
buenas, esperad un segundo
00:18:20
perdón, sí dime
00:18:22
sí, pero estoy dando clase
00:18:24
sí, sí, sin problema
00:18:26
entra, entra, vale
00:18:30
a ver
00:18:33
vale, perdón
00:18:35
que estaba aquí con esto
00:18:37
que han entrado al estudio
00:18:40
vale, alguna duda más
00:18:42
así que os pueda surgir
00:18:44
de
00:18:46
sobre todo los primeros temas
00:18:48
Y mientras estoy, he cambiado justo a Visual Studio 2022 para tener el más parecido a vosotros, aunque si escogéis el 2019 realmente no vais a notar mucha diferencia si también lo tuvierais ya instalado porque pusisteis otra versión de Unity o lo que sea.
00:18:50
aparte de
00:19:08
que haya que configurar en cada ocasión
00:19:11
entrar a external tools
00:19:14
y configurarlo, más o menos os está funcionando
00:19:16
bien de cara a la tarea, estáis teniendo
00:19:18
estáis teniendo
00:19:19
así dificultades
00:19:22
a ver un segundillo
00:19:23
a ver, espera que os leo
00:19:33
Unity a mi me va bien, vale
00:19:41
si que hubo con algunos compañeros que hubo
00:19:42
algún conflictillo así al arrancar
00:19:45
pero menos esto que me acaban de decir
00:19:47
que dentro de lo malo es algo menor
00:19:49
Pero me da miedo que indique algo más preocupante, pero bueno, si el resto de cosas funciona bien, pues igual tenemos que mirar qué es que no se está guardando. En general bien. Vale, ¿cómo vais con lo...? ¿Visteis las tutorías que dejé grabadas? Vamos, que se correspondían con el año pasado.
00:19:51
Lo digo por si no, nos ponemos a ver alguna cosilla que no estaba en esos vídeos y vamos a ello. ¿Sí? ¿Más o menos os queda claro? ¿Ya está? Ah, vale, genial. Vais siguiendo, ¿no? Y perfecto. Sí, me piden palabra, cuéntame.
00:20:10
hola, es una duda que a lo mejor
00:20:35
está fuera del temario
00:20:38
actual, pero es que tengo una duda con
00:20:39
las escenas, no sé si lo
00:20:41
puedes resolver, en plan, no sé cuándo
00:20:43
hay que crear una escena
00:20:45
porque es que yo estoy avanzando para el tema del proyecto
00:20:47
vale, entonces
00:20:50
no sé cuándo debería cambiar de escena
00:20:51
o hacer otra escena diferente
00:20:53
o...
00:20:55
sí, eso ya se verá en su momento
00:20:57
vale, y es
00:20:59
bastante más avanzado, eso lo veremos
00:21:01
en el tema
00:21:03
cuatro empezaremos a ver eso
00:21:04
vale, vale, entonces yo me adelanto
00:21:07
simplemente
00:21:08
así como introducción te diré
00:21:11
que las escenas, estas escenas
00:21:13
que vamos creando son como los distintos niveles
00:21:15
de nuestro juego, entonces
00:21:17
dependiendo un poco del juego, las escenas pueden
00:21:18
tener un funcionamiento
00:21:21
u otro
00:21:22
por ejemplo, si tienes
00:21:23
un juego, pues yo que sé, de puzles
00:21:27
y cada nivel es
00:21:28
independiente, es decir
00:21:31
Es un Tetris, van cayendo las piezas y si superas tal puntuación pasas a otro escenario, a otra forma de la escena. Ahí lo que sería, sería cargar el siguiente escenario, una vez se ha llegado a esa puntuación, pues dice carga al siguiente nivel y el siguiente nivel lo que es, es otro escenario.
00:21:32
De hecho, no, se empieza a ver en el tema 3, perdón, que ahí se ve algo en la tarea.
00:21:53
Pero eso, ahí habrá que ir cargando, porque por código podemos ir diciendo, ahora que se abra esta escena, ¿no?
00:21:59
Si es que yo tengo hecho ya una parte de un videojuego, que va a ser para el proyecto, bueno, estoy mirando eso,
00:22:04
y tengo una escena principal, que es el menú principal del juego, con las opciones, iniciar el juego y salir,
00:22:11
y me cambiaría escena, pero es que luego, por ejemplo, se mueve el personaje en distintos mundos, por así decir,
00:22:16
Y ahí no sé si hacer un cambio de escena o... Es que ahora mismo lo tengo en la misma escena todo.
00:22:23
Pero, claro, ¿sería como que al irse moviendo el personaje abre más espacios o algo así?
00:22:27
No, literalmente tengo como un teletransportarse. Le da al botón que yo tengo puesto de input, que es la E, y me cambia a otro escenario.
00:22:33
No, en ese caso, lo suyo, para intentarnos sobrecargar, depende un poco de la carga, pero lo suyo sería que tengas un nivel que se arranca por defecto
00:22:42
y cuando le des a esa tecla E que tiene el poder o la capacidad de teletransportarse, por lo que entiendo,
00:22:52
ahí cargue el otro nivel.
00:22:57
A menos... Bueno, no, eso sería lo óptimo.
00:22:59
A menos... Depende un poco de cuánto de intensivo sea lo que pide al ordenador ese nuevo nivel,
00:23:03
porque sí que es verdad que si ya está cargado, al darle a la E ya digamos que es variar algunos elementos
00:23:14
si está todo dentro de la escena, es casi activar
00:23:20
y desactivar elementos, más que cambiar de escena
00:23:22
pero si
00:23:24
es una escena compleja, etcétera
00:23:26
lo suyo es tener otra escena que se carga
00:23:28
y hay formas de que se vaya precargando
00:23:29
antes para que la transición
00:23:32
sea más rápida, ¿vale?
00:23:34
pero depende un poco también, a veces
00:23:36
es casi mejor no complicarse y hacerlo todo al mismo nivel
00:23:37
pero si son muchos elementos
00:23:40
pues sí
00:23:42
más que nada, depende del juego
00:23:42
claro, tendríamos que ver más cosas, pero
00:23:46
más que nada porque
00:23:47
al cambiar de escena no es solo cambiar el escenario
00:23:49
digamos, tiene que conservar
00:23:53
pues a lo mejor la posición del personaje
00:23:54
¿no? entonces si estás en el mismo
00:23:56
nivel, ¿el qué verdad?
00:23:58
que la escala y todo también se tiene que conservar
00:24:00
claro, si estás en el mismo nivel es fácil
00:24:02
porque al final es activar y desactivar elementos
00:24:04
si no pues es que conserve
00:24:06
valores
00:24:08
tampoco es configurarlo
00:24:10
vaya
00:24:12
me preguntan
00:24:12
sí dime, dime, perdón
00:24:16
Ah, no, no, no, que muchas gracias.
00:24:17
Que cuando lanzamos el juego se hace una copia, varias, lo que se pide. Eso es la tarea 1. Luego en la tarea 2 pasamos a otro proyecto, que podéis crear otra escena, que beba de ahí, pero es verdad, a lo que me refería es que si quiero hacer otro nivel sería hacer otra escena.
00:24:47
Sí, exacto. Las escenas así, la primera interpretación que le tendríamos que dar es que son niveles, niveles que se pueden ir cargando y pasando de uno a otro. Sí que es verdad, imaginaos que estáis en un juego de mundo abierto, ¿vale? Y estáis caminando y claro, pues bueno, esto ya es un juego que se japa un poco a mis conocimientos, ¿no?
00:25:08
Pero imaginaos que estáis jugando a un Red Dead Redemption, que el mapa es gigantesco.
00:25:31
Claro, no se carga todo el mapa de una, ni de broma, claro, se van cargando, ellos usarán métodos más refinados, ¿vale?
00:25:35
Pero como en un juego de mundo abierto que vas caminando, al irte aproximando a los límites, a lo mejor, de lo que se carga al principio,
00:25:41
cuando sigues la carretera y llegas al final, pues habrá un collider o habrá un detector de que te estás acercando a ese límite
00:25:48
Y de forma dinámica se carga también el siguiente nivel del espacio que está al ir avanzando. Pues imaginaos, como estáis viendo en mi pantalla, si veis la cuadrícula, a lo mejor se carga el espacio correspondiente a esta cuadrícula y ahí está el personaje pequeñito y no se ve que no está cargado el resto.
00:25:56
cuando nos vamos acercando a este límite
00:26:16
en vivo se mantiene este
00:26:18
y se carga a otro nivel
00:26:21
es por lo que decía que depende del juego
00:26:22
si el juego es un Tetris las pantallas son independientes
00:26:25
son niveles independientes
00:26:27
cuando se van cargando
00:26:28
y tiene que parecer que es una sucesión
00:26:30
sin costura
00:26:32
cuando nos vamos acercando se cargará
00:26:34
a este nivel y estarán los dos
00:26:36
incluso cuando ya avancemos y nos metamos aquí
00:26:38
en esta cuadrícula, cuando estemos aquí
00:26:40
ya no se vea nada del resto de cuadrículas
00:26:42
porque estamos metidos ahí
00:26:45
Se descarga y los recursos se relajan, digamos, de este nivel
00:26:46
Y nos quedamos en este, que luego, si tenemos configurado que la carretera sigue por aquí
00:26:50
Y aquí abrimos otro espacio, pues pasará lo mismo
00:26:54
Se van de manera dinámica, o de manera aditiva se diría
00:26:57
Se van cargando y descargando niveles, ¿vale?
00:27:02
Para no tener todo abierto
00:27:04
Todo depende un poco del juego
00:27:06
Es una forma de ir gestionando los recursos
00:27:09
Porque claro, tú no puedes tener mapas inmensos con 85.000 cosas a la vez y que se cargue además a la vez. Pues hay formas de irlo gestionando, ¿no? De esas cosas ya se hablará. Sobre todo entre niveles independientes, de eso vais a hacer y de que se vayan cargando escenas también veremos algo.
00:27:12
Si se vayan cargando, digo, espacios de manera aditiva. Más cosas. Si no, pues explico un par de cosillas y que me digáis. La próxima tutoría ya sí que, también espero que hayáis podido tener tiempo, porque tampoco ha habido plazo de ver la unidad 2 y empezar con la tarea y ahí surgirán más dudas concretas, imagino.
00:27:31
Pero bueno, la primera unidad, yo creo que en los vídeos queda bien explicado cómo se hace la tarea 1,
00:28:09
la 0 también se dibuja, voy a dar de hecho alguna indicación ahora,
00:28:14
y también, incluso de la tarea 0, hablar de algunos apuntes que ya se introducen en el tema 2 de las interacciones.
00:28:19
Entonces, bueno, si no hay más dudas, eso, tiro por ahí.
00:28:29
Eso, si tenéis dudas, prefiero resolverlas, claro.
00:28:33
vale vale si nadie dice nada pues voy adelante con ello perfecto a ver que yo tengo aquí preparadas
00:28:35
algunas cosillas vale en las grabaciones de las tutorías iba hablando pues eso de operaciones
00:28:46
entre entre números la aparición de los vectores los vector 3 los vector 2 eso voy a ir hablando
00:28:55
de algunos operadores como el booleano que creo que no introducía así por encima pues algo que
00:29:05
me parece bastante importante vale que es y voy a hacer aquí un script nuevo vale para ir usando
00:29:10
durante la tutoría de llamar yo que sé explicaciones tutoría 4 4 yo que sé mínimamente y lo hablo por
00:29:16
aquí. Esto de poner un 4 aquí, de hecho lo voy a cambiar, ya es mala práctica. Voy
00:29:25
a poner tool 4. De hecho, una de las cosas que os digo es para que no genere conflicto,
00:29:36
intentad evitar, en la medida de lo posible, incluir números en el nombre de los scripts
00:29:41
o de las clases, básicamente, que en este caso sería lo mismo. Dame un segundo que
00:29:46
abre a esto y lo cambia aquí para que sea el mismo. Vale, vamos allá. Entonces, os hablé de los booleanos, si me repito me interrumpís, si voy rápido me interrumpís, ¿vale?
00:29:51
Hablábamos de que uno de los tipos de variables que se pueden generar son los booleanos, ¿no? Por ejemplo, booleano es estar vivo, para decirle al jugador si está vivo o no.
00:30:08
Si lo que decíamos los booleanos son un 1 o un 0, que si es un 1 es un valor positivo, si es un 0 es un valor negativo
00:30:17
Básicamente lo que nos sirve esto es para sobre todo introducir condiciones que en las estructuras de control condicionales
00:30:26
Pues nos permitan que ocurran ciertas acciones o no ocurran esas acciones y ocurran otras
00:30:34
Entonces, por ejemplo, si empezamos el juego y decimos que al arrancar ya por defecto lo inicializamos como true, si por algún motivo queremos que haya una opción, queremos que ocurra algo que pasa a ser lo opuesto, es decir, cuando estamos escribiendo el código no en todo momento a medida que vamos haciendo operaciones sabemos si vivo vale verdadero o falso.
00:30:39
Pero sí que nos puede interesar, por ejemplo, al activar un interruptor, y de hecho lo voy a llamar interruptor, que es mejor ejemplo, cuando vamos a una habitación, puede que al decirle pulsa aquí, no sea la acción la que queramos decirle si se enciende o se apaga.
00:31:05
Igual cuando vamos a cierto momento no queremos decirle no. Cuando tú pulses aquí queremos que valga falso. ¿Por qué? Porque un interruptor normalmente si lo que hacemos es pulsarlo, lo que hacemos es activar o desactivar. Si está activado, desactiva. Si está desactivado, activa. Hace la operación opuesta.
00:31:23
Hay un operador que no estaba visto y es interesante que conozcáis, que es este de la exclamación como para indicar contrario a, como lo opuesto a.
00:31:41
Entonces, si ponemos aquí interruptor, lo que estamos diciendo es que dentro de la variable interruptor, que en este momento vale true, pues se guarde lo contrario a lo que tenga.
00:31:54
este operador en este caso, en este contexto
00:32:06
no tendría sentido por ejemplo con variables de tipo
00:32:09
numérico, porque no puede
00:32:11
decir lo contrario a 5
00:32:13
nuestra cabeza podría decir
00:32:14
el negativo en R5, pero no es eso
00:32:17
un negativo y un positivo no es
00:32:19
estrictamente lo contrario tampoco
00:32:21
entonces sirve sobre todo
00:32:22
para las booleanas, entonces este
00:32:25
operador es muy importante porque va a haber operaciones
00:32:27
que a lo mejor estamos haciendo un montón de
00:32:29
cosas y lo que queremos no es que sea
00:32:31
decir en ese momento
00:32:32
Entonces, si yo pulso, ¿no? Si yo pulso, bueno, aquí se me ha puesto... Espera. Si yo pulso, ¿vale? Lo pongo con texto cotidiano, coloquial. Si yo pulso, pues quiero que lo que valga aquí pase a ser lo contrario, ¿vale? Esto se consigue con ese operador de contrario, ¿vale?
00:32:34
Entonces, ¿qué ocurre? Que cuando llegamos aquí y tú pulsas, pues el interruptor pasa, en este caso, a ser falso. Si en el momento que llegáramos el interruptor variara falso, pasaría a ser verdadero, ¿vale?
00:32:57
Lo hago con un ejemplo muy rápido, pero como siempre, si yo aquí hago un debug log y digo que vale interruptor, para ver qué valor tiene, si yo ahora le vinculo el script, que tiene que ser este de explicaciones, porque creo que no tengo otro script aplicado.
00:33:11
Vale, perfecto. Y borro este que lo tenía antes de las pruebas. Remove. Si yo ahora lanzo este script, va a poner true, porque es lo que tenemos guardado. True, enséñame lo que vale interruptor.
00:33:36
Por lo contrario, si yo pongo que interruptor, lo que había puesto antes, sea lo opuesto a interruptor, pues veréis que ahora lo que va a indicar, guardo lo que va a indicar y vuelvo a ejecutar, lo que va a indicar ahora es falso.
00:33:51
¿vale? ¿esto qué significa? bueno, pues si hacemos esto
00:34:06
en el update, por ejemplo
00:34:10
¿vale? vais a ver que lo que va a estar es alternando todo el rato entre uno y otro
00:34:13
fotograma, fotograma, va a ir alternando
00:34:17
true, false, true, false, true, false, lo vais viendo, bueno, no para de ejecutarse
00:34:20
pero eso, es una consecución de apagarse, encenderse, apagarse
00:34:25
encenderse, ¿vale? que sepáis que esta lógica existe porque habrá ocasiones
00:34:29
en las que es útil. Esta exclamación también sirve para las condiciones. Por ejemplo, imaginaos, voy a alestar de nuevo, y yo pongo una condición que es if,
00:34:34
¿No? Esto entiendo que más o menos ya vais viendo cómo funciona, ¿no? Lo de las estructuras de control, si no me decís y lo revisamos, pero ponemos si interruptor es igual a verdadero, ¿vale?
00:34:55
Pues entonces voy a poner una instrucción que sea que se muestre un mensaje, no voy a poner el valor, sino que ponga un mensaje de está encendido.
00:35:11
Entonces, ahora mismo, como se cumple esa condición de que interruptor es true porque nada lo ha cambiado, pues llega aquí y dice interruptor es igual a true.
00:35:25
Sí, pues vale, voy a mostrar, el texto está encendido. ¿Qué ocurre? Que si aquí ponemos, y esto también solo sirve para las booleanas, bueno, cuando digo solo, siempre puede haber excepciones, pero esto sobre todo se usa para las booleanas.
00:35:32
Os podéis encontrar que la condición sea esta. Pone sí, interruptor solo. Y dice, vale, pero interruptor igual a qué. Cuando se está hablando en la condición, se está poniendo una variable que es booleana, solo con poner interruptor significa que si interruptor es verdadero, es decir, interruptor sí o interruptor existe, es lo mismo que poner lo que estaba puesto antes.
00:35:49
Es decir, podéis llegar aquí y es exactamente lo mismo. Si interruptor existe, strut, pues vais a ver que ahora cuando lanzo pone otra vez encendido. De hecho, si yo pusiera interruptor strut y si no, pues pongo interruptor está apagado, para que veáis que funciona, pues vais a ver que ahora lo que va a mostrar no es está encendido.
00:36:11
Bueno, perdón, va a mostrar que está encendido. Si yo aquí pusiera false, voy a agrandar esto para que no moleste tanto, vais a ver que ahora la condición no se cumple y pasa aquí.
00:36:40
Aquí no pone ningún operador de este tipo, ni de diferente, ni de nada. Entonces, cuando yo le dé, vais a ver que lo que está mostrando es que está apagado.
00:36:56
Lo hago para que lo veáis y vais a ver que ahora pone está apagada. Entonces simplemente que a veces veréis esta instrucción como algo suelto y significa que está diciendo que si esto es un booleano verdadero. Eso existe.
00:37:10
Que no es lo mismo que si nos encontramos esto, que os he dicho lo opuesto. Si pone esto es lo opuesto a que exista interruptor, por tanto que sea falsa. Ahora vais a ver que cuando llegamos aquí la condición que se va a ejecutar es esta, porque realmente es lo contrario a interruptor, por tanto es falso.
00:37:25
Y vais a ver que ahora lo que va a poner es está encendido porque se aplica esa condición. Vamos a verlo nuevamente, guardo aquí, y le doy y va a poner está encendido. Entonces, ojo porque eso puede ocurrir en ocasiones.
00:37:44
¿Vale? Luego también el operador de la exclamación, y ya no solo... Bueno, lo voy a hacer con booleano y luego lo hago con un número. ¿Vale? También existe el operador diferente a true. ¿Vale?
00:38:00
Y aquí lo que estamos diciendo, a diferencia de cuando ponemos los dos iguales, que es el comparativo de igual, es el comparativo de diferencia. Ahora dice si interruptor no es true, que es este caso, pues está encendido. ¿Se va a cumplir? Sí, porque al ser falso no es true. Que sepáis que la exclamación también se usa para eso.
00:38:19
Y está encendido, se cumple y por tanto está ahí. ¿Qué ocurre? Y sigo hablando de este operador de exclamación que es muy importante porque lo encontraréis o lo necesitaréis.
00:38:41
Si yo pongo un valor int, que es un número, yo que sé, valor, voy a llamarlo valor, y es un 5, ¿vale? Si llego aquí y la condición es valor es diferente a 5, ¿vale?
00:38:51
Bueno, y aquí me falta un punto y coma. Esto no se va a ejecutar, ¿no? Porque estamos diciendo que si el valor es diferente a 5, que se jute está encendido. Voy a poner, si valor es diferente a 5, es diferente a 5.
00:39:06
Si no, pues es igual a 5, ¿no? Si no, evag.log, bueno, ahora lo escribo mejor, vale 5 y aquí cierro y cierro, ¿vale? Ahora mismo el valor es 5, llega aquí y dice, ¿es diferente de 5? No, por tanto no va a poner que es diferente de 5, porque efectivamente vale 5, ¿vale?
00:39:21
Entonces, veis que con esta operación filtramos que algo sea igual o diferente, porque en ocasiones lo que nos puede interesar es que algo precisamente sea diferente a los distintos valores que podamos tener en el juego, ¿no?
00:39:50
Entonces, yo cuando lanzo ahora esto, va a poner, vale, 5, ¿vale? Que no es lo mismo que si aquí pusiéramos, pues, igual a 5, pues la que lanzaría es esta, ¿vale?
00:40:01
Entonces, este operador, digo, no se había visto y creo que es bastante relevante para las condiciones. ¿Qué tal? ¿Me seguís? A ver, alguien me ha escrito. Vale, es complicado. Bueno, mira, copio el mensaje y lo pongo en la pantalla porque no sé ni cómo leerlo.
00:40:12
Me ha escrito esto de aquí. Me pone diferente true, sería lo mismo que igual false, teniendo solo true y false. Exactamente. Porque recordad, vuelvo a decirlo, esto de diferente, cuando se pone delante del nombre de la variable, como hacíamos antes con esto, pues solo tiene sentido, o principalmente sentido, en las variables booleanas.
00:40:34
Por eso que digo que puedes pasar de un valor a otro. Cuando lo hacemos aquí, con valores que pueden tener infinitos resultados, como es un ínteger, que puede ser cualquier número positivo o negativo, el cero, aquí es diferente a este valor, pero puede ser cualquier otro.
00:40:59
luego hay otra cosa que también os podéis encontrar
00:41:16
y se usa mucho para prevenir que ocurran
00:41:21
errores en el código, pues ya habréis notado
00:41:23
que esta, lo vuelvo a poner aquí
00:41:25
que esta línea roja sale mucho
00:41:27
y si sale esa línea roja da problemas
00:41:29
de ejecución del juego, por tanto no pueden
00:41:31
funcionar, es
00:41:33
usar el concepto de null
00:41:35
de nulo, ¿vale? y nulo en programación
00:41:37
significa algo que no existe
00:41:39
¿qué quiere decir esto?
00:41:41
que a lo mejor
00:41:43
Por ejemplo, tenemos aquí, sería LicePill, y esto ya os suena, y creamos un GameObject, cuando hagáis la práctica, la tarea de instanciación, una instancia.
00:41:44
Y puede ser que en cierto momento nosotros digamos, instantiate, voy a copiarlo de otro lado que lo tengo ya hecho y así no tardo de más.
00:42:00
instanciate
00:42:15
bueno, sí, instanciate
00:42:20
y voy a ir a la
00:42:22
más básica que sería instanciar
00:42:24
si
00:42:26
yo
00:42:28
intento hacer esto y lanzo el juego
00:42:30
vale
00:42:32
va a poner error
00:42:33
¿por qué? porque hay una instancia
00:42:36
vale, esto que hemos dejado aquí está vacío
00:42:38
y no existe, entonces no sabe qué hacer
00:42:40
y pone la variable
00:42:42
la instancia de la clase en explicaciones tut4 no ha sido asignado y el juego se detiene no es
00:42:44
que se puede hacer mucho más es que hay un error grave no a veces para evitar eso porque en
00:42:51
ocasiones podemos estar haciéndolo en ocasiones no se puede hacer una condicional de que algo
00:42:56
exista vale mira de hecho lo está aconsejando ahí porque está detectando que algo pasa si ponemos y
00:43:02
Y de hecho, con el tabulador, como me salía la sugerencia, pulso el tabulador y lo pongo.
00:43:08
Podemos hacer que haya un comparativo de que algo exista o no.
00:43:16
Y aquí decimos, sí, nosotros hemos hecho esta variable y debería existir, y en teoría la vamos a usar y por eso la hemos creado,
00:43:19
pero en ocasiones a lo mejor estamos jugando un juego y le decimos, cuando le demos al botón izquierdo del ratón, que dispare balas de nuestra arma.
00:43:27
y en ocasiones puede ser que no haya balas
00:43:33
porque la bala sea un prefab
00:43:37
que se lanza la bala físicamente
00:43:38
a lo mejor al arrancar el juego
00:43:41
no hemos cogido ningún power up
00:43:42
ningún ítem que sea el de adquirir balas
00:43:44
entonces está vacío
00:43:47
si no lo hemos contemplado puede que llegue el caso
00:43:48
en el que ocurra esto, estoy poniendo como un ejemplo
00:43:51
que pudiera ocurrir esto, hasta que no cojamos bala
00:43:52
no estamos rellenando este game object
00:43:55
para luego instanciar esas balas
00:43:56
entonces si estamos dando a la condición
00:43:58
de si pulsa y cuando pulses
00:44:01
que se lance la bala. Va a dar error porque va a decir, vale, si yo estoy
00:44:02
haciendo esa operación, pero no instancionada porque no hay nada y sale este mismo error que
00:44:06
estábamos viendo antes. En ocasiones, aquí podemos poner luego más condiciones
00:44:10
en plan, si pulso
00:44:14
gatillo, estoy hablando físico para que lo entendamos, esta condición
00:44:16
que se ejecute lo que hay aquí
00:44:22
tenemos esto y que se ejecute aquí. Pero este
00:44:25
errores porque no está declarada la variable, ni hay un método ni nada, pero en ocasiones
00:44:30
para directamente evitarnos el error de que algo no funcione, porque aquí instancia no
00:44:35
estaría funcionando todavía porque no existe, no está asignada, si ponemos esto de aquí
00:44:41
y lo voy a poner así para que lo veamos como antes, recordad que yo antes cuando no he
00:44:46
puesto esta condición y solo he puesto la línea de instancia, daba error porque no
00:44:52
encontrar la instancia, pero ahora si decimos, oye, si la instancia es igual a null, no existe, ¿vale? Hace esto. Esto no tiene sentido porque lo que queremos decir
00:44:56
es precisamente, si instancia existe, si instancia es diferente a null, es decir, de verdad hemos asignado algo, ejecuta la instanciación, ¿vale?
00:45:07
Vais a ver que ahora cuando lo hago, aunque no está instanciando nada, es decir, está pasando por esta condición. Me explico. Llega aquí el código y dice, ¿instancia es diferente a null? No, es igual a null, porque no existe.
00:45:17
Entonces pasa esto y no hay ningún problema. Con esta línea aquí hemos evitado que haya un problema, que salga el error grave y se detenga.
00:45:38
Si instancia es igual a null, es decir, que no hemos asignado nada, aquí ponemos debug log que ponga no hay objeto asignado.
00:45:47
y luego lo que hacemos aquí es
00:46:08
si ocurre lo contrario
00:46:11
que es con este else
00:46:14
si ocurre lo contrario
00:46:15
pues que se instancia
00:46:18
es decir, si sí se hubiera asignado
00:46:19
pues habrá que instanciar
00:46:21
en este caso estamos todavía en el momento
00:46:22
aquí me falta una llave
00:46:25
estamos en el momento en el que no se ha instanciado nada
00:46:26
y aquí debe de faltar otra llave
00:46:29
por lo que veo
00:46:31
algo me saltó por ahí
00:46:32
pues no
00:46:35
A ver, ¿qué me está diciendo esto? Ah, no, que borra una llave por aquí debe ser. Sí, aquí hay una llave borrada. Void, update, abre, cierra. No, está bien. ¿Qué está pasando aquí? A ver, una llave y con llave. Vale, y aquí falta esta llave. Vale, esta llave que de hecho se puede eliminar porque he puesto alguna de más.
00:46:36
Entonces, ahora mismo estamos en el caso de que no existe esta instancia
00:47:03
Por eso va a poner no hay objeto asignado
00:47:09
Y yo aquí, a ver, tengo que guardar, importante, el script
00:47:11
Y ahora yo lanzo el juego y me va a poner ese mensaje porque no tiene nada que asignar
00:47:16
No hay otro objeto asignado, pero como luego salta esta operación que remite instancia
00:47:21
La salta y no hay error
00:47:27
En el momento en el que arrastremos, por ejemplo, un prefab ahí
00:47:28
pues yo qué sé, aquí tengo algún prefab, mira, pues la nave, la asigno, ¿vale? Porque sería la isField, y cuando lanzo, ahora vais a ver que lo que hace es, si voy aquí, pues lo que ha hecho es la instancia, ese clon de esta nave que tenía yo preparada, ¿por qué?
00:47:32
Porque ha llegado aquí, ha dicho si instancia es igual a null
00:47:48
No, no es igual a null, sí que tiene algo
00:47:51
Por tanto, lo que tengo que hacer
00:47:53
Es instanciar, ¿vale?
00:47:55
Y veis que en todo momento se puede ir
00:47:56
Enfocando en que sea igual, diferente
00:47:58
Ahora, si es diferente a null
00:48:01
Lo que va a hacer es
00:48:03
Poner esto, porque como sí tiene algo
00:48:04
Aunque luego se va a saltar las siguientes condiciones
00:48:07
Porque ya se ha cubierto la primera
00:48:09
Pero yo ahora cuando lanzo el juego
00:48:11
Me va a poner otra vez el texto
00:48:13
No ha hecho ninguna instanciación
00:48:14
Y me ha puesto no hay objeto asignado
00:48:16
¿Vale? Veis que estos operadores son muy importantes porque son los que van a ir marcando qué se ejecuta y qué no durante el código. ¿Vale? ¿Queda claro esto? A ver, voy a veros en el chat.
00:48:18
Vale, me seguís, ¿no? Hasta aquí. Un operador importante que no estaba explicado todavía en el otro.
00:48:32
Vale, otra cosa que explicaba, el Plated Mode, aunque bien he explicado los apuntes, ¿os queda claro lo que es esto de que se ponga roja la pantalla y qué supone y qué no? Lo digo porque para el tema 2 ya es algo bastante importante.
00:48:44
A ver, decidme, por aquí, ni idea. Vale, en su momento veríais en los vídeos que se hablaba de que todas las acciones que se hagan durante el juego, durante la ejecución del juego, cuando se da a play, no se guardan, simplemente son acciones que podemos hacer aquí para probar.
00:48:59
Voy a hacer un ejemplo rápido. Voy a hacer que esto sí se instancie, ya que lo tengo aquí preparado. No pongo ni condición. Está asignado y se instancia la nave. Esto cuando tengáis que mover cosas y usar el transform va a ser importante, por eso os lo digo.
00:49:26
Voy a poner este ente object en el que he puesto la instanciación en el 0, 0, 0, para que esté en un punto de origen. Lo que he hecho ha sido resetear con estos tres puntitos, se puede resetear el componente.
00:49:42
Ahora lo que va a hacer es instanciar, y voy a ponerme el game aquí al lado para tener la escena y el game, instanciar la nave en el punto 0, 0 porque es donde está básicamente el nulo.
00:49:58
Yo luego puedo estar haciendo pruebas e ir viendo a ver qué pasa si yo pongo la nave aquí o si la subo, ¿vale? Vais a ver que yo cuando detenga la ejecución nada de eso se ha guardado, no se ha guardado ni el clon que se ha emitido ni los valores del clon.
00:50:10
Si lo hiciera en juego también, que sí que se ve aquí, ¿vale? Y empiezo a decir, en vez de mover la nave voy a mover el nulo que origina esa nave, ¿vale? Que es independiente porque no lo ha hecho su hijo, como podéis ver, ¿vale? Y voy probando y digo, yo quiero que la nave, como se va a instanciar donde esté este nulo cuando arrancamos el juego, lo voy a colocar ahí, ¿vale? Y dice, ese es el punto que quiero.
00:50:27
Cuando paró la ejecución, veis que vuelve al punto en el que estaba antes. Entonces, mientras estamos probando el juego en su reproducción, tened cuidado que todo lo que vayáis cambiando, todos los valores, se pierden.
00:50:49
O incluso mover la cámara, pone un compañero, exactamente. Todo se pierde. Entonces, para advertir de que eso está ocurriendo, hay una indicación visual, que yo creo que lo indiqué, pero me parece relevante en este momento del curso verlo,
00:51:04
que es que si vamos a Edit y Preferencias, hay una sección que se llama Colors, que es con lo que se asignan los colores que se muestran ciertas cuestiones de la interfaz.
00:51:16
Y hay uno, un valor que se llama Play Mode Tint, y por defecto viene en un gris, que veréis si no lo habéis cambiado, que cuando activáis este Play en vuestros casos,
00:51:29
Se pone un poquito más gris la pantalla
00:51:37
Pero casi no se nota
00:51:40
Os sugiero que aquí pongáis un color
00:51:41
Más o menos chillón
00:51:44
Voy a poner ahora un verde para que veáis
00:51:45
Que lo que hace, una vez ya lo asignáis
00:51:47
Es que al darle al play
00:51:49
Se colorea esto de otra forma
00:51:50
Para saber que en ese momento estamos en la reproducción
00:51:53
Porque es muy fácil pensar que no estamos en la reproducción
00:51:55
Ponernos a tocar valores
00:51:58
Y de pronto anda, pero si está en reproducción
00:51:59
Y paramos, y todo lo que habíamos trasteado
00:52:01
No se ha guardado
00:52:04
Entonces os recomiendo para estar como alerta o prevenidos de que estamos en el momento de editar, que pongáis un color que tampoco sea súper estridente y moleste, pero que marque. Yo me lo pongo rojo como de alerta y así colorea todo.
00:52:05
y sé que todos los cambios que está haciendo en este momento son temporales, ¿vale?
00:52:22
Y que, por ejemplo, y esto ocurre mucho, a lo mejor sí que sabemos que es aquí donde queremos colocar este nulo,
00:52:28
sabemos que al parar se va a ir al traste, ¿no?
00:52:34
Y entonces lo que tenemos que hacer es apuntarnos estos valores para luego replicarlos.
00:52:37
O, con clic derecho, copiar el valor, lo copiáis, lo tenéis ahí,
00:52:41
y ahora lo que pasa es que esto vale con algún valor, no con todos.
00:52:48
Y ahora podéis ir y pegarlo. Y ahí lo tenéis. Y ahora se ha colocado donde habéis hecho esta prueba mientras estaba en vivo. Y también porque en ocasiones vais a ir viendo que estas pruebas las hacéis porque al darle a ejecutar el juego efectivamente se van a mover cosas, lo que tengáis ya previsto que se mueva.
00:52:51
Entonces, las pruebas las queréis hacer en vivo, pero cuando paréis el juego, eso, todo lo que estéis ajustando, lo vais a tener que reajustar, ¿sí? Por eso también, y mira, me sirve también de ejemplo, si por ejemplo estáis en esto y decís aquí en este momento, ah, vale, pues voy a asignar, lo he vaciado el GameObject que referencia a esta instanciación, digo, voy a asignar la nave y lo pongo ahí, vale, y luego digo, ya lo he hecho y sigues haciendo cosas aquí y tocas y ves que bien, ya lo he asignado.
00:53:08
Cuando salgáis de aquí, fijaos que está en Node. Entonces, eso. Que mientras estéis en este modo de trabajar, no se están guardando las cosas.
00:53:39
Más cosas. En el tema 2, lo que pasa es que casi prefiero que lo veáis. Se habla ya de los vectores 3, los vector 2, cómo se opera.
00:53:53
en las primeras
00:54:05
tutorías grabadas ya se hablaba como sumar y restar valores
00:54:09
etcétera, pero aparecerá ya el concepto de sumar
00:54:13
vectores que son valores, matrices con distintos
00:54:17
elementos, no sé si alguno ya
00:54:20
se ha metido en ello, pero si no me vale también
00:54:25
bueno, estáis en ello, genial
00:54:32
Bien, sí que me gustaría hablar de una cosa que es parecida o relacionada, digamos, con los vectores multidimensionales, ¿no?, que tienen varias propiedades, vaya, pero que no es exactamente lo mismo, que es algo que viene introducido en el tema cero, pero que, bueno, tampoco se ahonda demasiado, que es el concepto de array.
00:54:34
¿Sí? ¿Lo habéis visto en el tema cero? ¿Alguno me quiere explicar qué es eso? Y mientras voy yo preparando aquí una cosita.
00:55:01
A ver, explicación de Stud4, un segundito. Vale, esto lo voy a explicar con ejemplos rápidos, que luego, más adelante, habría otras formas quizás mejores de hacerlas, pero me sirve.
00:55:14
Y bueno, también se podría hacer de este modo, pero os digo, pues eso, una forma de conseguir algo. Imaginaos que estáis en un juego y vosotros tenéis cuatro armas posibles. Hay cuatro armas en el juego.
00:55:46
Entonces, con un array, por ejemplo, lo que hace es, dentro de una sola variable, poder agrupar o poder tener recogido varios valores distintos. Si un número, si un int guarda un valor, por ejemplo, 5, en un array lo que se va a poder hacer es guardar varios valores.
00:56:04
Por ejemplo, ¿vale? Y esto vamos a ver cómo se nos da. Se puede crear un array de un número de dimensiones determinada, ¿vale? Por ejemplo, este, y 5 aquí, ¿vale?
00:56:28
Y vais a ver que la estructura de un array básicamente es una sucesión de valores separados por coma, ¿vale? Y esa sucesión de valores tiene un orden también, ¿vale? Entonces, dentro de este array llamado armas, que bueno, de momento lo voy a llamar número, luego ponemos el ejemplo de armas, estamos diciéndole que dentro de esta variable no solo se guarde un valor numérico, sino que se guarden varios.
00:56:45
Y yo en cualquier momento voy a poder entrar en esa variable que tiene bolsillos, vamos a decir así, esa caja subdividida, que dentro tiene valores. ¿Cómo se accede a los valores de un array y cómo se guardan?
00:57:09
La forma de inicializar un array, ¿vale? Esperad que lo compruebe porque esto siempre tengo mis... Sí, está bien. Siempre me equivoco en esto, no sé por qué. Es si declaramos un array, ¿vale? Después del nombre de la variable hay que poner este corchete vacío. No hay que poner nada ahí, ¿vale?
00:57:23
Y luego, como hacemos siempre, ponemos el nombre de la caja, ¿vale? De la variable. Este es el tipo, ¿vale? Podrá ser in, string, booleano, lo que sea. Y luego la variable. Con esta corchete decimos que no solo va a haber un valor, que va a haber un array, que va a haber varios guardados.
00:57:43
Si lo queremos, si queremos decir cuántos compartimentos o cuántas subdivisiones tiene ya, incluso ya con los valores, se puede hacer ya desde el momento de la declaración, de esta forma.
00:57:59
Con esta forma de mostrarlo, lo que hacemos es ya incluir que ya en el primer valor que guarda este array valdrá 1, el segundo valdrá 2, el tercero valdrá 3 y el cuarto 5.
00:58:13
¿Vale? Entonces, llega el momento en el que, por ejemplo, podemos decir, ¿vale? Ahora ahondamos más en algunas cosas. Podemos decir debug log y quiero mostrar el valor que está dentro de la variable números en su posición 2. ¿Vale?
00:58:29
Un segundillo, que me tengo que sonar los mocos, perdona, que me ahogo si no, pero voy a ver el chat que igual me habéis escrito algo, vale, a ver, me habéis escrito alguna cosa y no la había leído, me pone, o sea, un array en un shooter sería los diferentes tipos de balas de un arma y sus valores,
00:58:46
Un array puede ser lo que nosotros queramos, pero lo que sí podemos hacer es que dentro de una variable podemos tener distintos GameObjects, por ejemplo,
00:59:16
y mediante un número llamando a la misma variable podemos desplegar que sea este arma.
00:59:24
Imagínate que en vez de aquí poner que es un int, es una variable tipo GameObject, como hacíamos en la instanciación,
00:59:29
Y luego va guardando en distintos cajones, en distintos cajoncillos, distintas armas. Luego para desplegar un arma simplemente habría que aludir a esta variable con el valor, con la posición de ese valor. Pero esto es más avanzado. Vamos primero con lo más mudendano, que me lo habías escrito aquí, pero vamos a esto.
00:59:40
¿Vale? Vais a ver que yo cuando pongo 2, a ver, por ejemplo, la posición 2, vais a ver que para declarar después del tipo de variable hay que poner este corchetillo, estas llavecitas, estos corchetes, mejor dicho, y luego cuando queramos hablar o usar ese array como variable, habrá que poner el nombre de variable, los corchetes y dentro de los corchetes la posición que queramos usar.
00:59:59
Entonces, ¿qué pensáis que va a mostrar consola?
01:00:22
Porque estamos poniendo un debug log
01:00:28
¿Qué va a poner? ¿Qué número va a mostrar la consola?
01:00:29
Aquí es para que acertéis o os equivoquéis y hablar de ello
01:00:33
Lo normal es equivocarse
01:00:36
Dos, creo
01:00:40
Dos porque entiendo que tu lógica
01:00:41
Lo ha puesto un compañero, dos
01:00:44
La lógica es a pensar, vale, esta es la primera posición
01:00:45
Y esta es la segunda, ¿no?
01:00:49
¿No? Es la lógica que has seguido
01:00:54
Aquí empiezan cosas
01:00:56
Simplemente para que lo veáis
01:01:01
Si yo doy a play
01:01:03
El número que muestra es 0
01:01:06
Si os fijáis, aquí lo tenéis
01:01:09
¿Por qué?
01:01:10
Porque las posiciones de un array
01:01:12
Y normalmente todo lo que tenga varias dimensiones
01:01:14
Suele ser así
01:01:16
Siempre empieza por 0
01:01:17
Es decir, la primera posición
01:01:18
Que se refiere en este caso a esto
01:01:19
Es 0
01:01:21
Entonces, por ejemplo
01:01:22
si hacemos este código
01:01:24
lo que va a mostrar es un
01:01:26
bueno, fijaos, yo estoy saliendo todo el rato
01:01:27
cambiando de pantalla, me doy cuenta rápidamente
01:01:30
de que estoy en play porque veo esto rojo
01:01:32
¿vale? ves que es útil también para eso
01:01:34
le vuelvo a dar, ahora que he guardado
01:01:35
y lo que muestra es 1
01:01:37
¿vale? si yo mostrara la posición
01:01:39
3
01:01:42
y guardo y vuelvo
01:01:42
¿cuál sería la 3 según esta lógica?
01:01:45
¿qué valor mostraría?
01:01:47
3 sería 5 ¿no?
01:01:50
0, la posición 0
01:01:52
la posición 1, la posición 2 y la posición 3, ¿vale? Mostraría un 5, vamos a verlo, pero ya os adelanto que debería. 5, ¿vale? Vale. ¿Qué ocurriría si ponemos aquí un 5? A ver, ¿qué me decís? A ver, a ver...
01:01:53
¿Dos? Imagino, un compañero dice dos, imagino que tu lógica es que vuelva a empezar o algo así. No. Dentro de estas cajas lo que sucede es que tiene un número de compartimentos predefinidos en algún momento al inicio y que además no se puede variar en el tiempo.
01:02:26
Es decir, en este caso ya hemos declarado que este array es de cuatro dimensiones, ¿vale? O de cuatro posiciones. La de dimensiones igual no es el término más correcto. Posiciones, tiene cuatro posiciones. Si pedimos que tenga más, no es que vaya a decir cero, porque como no existe, no.
01:02:42
Lo que va a dar es un dato, esto de índice fuera del rango, ¿vale? Entonces, ojo, cuando vayáis a usar en algún momento Arrays, tened muy en cuenta que si nos salimos del rango que tiene, pues puede dar problemas, ¿vale?
01:02:59
Entonces, esto lo digo porque hay otra forma de declarar un array, ¿vale? Y esto lo comento para poner la otra, que sería, por ejemplo, poner int, digo que es un array, números, y yo no sé los valores, pero sí sé que va a tener cuatro posiciones, como tenía este de antes, ¿vale?
01:03:14
Y se declararía así, ¿vale? Entonces, aquí ahora mismo sí que vais a ver que si pongo 2, ¿el valor cuál va a ser? Esto lo he comentado, ¿eh? Esto es lógica para ver si vamos pillando cosas, ¿eh? Que entiendo que es más enrevesado de lo necesario probablemente ahora.
01:03:35
A ver, ¿qué os pongo? Vale, bueno, el valor, en este caso sí que existen los compartimentos, ¿vale? Y no están cargados de nada, de cero, ¿vale? Pero sí que existen, entonces ahora cuando digo el valor 2, lo que va a mostrar es que vale cero, porque es el valor por defecto que viene.
01:03:53
Me pregunta, ¿puede haber un Array dentro de un Array? Pues si no me equivoco, sí, pero tampoco es algo... Arrays de Arrays ya es complejo, suele ser complejo de gestionar. Por tanto, hay formas más, pues eso, mediante condiciones de ir gestionando Arrays por separado y que un Array desencadene otro Array, pero meter Arrays dentro de Arrays lo podemos probar, pero ya daría problemas. Vamos a verlo.
01:04:18
Mira, vamos a hacer una prueba. Tenemos un... Vale, sí, mejor no nos metamos en el jardín, porque ya os digo que habría formas más fáciles de esa lógica de querer implementar llegar a ella.
01:04:46
Entonces, eso, que sepáis que los arrays tienen valores, un número de cajas, digamos, de compartimentos predefinidos por, o que lo declaramos de forma explícita con los valores,
01:04:58
o de forma explícita, pero solo con el número de posiciones que tiene, ¿vale? Y luego aquí es donde podemos ir operando como con cualquier cosa, con cualquier variable y decirle, vale, en este punto, ¿vale? Ahora mismo todo vale 0, pero en este punto la variable que está en la posición 1, que, ojo, la 1 sería la que está aquí, no la primera que se ve, ¿vale? Importante.
01:05:09
Eso sí es importante que lo tengamos en cuenta. Pues esta que valga a 2, ¿vale? Y entonces ya se ha guardado dentro de números de esta variable, como siempre, porque está dentro del ámbito adecuado, que la posición 1 va a valer 2.
01:05:29
Por eso yo ahora si muestro números 1 o incluso me salgo del start, lo he declarado aquí, he dado el valor aquí, se ha guardado en una caja que es una variable global y luego en el update lo pongo aquí, lo que va a mostrar es fotograma tras fotograma el valor 2.
01:05:45
¿Vale? Y vais a ver que 2, 2, 2, 2, pues no para ahí de sumarse todo el rato y ahí lo tenemos, ¿no?
01:06:06
¿Vale? Esta lógica de los arrays es importante porque aunque no funcionan exactamente como un array, y ya saldrán casos en los que un array es necesario, ¿vale?
01:06:12
Ya más o menos sabemos cómo funcionan. Entiendo que se entiende un poco mejor que a lo mejor en los apuntes, aunque esté explicado también.
01:06:23
Bien, si os dais cuenta, al final cuando tenemos valores con varias posiciones guardadas, ¿vale? Como este transform position vais a ver que al final tiene tres valores guardados, el de x, el de y y el de z, pero son tres valores distintos numéricos, ¿vale?
01:06:29
Todo esto se basa, digamos, en valores multiposición, ¿no? Que pueden guardar varios valores en sí. En sí el position es más un strut, el vector 3 es un strut, ¿vale? Pero un poco el funcionamiento es parecido al de un array.
01:06:47
Entonces, me parece conveniente al hablar de variables que pueden contener más de un valor, poner el ejemplo de los arrays como primer caso.
01:07:05
Cuando veáis que trabajáis con coordenadas o con posiciones o con direcciones, esto en el tema 2, estoy adelantando, vais a ver que existe esto del vector 3 y el vector 2.
01:07:20
Y un vector 3 al final, que es un tipo de variable que se puede generar como in, bool, etc., también puede ser posiciones. Y vais a ver que vais a tener que, new vector 3, vale, dame un segundo, new vector 3, 0, 1, a ver si me deja y no da problemas, vale.
01:07:32
¿Vale? Vais a ver que para decir estas posiciones que son vectores 3 como las que maneja el transform, ¿vale? Al final la lógica es un poco lo mismo. Poner valores separados por coma y en el orden adecuado, ¿sí?
01:07:54
Cuando vais a ver también, que esto también se explica, que cuando estamos trabajando con Vector3, cuando generamos variables con más de un valor, ¿vale? Tenemos que ir como generando instancias, ¿vale? Ahora que hemos usado instancias de GameObjects, generando instancias de variables, ¿vale?
01:08:08
Por eso vais a ver que cuando tengáis que hablar o poner un valor de un vector 3 en mitad de un código, vais a tener que poner esta palabra new, ¿vale?
01:08:27
Porque un vector 3, como es un valor múltiple, guarda varios valores, hay que generar una nueva instancia que guarda varios valores.
01:08:36
Esto entiendo que es quizá un poco más avanzado, pero a medida que vayáis haciendo las tareas, os va a ir surgiendo esta duda y seguramente lo veamos.
01:08:44
Pero lo que vamos a poder hacer con un vector 3 es decirle, vale, yo quiero que este objeto que tenga este script, cuando arranque el juego, se ponga en esta posición, porque le estamos pasando un valor que es un vector 3 en x0, en y5 y en zi1.
01:08:54
Si yo guardo y ejecuto este código, vais a ver que quien tiene el código, que es este juego, que ahora está en menos 8 y 15,25, al arrancarlo, se va a poner en 0, 5, 1, que son las posiciones que habíamos pasado por este valor.
01:09:14
¿Veis que un poco lo que está haciendo es colocar cada uno de estos números en la cajita correspondiente a su posición? Entonces así funcionan un poco los valores multiposición.
01:09:29
vale, mira, acabas de hacerme una pregunta
01:09:44
interesante, y que no voy a ahondar
01:09:48
tampoco mucho, de hecho no lo
01:09:50
vamos a ver seguramente en el curso
01:09:52
más que como que existe, pero pone
01:09:54
una duda que ha surgido, bueno
01:09:56
puede haber, a raíz que guarden por ejemplo
01:09:58
cuatro valores, pero estos son cero en un
01:09:59
principio, ¿pueden esos valores cambiar con el tiempo
01:10:02
por alguna modificación? ¿o son valores fijos?
01:10:04
ah, perdona, te había entendido otra cosa más compleja
01:10:06
pero que también, que era lo que me venía bien
01:10:08
sí, de hecho, la respuesta
01:10:10
es sí, los valores pueden ir cambiando
01:10:12
durante el tiempo, es lo que he hecho antes, cuando yo pongo este, pongo yo que sé, varios valores, lo voy a llamar así, ¿vale? A este array, new, y voy a poner new int, ¿vale?
01:10:14
Veis que cuando estoy declarando, lo que os he dicho antes, una nueva variable multiposición, vamos a decir, como un array, para generar, digamos, valores de esa variable, es muy normal tener que poner este operador de new.
01:10:32
Si no, vais a ver también que da error. Cuando de un error en algo multiposición y digáis por qué pasa, probablemente es que falta este new. Ya iremos viendo la lógica, pero de momento quedamos con esto.
01:10:53
Vale, lo que me preguntaba el compañero. Ahora mismo, todo esto, las cinco posiciones que tiene esta array, valen cero, ¿no? Existen, pero valen cero. No van a dar error si las llamamos, pero valen cero. Nosotros luego podemos ir diciendo int en su posición 1, que es lo que había hecho antes, vale 4.
01:11:05
int, a ver, no, pero nada, te lo estoy haciendo mal, el nombre de la variable es varios valores, ¿vale? La posición 1 vale 4, en la posición 3, o en la posición 2, mira, incluso te lo indica ahí, vale 0.
01:11:24
Ahí estamos cambiando los valores que hay aquí. Entonces, nosotros incluso podemos decir debug log y podemos decir que nos muestre varios valores.
01:11:42
Y ahora lo que va a hacer es mostrarnos todo en la raíz de una. Dame un segundito y lo vemos. Ahora lo que me está diciendo...
01:11:58
Vale, da problema esto, ¿no? Debug low, varios valores, y se podría poner 0, aquí varios valores, 1, etc. Podemos ir poniendo los diferentes, ¿vale? Voy a poner los dos primeros.
01:12:06
Entonces, cuando muestre esto, varios valores, claro, esto lo está mostrando con un número, claro, hay que hacer otro debug log aquí, ¿vale?
01:12:24
Pero aquí podemos ir viendo los distintos valores, habría que hacer distintos debug logs, no se pueden condensar todos en uno así.
01:12:40
Si vamos mostrando los distintos debug logs, y vamos cambiando el valor que muestran, se me ha colado un 6, ¿vale?
01:12:47
Si yo ahora lo ejecuto, vais a ver que no todos los números que ponen son 0. El primero será 0, el segundo será 4, el tercero será 0, el siguiente será 0 también, voy a ponerle un 7 mejor, ¿vale? Y 0. Entonces, aquí hemos cambiado los valores ya durante la ejecución del juego.
01:12:57
Entonces yo si lanzo esto
01:13:13
0, 4, 0, 7, 0
01:13:15
Entonces aquí hemos creado el cajón
01:13:18
Pero lo hemos cambiado después
01:13:20
Incluso después podemos decir
01:13:21
Vale, y que varios valores 3
01:13:23
Una vez
01:13:25
Ya lo ha impreso en pantalla
01:13:27
En consola
01:13:30
Vas a valer
01:13:30
8
01:13:32
Vale, entonces
01:13:34
Lo que ponemos aquí
01:13:36
Es
01:13:40
0, 4, 0, 7, 0
01:13:40
y a ver que no está mostrándolo
01:13:45
vale, y me falta poner otra vez el debug log
01:13:47
de 3, que es el que estoy cambiando
01:13:49
y vais a ver que ahora va a haber otra línea
01:13:51
que va a añadir un 8
01:13:53
va a poner otra línea que es un 8 y lo hemos cambiado
01:13:55
en dinámico, claro, vale
01:13:57
ahí está
01:14:03
si, se pueden concatenar
01:14:04
lo que pasa es que si los
01:14:07
concatenamos como son números
01:14:09
habría que convertirlos en texto
01:14:11
vale, pero bueno, igual me equivoco
01:14:12
pero si yo los concateno así
01:14:15
vale
01:14:16
pongo este
01:14:18
lo que va a hacer es sumarse
01:14:22
lo que sí se puede hacer es decirle
01:14:24
que aquí haya un espacio
01:14:26
y como esto ya lo ha convertido
01:14:28
en texto, pues ahí sí que lo haría
01:14:31
pero bueno, vamos a poner un espacio
01:14:32
y una coma, sí, lo estaba intentando
01:14:34
hacer de otra forma, ahora sí que lo va a hacer
01:14:37
ahí, vale, y ahora sí que lo va a mostrar
01:14:38
0 y 4 que son los dos primeros valores
01:14:43
que tenemos, el 0 que no hemos dicho nada
01:14:45
y el 4 vale no sé si me vais siguiendo lo que había entendido le había entendido antes al
01:14:47
compañero es que si una vez se han dicho cuántas posiciones tiene un array si se puede cambiar ese
01:14:55
número de posiciones pues imagínate hemos dicho que hay cinco valores de armas cinco armas posibles
01:15:01
y luego de pronto durante el juego quieres que haya siete ese ese tipo de operación no se puede
01:15:08
hacer con array no se puede decir que a lo largo del juego no que va a cambiar los valores de estas
01:15:14
cinco posiciones, sino que de pronto pasa a tener siete posiciones. Para eso existe otro concepto parecido, pero bueno, tiene más funcionalidad y es más complejo,
01:15:18
que es el de lista, list en Unity. Voy a buscarlo aquí. Aquí hay, por ejemplo, si buscáis ahí documentación, las listas sí son un elemento que permite reordenar
01:15:29
ordenar con otros comandos, cambiar el número, la longitud de posiciones, ¿vale? A ver, bueno, mira, de hecho aquí hay una explicación que dirá, las listas son muy parecidas a los arrays, ¿vale?
01:15:41
Y tiene otra sintaxis y es más elaborado, por eso no hablamos de ello ahora, pero también existen las listas, ¿vale? Eso es lo que pensaba que me estabas preguntando.
01:15:55
Los arrays, sí que es verdad que una vez se dice el número de posiciones, no hay forma fácil de cambiarlo. Por ejemplo, otra cosa importante, que esto no lo he puesto, pero si yo esta variable array,
01:16:05
Si esta array, mejor dicho que variable, digo que sea un serialize fill y lo vemos aquí, guardo y voy aquí, vais a ver que se genera a nivel visual, como hemos hecho en otros momentos, las posiciones de un array de 5.
01:16:20
Veis que empieza por el 0, tiene 5 posiciones, 5 posibles, y empieza por 0, por eso acaba siempre con un 1 menos, con un valor menos. Están aquí vacías porque recordad que hasta que no arranquemos el código, el screen no se ejecuta y te pone aquí los valores.
01:16:40
Y aquí es lo mismo, aquí podemos ir cambiando los valores en vivo, etcétera, que cuando los paremos van a volver al cero porque una vez más, esto ya se dijo seguro en alguna de las grabaciones, estos valores varían los del código, siempre y cuando el código después no vuelvan a cambiar en ejecución estos valores.
01:16:54
Hay un orden. Por defecto, nosotros aquí podemos decir que esto valga 5, pero al arrancar el juego ha habido una combinación. ¿Por qué? Porque como en ningún momento del código solo se han creado las cajas, pero no se dice que valga explícitamente 0, este valor lo hemos cambiado aquí, con la edición que hemos hecho de este valor mediante el inspector.
01:17:14
Pero luego al arrancar el juego sí que se dice al iniciar el script que la posición 1 y 3 adquiera estos valores y por eso hace esta combinatoria. Vale 0 todo, pero estamos cambiando por el editor esto y por el código esto.
01:17:39
Esto es lo mismo que cuando aquí estamos cambiando los valores de las posiciones. Aquí estamos cambiando posiciones. Si en el código no decimos explícitamente que adquiera otra posición, donde se irán colocando los elementos y la rotación, etc., si os fijáis es el mismo comportamiento.
01:17:57
Esto es lo que estamos cambiando en el inspector. Esto no deja de ser, al final, una clase, un script que se llama transform y que se ha programado para que tenga estos huecos, igual que nosotros aquí estamos programando otra variable para que tenga estos huecos.
01:18:13
Y aquí incluso se pueden ir cambiando órdenes, etcétera, de manera visual, que cuando yo arranque, pues ahora yo el que he cambiado a mano es esta posición 2, pero las otras dos por código nuevamente lo que están haciendo es lo que tienen que hacer, que es proporcionar unos valores.
01:18:28
Y si yo luego después de mostrar esto, como he hecho antes, le digo que aquí varios valores 1 valga 100, pues en la posición 1, primero momentáneamente pondrá 4, pero finalmente la que se va a quedar es el 100.
01:18:46
Ahí lo tienes. Aquí nos ha impreso 0 y 4, que son los valores que habíamos pedido al principio, pero tened en cuenta eso, el orden de ejecución.
01:19:03
¿Qué tal hasta aquí?
01:19:16
Me estoy enrevesando con cosas, pero que son importantes para luego ir entendiendo
01:19:18
y ir planteando nuestro código, ¿vale?
01:19:22
Dudas que tengáis hasta este momento.
01:19:25
Si tenemos cinco armas...
01:19:31
Vale, me pregunta un compañero.
01:19:36
Mi pregunta es más enfocada para videojuegos.
01:19:38
De todo modo, nos estamos adelantando un poquito, ¿eh?
01:19:40
Son preguntas más avanzadas, pero...
01:19:42
Pone, si tenemos cinco armas, aparece una sexta y queremos cambiarla por alguna de las que portamos.
01:19:44
¿Cambiaría el valor del array donde tenemos el arma que vamos a perder?
01:19:49
Eso es, también se puede hacer. Si, por ejemplo, en vez de... A ver si no me meto en ningún jardín de error, pero si en vez de ser un array de... Primero voy a poner una cosa un poco más sencilla.
01:19:52
¿Vale? Si yo creo un array de booleanas y le digo que sea de cinco valores, quiero que también veáis que esto, dependiendo del tipo de variable con la que se compone ese array, ¿vale? Veis que ahora las casillas son de sí o no, de clicar o no, ¿vale? Y esta se ha puesto positiva, a ver, porque ya estaba por defecto, ¿vale?
01:20:05
Aquí podéis cambiar también el número de valores del array, pero en el editor, si lo cambiáis luego durante la ejecución, esto va a dar problemas.
01:20:29
Entonces, si tenemos varias armas y, por ejemplo, lo que hacemos es un array de GameObjects, que son, por ejemplo, el prefab del arma,
01:20:43
Vamos a poner eso como ejemplo. Cuando veamos ese array aquí, vais a ver que sorprendentemente lo que nos está pidiendo...
01:20:50
Y fijaos que aunque yo esté cambiando el código aquí, el inspector es independiente. Si aquí ponemos 5, como estos varios valores, que es el nombre de la variable, recordadlo,
01:21:03
Lo que va a hacer es esperar GameObjects, es decir, esperar prefabs, por ejemplo, o las armas. Tú sí que es verdad que mientras no cambies el número de compartimentos que tengamos aquí, puede haber un momento del juego que lo que hagamos es que en vez de estar cubo, se sustituya por nave prefab. Eso se puede ir haciendo.
01:21:12
sí, y luego tú ya
01:21:31
dices, lo que quiero mostrar es
01:21:33
el valor, el arma
01:21:35
el GameObject que está en varios valores
01:21:37
posición 2, que es la nave
01:21:39
¿vale? entonces sí, eso se
01:21:41
podrá hacer, ¿vale?
01:21:43
me quería meter en
01:21:50
operaciones de vectores
01:21:51
bueno, vamos a verlo así un poquillo
01:21:53
por encima, ¿vale? porque al final
01:21:56
los vectores y esto que estamos hablando
01:21:58
tiene cierta relación, entonces
01:22:00
Entonces vamos a aprovechar, vamos a hablar de vector primero, yo que sé, pongo un nombre así identificativo, ¿vale? Y vector segundo. Aquí he creado dos variables, ¿vale? Que si las pusiera visibles en el inspector para que lo veamos como es esto realmente, que igual es la forma más fácil.
01:22:02
Si yo voy a ver qué es esto de vector 3, y solo lo he puesto en vector primero, que sea visible, vais a ver que al final lo que nos está mostrando es vector primero, y cuando es un vector 3, lo que hace es que ya los vectores están relacionados con dimensiones, con ejes, mejor dicho.
01:22:27
X, Y, Z, ¿vale? De hecho, también, para que veáis que existe, existe vector 2, que lo que tendrá será solo dos dimensiones, X e Y, por ejemplo, que se usará en juegos 2D, por ejemplo, o en juegos 3D, pero solo para tener dos.
01:22:45
Incluso existe un vector 4, que si le doy, me pone x, y, z, w, que cuando leáis el tema va a tener relación con eso de los cuaternios,
01:23:02
o para sonar. No me adelanto porque esto sí que es verdad que ya es complicar de más ahora mismo.
01:23:15
Entonces un vector 3 al final lo que nos permite también es guardar ya valores desde el principio.
01:23:19
Nuevamente, como es un valor compuesto por varios, y veis que cuando me pongo encima pone que es de tipo strut, y un strut es una especie de constructor de valores múltiples,
01:23:27
bueno, no me quieren revesar con esto porque ni yo voy a saber explicarlo bien, cuando tenemos una variable de tipos, como lo que hemos dicho antes con los arrays,
01:23:39
de diferentes valores, que guarda varios valores, hay que poner esta palabra nuevo cuando vayamos a inicializarlo o en muchas ocasiones usarlo.
01:23:47
Yo digo que esto valga estos valores. Ahora mismo tenemos un valor aquí que se inicializa como 5, 1, 5. ¿Qué significa esto? Que yo puedo ir luego a el componente transform y decirle que la posición sea vector primero.
01:23:56
Y lo que estamos diciendo aquí es que coja los valores de este vector que tenemos aquí
01:24:16
Yo cuando voy a este elemento, lo que he hecho antes
01:24:21
Si le doy play, aunque esté en menos 11 y 0 en posición
01:24:25
Al arrancar el juego, me lo está poniendo en 0, 0, 0
01:24:29
A ver, esperad un segundo, transform position vector primero
01:24:35
¿Por qué no me lo está cogiendo?
01:24:39
No se está inicializando bien. Voy a quitar esto un segundo. Cuidado cuando a veces pongáis serialize fill o que sea público y declaráis aquí las variables en vez de en el inspector porque se pueden sobreescribir y aparecer problemas como que no funcionan ciertas cosas.
01:24:43
Ser conscientes de ello. Entonces, cuando ya iremos viendo que al final lo que vamos a ir haciendo en los juegos en gran medida es ir introduciéndonos en estos componentes e ir cambiando sus valores.
01:25:12
Y ya hablé en los vídeos, si no me corregí, ya está planteado que dentro de un componente luego pueda haber subcomponentes o propiedades, mejor dicho.
01:25:26
En este caso, la forma de atacar o de actuar sobre los elementos del transform es poniendo esta palabra reservada que es transform, que es de los pocos componentes que tiene su propia palabra y no hay que capturarlos.
01:25:38
Cuando vayáis trabajando vais a ver que vais a tener que, cuando queréis, por ejemplo, aludir a un componente tipo BoxCollider, por ejemplo, vais a tener que hacer primero una captura del componente para decirle voy a actuar sobre este componente y sobre Istrigger, por ejemplo.
01:25:56
Pero cuando estamos afectando sobre el transform, con poner la palabra transform, punto, y la propiedad sobre la que queremos actuar, por ejemplo, la escala local, local scale, que es la escala, podemos decir que sea también vector primero.
01:26:15
Y vais a ver que ahora mismo estamos actuando al iniciar el juego sobre, y vais a ver que además son iguales la escala, sobre la escala y sobre la posición de forma similar.
01:26:35
Entonces, esto es lo que nos va a permitir luego es también que podamos ir haciendo operaciones con vectores, que son, volvemos a ver, valores combinatorios,
01:26:49
Es decir, valores múltiples que se pueden combinar o se pueden sumar o se pueden restar, ¿vale? Que devuelvan vectores más complejos o combinaciones de vectores. Por ejemplo, si yo ahora hubo un vector 3 que sea vector resultado, y esto es lo último que vamos a ver hoy si no tenéis dudas.
01:27:00
Si yo hago aquí un vector resultado, igual que podíamos sumar números en un tercer, es decir, en número 1, número 2, en un número resultado, esto ya está en otras tutorías,
01:27:15
Si yo aquí pongo que vector resultado, que ahora mismo está vacío, valga lo que es vector primero más vector segundo, lo que va a hacer es sumar los valores de ambos vectores.
01:27:30
ahora mismo como vector segundo es 0 0 0 porque no hemos puesto ningún valor y por tanto no lo
01:27:49
hemos inicializado y ojo se puede inicializar también aquí por ejemplo decir vale vector
01:27:54
segundo al arrancar el juego pasa a valer vector 3 y vais a ver ahora una cosita de nuevo que es
01:28:00
que vale vector segundo vale un vector 3 de 0 5 y 7 por ejemplo y bueno me falta poner un punto
01:28:09
Mejor aquí. Vale, da problemas. Vais a ver que cuando estamos operando con vectores hay que poner, a diferencia de con los números sin, por ejemplo, que pones aquí 5 y se acabó porque es solo un valor,
01:28:17
como aquí estamos operando con varios valores, pues hay que poner que es un vector 3 que recoge estos tres valores. Y recordad que cuando metemos valores brutos, como hacemos aquí,
01:28:29
o como os he dicho antes, al ser una estructura tenemos que inicializar o instanciar un nuevo vector 3. Y ahora este vector segundo pasa a valer 0, 5 y 7.
01:28:38
Entonces, ahora mismo las operaciones entre vectores, que es lo que vamos a conseguir con vector resultado, en este caso estamos sumando, veis que con el nombre de las variables,
01:28:50
Aquí no hay ningún número. Los vectores primero y segundo. ¿Qué resultado va a dar esto? A ver si alguien me lo dice mientras lo voy escribiendo para que se vea en consola.
01:29:00
Si habéis visto ya un poco el tema, esto ya lo indica. Y esto es vector resultado. ¿Qué va a devolver la consola? Vale.
01:29:12
Vale, las operaciones entre vectores de suma y resta lo que hacen es sumarse entre sí las posiciones, es decir, la primera posición se suma con la primera, la primera de aquí se suma con esta, ¿vale?
01:29:35
Resultando en este caso, por ejemplo, en 5, 6, 12. Vamos a verlo, si nos fijáis, 5, 6, 12. Y veréis además que dentro de un vector 3, por defecto, los valores son floats, ¿vale?
01:29:47
Entonces, no tengáis miedo por poner aquí 5.5 y ojo, recordad, como es float, separado con punto y con coma, digo, por punto y poniendo la F de float, ¿vale? Para que no de error. Ahora pasaría a valer 5.5 y aquí voy yo que sé, puedo poner 1.5, ¿vale? Pasaría 5.5 más 1.5, 7, 6, 12, ¿no? Serían los valores.
01:30:04
Bueno, pues guardo, voy allá. Esto es importante porque va a ser lo que nos va a ir determinando las sumas y operaciones de las distintas interacciones que hagamos, 7, 6, 12, ¿vale?
01:30:29
Lo mismo con las restas, las restas se restan entre valores, pues aquí sería 5 con 5, y aquí pongo un menos, 5 con 5 menos 1 con 5, pues sería 4, 1 menos 5 sería menos 4, y 5 menos 7 menos 2, es decir, 4 menos 4 y menos 2, guardamos, y esto da 4 menos 4 menos 2, ¿vale?
01:30:41
estas operaciones van a ser muy importantes a medida que vayáis haciendo porque al final todos nuestros valores del transform por ejemplo de posición, rotación y escala
01:31:06
pues se van actualizando y desactualizando en función a vectores que van afectando uno a otro pues sumando para ampliar la dirección o la velocidad o la posición
01:31:16
o restando para decrementarla. Entonces esto es importante entender cómo funcionan los vectores 3.
01:31:24
Una última cosa, también se habla en el tema, ¿qué pasa si yo lo multiplico? Los vectores entre sí no se pueden multiplicar, sí se puede multiplicar un vector, por ejemplo, por un número
01:31:31
Y lo que vais a ver es que lo que va a hacer es multiplicar por ese número cada uno de los valores, ¿vale? Pues por ejemplo aquí, vector primero, que es este de aquí, por 2 sería 5,5 por 2, 11, 2 y 10, ¿no?
01:31:43
Bueno, yo guardo y van a ser 11, 2, 10, hemos dicho. Guardo, ejecuto, 11, 2, 10. Ahí está. Pero no se puede multiplicar un vector por otro. Para eso hay algunas funciones más avanzadas que vienen al tema, que sirven para hacer este tipo de operaciones.
01:31:56
Entonces, que sepáis que si en algún momento queréis multiplicar cada valor por su correspondiente, no se puede de esta forma. Voy a parar aquí porque creo que es suficiente. Y además, si no hay duda de los temas 0 y 1, esto del 2 ya viene un poco explicado ahí, así que también es mejor no avanzar de más.
01:32:17
Pero bueno, ¿qué tal lo que hemos estado viendo hoy? ¿Qué tal lo veis? Esto, cuando ya os pongáis además con la tarea 2, ya vais a ir viendo aplicación práctica, esto de tanto sumar y restar y tal, ¿vale? Ya van llegando frutos, digamos, más visibles.
01:32:37
Lo he dicho, ¿qué tal? ¿Alguna duda? ¿Algo que queráis que repasemos o comentemos?
01:32:56
Bastante bien, vale
01:33:04
¿Alguna duda o algo que pensabais que era de otra forma leyendo el tema?
01:33:05
¿O no? ¿Directamente estáis viendo cosas nuevas o se ajusta a lo que estabais leyendo en el tema?
01:33:09
¿Todo bien?
01:33:16
Vale, vale
01:33:21
Pues si no hay nada más, eso pues
01:33:23
Claro, yo a veces, me ha puesto un compañero, me siento un poco abrumado
01:33:25
A veces no sé si voy lento o voy rápido, os pido, por supuesto, como os dije, que este módulo lo llevéis al día, porque si no es verdad que, por mucho que yo explique aquí, son conceptos que cada vez se van sumando y se van complementando.
01:33:29
Pero a veces no sé si voy rápido o lento, bueno, yo creo que vamos a buen ritmo, vale, es más por la sintaxis y la lógica, sí, es hacerse, y a medida que vais practicando, pues más fácil os será.
01:33:43
Y ahora pongo muchos ejemplos, que son pocas líneas para ver la ejecución directa de los ejemplos, pero bueno, luego habrá que ir relacionando muchas líneas entre sí, porque cuando se introduzcan los métodos de acción, etc., como hemos hecho con el Insta en sí, pero métodos también que creemos nosotros, etc., pues sí.
01:33:55
me puede un compañero
01:34:14
en mi caso particular estoy más avanzado
01:34:17
más por mi cuenta, también por tema del proyecto
01:34:19
bueno, vale, pues luego también seguramente
01:34:20
hay algún compañero que
01:34:23
que directamente
01:34:24
que sepa de esto, vaya que
01:34:27
pero bueno, yo intento ir avanzando
01:34:28
un poco, acorde a todo, e ir viendo
01:34:31
cosas que aunque vayáis más avanzados
01:34:33
está bien repasar o ver limitaciones
01:34:35
que hay, que también es un poco el objetivo
01:34:37
que intentéis ir entendiendo para
01:34:38
frustraros lo menos posible con
01:34:41
errores, por ejemplo eso que he puesto
01:34:42
del null para si algo existe o no
01:34:44
que de error o no, como condición
01:34:47
es algo importante
01:34:49
eso es lo que se llama también capturar
01:34:50
excepciones, si queréis buscar más
01:34:53
sobre ello, que hay otras formas de hacerlo con otras
01:34:55
palabras dedicadas, pero en esencia es lo mismo
01:34:57
de comprobar si algo existe
01:34:59
para que si no existe no de error
01:35:00
y se ejecute el juego igualmente
01:35:02
y no se detenga porque
01:35:05
algo no existe y que
01:35:07
para nosotros es algo lógico, pues vale
01:35:08
Si no existe ese GameObject en este caso para instanciar, pues omítelo y sigue, pero el ordenador Unity, la programación es más pejiguera que todo esto.
01:35:10
Vale, pues nada, si no hay así dudas, ir avanzando. Bueno, en breves, de hecho, entregáis también la primera tarea.
01:35:23
Con la tarea cero también iros poniendo y iremos viendo y dudas que tengáis, pues eso, también me interesa dudas que planteéis.
01:35:32
Pues nada, si no hay nada más, pues muchas gracias por asistir y poquito a poquito pues lo iremos entendiendo mejor, claro.
01:35:38
- 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:
- 63
- Fecha:
- 19 de noviembre de 2024 - 20:07
- Visibilidad:
- Clave
- Centro:
- IES CIFP a Distancia Ignacio Ellacuría
- Duración:
- 1h′ 35′ 52″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 590.13 MBytes