Saltar navegación

Tutoría 4 - DEIM - UT0,1,2 - Curso 24·25 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 19 de noviembre de 2024 por Daniel M.

63 visualizaciones

Grabación de tutoría de DEIM realizada el 19 de noviembre de 2024.

Descargar la transcripción

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
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
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
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
Vale, entonces 01:13:34
Lo que ponemos aquí 01:13:36
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

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid