Venga, vamos a por ello.
Ayer habíamos dejado a nuestro granjero moviéndose de izquierdas a derechas y de momento ya sé que no
lo hemos implementado, la idea es que cuando lanzáis cualquier pedazo de comida en el escenario, como
estoy haciendo ahora, a la que suelto no se va.
Es entonces la instancia Fionn o lanzar una bala o un proyectil?
Algo realmente es tan simple como lo que acabo de hacer ahora.
Hacer que en un momento dado el personaje sea capaz de que en su mano o delante de él aparezca una pieza
de comida como ésta.
De modo que cuando aparezca solo por el escrit que tiene añadido la propia galleta o el propio objeto
se moverá para alante.
Entonces hay que automatizar este proceso con el script que ya teníamos anteriormente para ello en el
Player Controller, pues habíamos programado sólo el movimiento que habíamos programado el movimiento.
Esto es el spoiler del avioncito.
Lo tenéis resuelto?
Por cierto, os ha subido un vídeo de cómo se hace lo del avión, que era un poco más difícil de lo
normal.
Entonces aquí, como decía, ya habíamos puesto el movimiento horizontal del granjero.
Es hora de detectar el disparo para detectar el disparo.
Lo voy a hacer de otro modo diferente.
Podría volver a utilizar el input de taxis y localizar un eje que me interesara.
Por ejemplo, aquí en el input manager hay un eje que es el Filler 1, 2 y 3, que típicamente son los
botones de disparo.
En un shooter está el click o el del control izquierdo, está el left izquierdo, el izquierdo y el
izquierdo.
Vale que son típicamente los botones junto con los del mouse para poder disparar.
Sin embargo, hay veces que en lugar de querer utilizar un eje, queréis acceder directamente a un botón.
Por qué?
Pues porque os interesa probarlo rápidamente, sobre todo si estáis en el ordenador.
Es una forma de hacerlo.
Es cuando sois la clase input.
El Get Ac6 nos devuelve uno de los ejes de configuración que aparecen en el input manager, pero hay
otra que es el jet ski y jet ski.
Tiene la ventaja de que podéis escribir directamente la tecla o el botón que queréis que ejecute la
lógica.
Aquí, por ejemplo, debajo de todo lo anterior, si esto era el movimiento del granjero y de hecho
lo podéis documentar, el movimiento del personaje o baje.
Y aquí vienen las acciones del personaje.
Una de las acciones es la de disparar del mismo modo que usábamos el input axis.
Fijaros que ahora hay un taxis, pero también hay un jet batón jet ski y de hecho el jet batón tiene
variantes Jet Baton Dawn batón y el jet ski tiene variantes jet ski jet ski.
También está Jet más batón, más batón.
Dawn Magus batón a la regla.
Recordareis que van de tres en tres porque hay tres acciones una expulsar, la otra mantener y la otras
levantar.
Dependiendo de lo que queráis, hay que utilizar uno u otro.
Así que en este caso, para teclas yo recomiendo el jet ski es muy cómodo o sus variantes?
Jet Ski da un jet giap porque en el interior podéis utilizar los comandos Kickoff, que básicamente
tienen todas las teclas de vuestro teclado.
R Returned al izquierdo, tecla de Mac izquierda y un montón de punto.
Aparecen todas y cada una de las teclas que tiene un teclado.
Entonces, si queréis, por ejemplo, lo típico en este caso sería disparar.
Con qué botón?
La barra espaciadora vale, entonces se hacéis Keiko de punto Espais.
Ahí la tenéis.
Hay un montón.
Lo suyo es en algún momento dado, abrir la documentación de Unity Watch Global.
Que qué teclas hay disponibles para que las sepáis todas?
Además, no son obvias.
Por ejemplo, el intro no es Enter Return.
El intro es el otro, el que estaría donde el teclado numérico no es el mismo.
Cada tecla tiene un nombre diferente.
Pues esto básicamente es un método booleano que os devuelve true si esta cosa está siendo pulsada la
barra espaciadora y fool's en el caso en que no esté siendo pulsada.
Lo mismo con el Get It Down Get It Down será verdadero si justo es el frame en la que la tecla pasa
de estar levantada a estar pulsada y get app será verdadero, justo el único efrain en el que levantes
y la tecla se levante.
Vale get y sin duda.
Es que la tecla se mantenga pulsada.
Si mantienes, hará efecto metralleta.
Dependiendo de lo que programemos ahora, veremos.
Entonces fijaros en este caso cómo esto devuelve un valor bule a los suyos, rodearlo de Heini, de
modo que entraremos dentro de éste.
Y si entramos aquí hay que lanzar un proyectil que lanzar un proyectil.
Gracias a esto significa que en un controlador puede haber muchísimos eventos.
Podéis responder a casi cualquier tecla que se os pase por la cabeza de un mando de PlayStation, de
un teclado, de lo que sea.
Y la verdad es que es muy útil porque ahora cada una de las teclas se puede asociar a una acción.
De hecho, es lo mismo si yo hubiera definido una acción con la barra espaciadora.
Al final lo habría asociado a un eje y lo que haría sería invocar a taxis en lugar de aquello que vale.
Pero sería exactamente lo mismo.
De acuerdo.
Para que veáis, el otro método que no es de taxis, en este caso es el que pulsado.
Y ahora viene la fase divertida, que es que para lanzar un proyectil habéis visto que es tan fácil
como hacer que aparezca donde está el granjero.
Solo con aparecer como los proyectiles tienen aquel script que creamos ayer el forward, automáticamente
solo con aparecer en pantalla, Chubut saldrá disparado para alante.
Entonces, esto significa que lanzar un proyectil se convierte en crear un proyectil.
Solo con crearlo en medio de la pantalla automáticamente saldrá disparado.
Ese proceso de crear cosas en programación se llama a instancia.
La idea es que nosotros tenemos plantilla, tenemos un mapa de ruta de cómo son los objetos, de cómo
son los prepas.
Uno debe ser una botella, otro tienes una galleta, una pizza, etcétera.
Pero esto son ideas en nuestra mente, no están en ningún lado.
No songhai, monges o sonasen, el proceso por el cual nosotros obtenemos uno de estos ases y se transforma
en un objeto en medio de la pantalla.
Se llama instancia.
En general, la instancia es un proceso que es pesado y puede ser muy pesado.
Qué quiere decir esto?
Que olvidaros de instancias.
Miles de objetos al segundo.
Matarías el ordenador?
Vale, si se quieren hacer este tipo de cosas.
Existe una tecnología llamada docx data oriented textbook que se fundamenta en olvidar lo que se sabe
de programación orientada a objetos y programar datos.
Es una forma diferente de pensar, es una forma diferente de programar y es muy avanzada, así que no
lo veremos.
Pero en general, recordad que el proceso de instalación es muy duro, es muy pesado y si lo hicierais
muchas veces al segundo, en el caso de teléfonos móviles os comería la batería.
En el caso de un ordenador o una PlayStation podríais llegar a tener picos de frames.
El ejemplo más típico es cuando un personaje quereís que con un disparo lanza 400 balas, 500 balas,
una ráfaga de golpe con un solo click.
Eso congelaría el juego un par de segundos mientras se hace la instalación de todas las balas hasta
que salen todas disparadas.
Para ello, evidentemente, se puede hacer, pero hay que o bien optar por un paradigma de programación
diferente como éste, orientado a datos, o bien hay técnicas que se llaman de object pulling, que
pasan por ya tener creados muchos objetos ya tener creadas muchas balas.
Por eso se llama pulling, como la piscina de balas, a la cual, como ya están creadas, lo único que
hay que hacer es cogerlas y dispararlas, y una vez que se han disparado se devuelven a la piscina.
Lo veremos también?
Vale, pero en general es muy fácil.
Queréis que aparezca un trozo de algo o una cosa?
No se que le puse al mamarracho, esto no se que le arrastre.
Pues si queres que dispare la botella, fijaros que ya tenéis la variable, proyecta el FAP, en la
que habéis guardado un no sé cual.
Cada uno el suyo, la botella, la pizza.
Me da igual, pues la idea es que ahora, cada vez que pulsas el espacio en blanco, lo único que tenéis
que hacer es insustancial.
Ese objeto instantly es lo que estáis buscando.
Instancias pasa por definir tres cosas qué vais a instancias, dónde lo vais a distanciar y cómo derrotado
va a estar el objeto, objeto, oposición y rotación.
Como siempre, la escala no se suele añadir.
Entonces hay que colocar estas tres cosas cómo se llama las variables donde se guarda el objeto que
queréis?
Insustancial.
Recordad taller, lo creamos arriba, crea una variable que se llamaba Proyectã el reto.
Entonces indicamos que queremos instancias.
Proyecta el coma donde lo queréis?
Instancias tipicamente.
éste es el controlador del jugador.
Si utilizo la misma posición en la que está el jugador, se instancias exactamente donde está el jugador.
Si quiero otro lado del jugador, por ejemplo, la mano, lo que sea, necesitaría las coordenadas de
ese objeto, lo cual yo típicamente lo suelo hacer con un objeto vacío en la mano, donde quiero que
se distancien las cosas, le pongo un vacío y cuando se mueve la mano se queda vacío o se mueve conmigo.
Pero siempre tengo la posición de donde quiero que se distancien las cosas.
Yo en mi caso, como va a ser un disparo muy rápido.
De momento voy a obtener Transform Punto Position, que es la posición actual, donde está el padre,
donde está el personaje y por último, la rotación de Giraudo.
Queréis que esté el objeto aquí?
A lo mejor queréis que esté igual derrotado que el personaje, igual derrotado que el propio proyectil.
Depende, depende de quien queráis coger la referencia.
Vamos a ver cómo quedaría rotado por la misma rotación que tiene el propio IFAB, o sea, cero cero
cero.
Y si no nos convence, vamos a probar con la rotación del jugador.
A ver cómo sería, Proyectã.
El punto Transform punto Rothe.
Vale, por tanto, qué objeto vais a instancias donde lo vais a distanciar y cuál es la rotación también
en el caso que queráis utilizar rotaciones nulas que no existan.
Una opción es invocar a la clase cuaterniones punto identity el cuaterniones, la estructura matemática
que se utiliza para guardar las 3 transformaciones afines traslación, rotación y escala en el mismo
sitio.
Es una matriz 4 por 4 y si alguna vez le echas un vistazo o reunión, tiene esta pinta.
Es una matriz que cumple estas propiedades de aquí.
Recuerda mucho a los números complejos, pero en lugar de unidad imaginaria, tiene tres unidades imaginarias
que cumplen aritmética, álgebra y la relación entre ellas es que forman un espacio vectorial de dimensión
4 embebido dentro de los complejos y por regla general se representan así.
Esto es lo que realmente utiliza un videojuego para mover, rotar y escalar estas cosas.
El producto de estas cosas, de hecho.
Aquí podéis entender por qué es tan interesante usar Unity.
No os he hecho ninguna matriz.
Entonces, si tuviera que hacer un juego con el producto de estas cosas, ya os digo yo que sufriría
bastante porque el producto se hace a mano.
Se utiliza este Plus Open?
GL Hay que hacer estos productos a mano y como el producto de las matrices no es conmutativo, girar
del derecho del revés nunca da el mismo resultado.
Entonces, por suerte para nosotros, Unity ya tiene todo esto implementado bajo nivel y no nos tenemos
que preocupar de cómo funciona esto ni de cuál es la aritmética básica de un cuaterniones.
Sin embargo, a la hora de utilizarlos, por ejemplo, la clase cuaterniones tiene un montón de métodos
relacionados con las rotaciones, con la normalización de cuaterniones, con la identidad, que básicamente
es la matriz que tiene unos en la Diagonal y ceros fuera.
Vale, entonces aquí hay todo un montón de rotaciones ya creadas para vosotros.
En el caso que queráis utilizar una de éstas, en nuestro caso lo que os he dicho, yo voy a coger la
rotación del propio proyectíl y a ver qué tal funciona esto.
Entonces se guarda el script nos vamos a Unity, damos al play y en principio, si yo disparo lo veis?
Si mantengo pulsado lo que decía el colega, en efecto metralleta.
Evidentemente podéis ver que el número de objetos en pantalla está incrementándose.
Lo veis unas cuantas botellas.
Eso significa que ahora es un dolor de cabeza porque al final son botellas.
Pero si me paso media hora, cuando haya medio millón de objetos en pantalla, igual es peligroso.
Vale, entonces los objetos se siguen moviendo y siguen estando iluminados.
Siguen teniendo todo tipo de interacción física.
De hecho, cada vez que disparo fijaros que aquí el número de triángulos y el número de vértices en
pantalla sube o veis.
Cada vez hay más objetos en pantalla.
Lo que pasa es que como se van para arriba, cuando yo dejo de disparar ya no se renderiza.
Ya no es un problema de rendering, pero que los objetos están aquí.
O sea, esto parece los animales de dos en dos hacia el arca.
Pues lo mismo, estos son las balas que disparado hace media hora que se siguen moviendo al infinito.
O vais.
Entonces habrá que arreglar esto, pero por lo demás fijaros que si ahora yo vengo al player le cambio
la botella por la pizza y vuelvo a darle al play, que es lo que va a ocurrir, que va a disparar pizzas.
Quiero que dispare sándwiches, voy a al playa, le cambio la pizza por un sandwich y para sándwiches,
resto.
Cuanto más lento vaya el juego, cuanto menor sea el número de frames por segundo, menos podrá disparar,
por supuesto, porque recordad que el aceite está limitado a ejecutarse una sola vez por Freud.
Pero bueno, fijaros que aquí esto me va rapidísimo y que instancia todo lo que me da la gana y que
si hago click aquí se me van los los bichos, los sandwiches.
Por ahí parece una cobra que se va para allá a lo lejos.
Si vale, pues comprobar que el espacio en blanco dispara.
Y si queréis otra tecla?
Lo que os he dicho en lugar de Keiko de punto es paix y punto.
Elegid el botón que queráis, que hay un montón de botones.
Asegura que lo tenéis.
No me elijáis un joystick.
8.
Baton 3 Que a lo mejor no tenéis joystick en el portátil.
Simplemente elegir uno que tenga que tenga sentido, una tecla g.r., un bloque mayúsculas.
Cualquier cosita de estas.
Yo me quedo con el espacio en blanco, vosotros la que os sea más cómoda.
En teoría ya sois capaces de mover y de disparar.
Que por cierto, no lo he probado, pero si veis, deberíais disparar donde esté el mamarracho este.
O sea, si estoy aquí, estoy aquí.
Si hago así, hago el efecto típico de disparar una ráfaga de pizzas a lo bestia.
Vale, fijaros como no hay interacción física y las pizzas atraviesan la cabra o atraviesan el bicho,
el de acuerdo.
Entonces ahí lo tenéis.
Si.