C# Unity Pac-Man estilo laberinto con integración opcional de blockchain de cera | Morgan Page | Skillshare
Buscar

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

C# Unity Pac-Man estilo laberinto con integración opcional de blockchain de cera

teacher avatar Morgan Page, Web & Game Developer

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción al curso

      1:56

    • 2.

      Prerrequisitos

      14:11

    • 3.

      El editor de Unity

      15:16

    • 4.

      Tu primer script

      6:15

    • 5.

      Escenas y GameObjects

      5:12

    • 6.

      Variables

      6:28

    • 7.

      Formación básica terminada

      0:09

    • 8.

      Laberinto

      30:10

    • 9.

      Laberinto Navmesh

      13:20

    • 10.

      Laberinto enemigo

      7:51

    • 11.

      Jugador de laberinto

      20:35

    • 12.

      Física del jugador de laberinto

      7:31

    • 13.

      Patrulla de laberintos

      16:43

    • 14.

      Laberinto la mancha

      5:27

    • 15.

      Entrada de laberinto

      2:01

    • 16.

      Ratón laberinto

      18:58

    • 17.

      Laberintos para reunir

      32:38

    • 18.

      Laberinto Game Over

      21:15

    • 19.

      Prefabricados de laberintos

      8:55

    • 20.

      Laberinto viendo doble

      9:18

    • 21.

      Cera

      19:08

    • 22.

      Cera atómica

      11:07

    • 23.

      Interfaz de usuario de NFT con cera

      31:54

    • 24.

      Reproductores de cera

      20:39

    • 25.

      Cera Comunica

      12:00

    • 26.

      Cera Crea una NFT

      14:19

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

9

Estudiantes

--

Proyecto

Acerca de esta clase

Crea un juego de laberinto 2D con estilo Pac-Man con Unity y C#.

Luego aprende a integrar NFT con la cadena de bloques WAX.

Lo que vas a aprender:

  • Cómo usar el Editor de Unity

  • Scripting en C#

  • Tilemaps

  • NavMesh e IA

  • Animación

Qué incluye:

  • Arte único de personajes y entornos que puedes usar en tus propios proyectos

  • Código fuente completo para el juego terminado

¿También querías crear un juego al estilo Pac-Man y no sabías por dónde empezar?

Este curso te llevará de cero a ser héroe en solo unas horas.

¿Quieres agregar tu juego a la cadena de bloques e integrar NFT directamente en tu juego? Al final de este curso, habrás creado tus propios NFT, los habrás implementado en la cadena de bloques y los habrás integrado en tu juego.

Testimonios de otros cursos:

Exactamente lo que estaba buscando. Ganchos, lienzo y roguelikes. También hay muchos buenos patrones de diseño, al menos hasta ahora. Voy a seguir este curso, pero intentaré implementar las características con typecript. Sigue con otro curso intermedio. Muchas gracias.

Alex Barber

¡Es genial lo que puedes hacer en menos de 3,5 horas! Morgan desglosa los conceptos básicos y te ofrece una visión general de todas las herramientas necesarias para que tengas éxito con tu idea de juego. ¡Buen ritmo y bastante completo! Le encantaría ver una discusión más profunda sobre la agrupación y la administración de los activos en Tiled y Phaser. ¡Gran tutorial!

Tech Ninja | Web y TI

Conoce a tu profesor(a)

Teacher Profile Image

Morgan Page

Web & Game Developer

Profesor(a)
Level: Intermediate

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción al curso: Bien, déjame mostrarte lo que vamos a construir en este curso. Así que este juego tiene integración de cadena de bloques de cera, por lo que podemos iniciar sesión con nuestra billetera ancla. Entonces voy a agarrar mi celular y escanear ese código para poder iniciar sesión. Entonces voy a iniciar sesión. Así que eso me ha encerrado. Entonces el juego consulta mi billetera y ve qué NFT tengo, y tengo un gato, un perro y un ratón, NFT Y como parte del curso, te voy a mostrar cómo crear estos NFT Y voy a jugar como mi ratón NFT. Entonces voy a hacer click en Mouse. Y el juego es como un juego de laberinto genial en el que corres por ahí tratando de agarrar todos estos trozos de queso, y tienes estos monstruos blob viniendo detrás de ti Entonces tenemos una partitura aquí. Entonces por el momento, tenemos cero trozos de queso, y voy a dar vueltas a ver si puedo agarrar todos los quesos de este laberinto Y te advierto que es más difícil de lo que parece. Vamos a intentarlo. Me va mejor de lo que suelo hacer. Déjame ver si puedo agarrar este queso en la esquina. No. Ahí vas. Y luego, claro, puedes reiniciar y tener otra oportunidad y ver hasta dónde llegas. Bien. Me interesará ver si a alguien le va mejor que a mí, y vamos a construir este juego. 2. Prerrequisitos: Bien, vamos a instalar y configurar Unity. Entonces, si abres un navegador web y vas a unity.com, y en esa página, deberías ver un botón de descarga Entonces, da clic en el botón de descarga. Y si solo nos desplazamos un poco hacia abajo, deberías ver descargar el Unity Hub. Ahora, el Unity Hub es lo que vamos a necesitar instalar para instalar el editor de Unity. Así que asegúrate de descargar el para tu sistema operativo. Entonces, si estás usando una PC con Windows, luego descarga para Windows, si estás usando un Apple Mac, luego haz clic en descargar para Mac. Además de descargar eso, probablemente al mismo tiempo, es una buena idea descargar código de Visual Studio porque vamos a necesitarlo para editar nuestro código. Entonces si vas a code sudio.com. Y en esa página, hay un botón de descarga. Haga clic en eso. Y si tienes una PC con Windows, descarga el instalador de usuario para 64. Y si estás usando una Mac, si estás usando una Mac con chip Intel, luego haz clic en el chip Intel, y si estás usando una Mac Apple Silicon como una computadora portátil M one o algo así, luego haz clic en Apple Silicon. En realidad estoy usando una Mac M one, haría clic en eso. Así que una vez que se descarguen esos dos archivos, vaya a su carpeta de descargas, y vamos a instalar el Unity Hub. En primer lugar, haga doble clic en eso. Y en Mac, es solo un caso de arrastrar y soltar eso a la carpeta de aplicaciones, y en Windows, solo pasarías por el proceso e instalación Una vez que hayas instalado Unity Hub, es un buen momento para instalar también el código de Visual Studio. Así que ve a tu carpeta de descargas. Si estás en una Mac, solo quieres agarrar esa aplicación de código de Visual Studio y arrastrarla así a tu carpeta de aplicaciones. Ya lo tengo instalado, así que no voy a hacer eso. Si estás en Windows, probablemente descargaste un instalador de código de Visual Studio, así que simplemente haz doble clic en eso e instálalo. La primera vez que ingreses a Unity Hub, te pedirá que inicies sesión o crees una cuenta. Si haces clic en crear una cuenta, serás llevado a esta pantalla aquí donde puedes poner un correo electrónico, contraseña, et, et, o realmente puedes hacer inicios de sesión sociales de esta manera Ya tengo un ID de unidad, así que entraría así y voy a iniciar sesión con mi cuenta de Google. Bien, una vez que hayas iniciado sesión en el Unity Hub, lo que realmente hará es que no te llevará a esta pantalla. Te llevará a uno, que intentarás e instalarás la última versión soportada a largo plazo de unity. La versión LTS. Si ves LTS, ahí solo se trata de apoyo a largo plazo Entonces, si no quieres hacer eso y quieres elegir una versión específica del editor de Unity para Instalar, simplemente puedes hacer clic en Saltar en esa pantalla, y eso te llevará esencialmente a esta pantalla de aquí, pero no tendrás instalado un editor de unity. Y harías clic en Instalar Editor. Y para este curso, voy a estar usando el tipo de última versión de la unidad que pueda porque probablemente estarás viendo esto en el futuro. Y así 2023 ojalá esté en modo LTS, y así estará bien soportado Entonces lo que puedes hacer aquí es simplemente hacer clic en Instalar junto a la versión que quieras. Estoy en una Mac M one, así que quiero hacer clic en esta versión de Silicon aquí, versión Apple Silicon. Pero si estás usando una Mac Intel, harías clic en esto. Y eventualmente obtendrás una pantalla como esta con la versión instalada del editor de Unity. Pero hay una cosa extra que encontrarás es que al hacer clic en Instalar, obtendrás esta pantalla, la cual te estará pidiendo instales cualquier otro módulo que quieras tener junto con el editor unity instalado. Ahora, no te preocupes si no marcas ninguno de estos porque igual que yo lo hice ahí, puedes volver aquí, haz clic en este Cog Agrega módulos, y puedes agregarlos después de haber realizado la instalación inicial. Y estos módulos son para soportar diferentes compilaciones de tu juego. Entonces, si quieres construir a un teléfono Android, harías clic en el soporte de compilación de Android, así. Si quieres construir un iPhone, entonces harías clic en el soporte IOS Build. Ya he hecho clic en el soporte de WebGL Build porque por lo menos quiero poder construir mi juego para que esté en Así que he hecho clic en WebGL Build support aquí. Ahora, vamos a crear un nuevo proyecto. Entonces, si hacemos clic en esta pestaña de proyecto, podemos crear un nuevo proyecto. Entonces, si hacemos clic en el botón de nuevo proyecto aquí, Lo que se nos ocurre es en realidad todo un montón de plantillas. Ahora bien, no importa tanto si eliges la plantilla equivocada en este punto porque realidad la única diferencia realmente entre todas estas plantillas diferentes es en su mayoría son los diferentes paquetes los que están instalados. Hay algunos pedacitos y piezas, pero en general, es razonablemente fácil moverse entre estas diferentes plantillas, si has empezado con una que no es del todo adecuada para ti. Pero sólo para pasar por esto rápidamente. Bien Estos dos de arriba aquí, dos decoración, tres decoración están usando el tipo de unidad más antigua construida en renderizador Y eso ha sido reemplazada con lo que ellos llaman una canalización de renderizado SRP, scriptable Y los dos principales, dos ductos diferentes son el pipeline de renderizado universal, URP Este pipeline solía llamarse el pipeline de renderizado ligero, y esto es bueno para realmente muchos casos Pero si quieres apuntar al soporte móvil, entonces URP es probablemente el más sensato para elegir T D URP básicamente está muy bien configurado para dos juegos D como plataformas, cosas Tres D URP por supuesto, lo usarías si estás haciendo un juego con tres modelos D en un juego de tres D, incluso como un juego de plataformas 2.5 D. Probablemente usarías tres D URP. Este HDRP es la otra canalización programable. Eso es común, y este es el pipeline de renderizado de alta definición. Esto es realmente si estás enfocado en hacer un juego solo para PC o PC o un juego de consola, es para plataformas de gama alta solo realmente. Entonces URP es definitivamente una opción segura. Y HDRP si no estás apuntando para nada al móvil, solo quieres tener un juego en las consolas, entonces HDRP es probablemente lo que Así que solo para poner todo en marcha y tener un proyecto de prueba para comenzar, voy a elegir la plantilla de canalización de renderizado universal de dos D , y solo voy a llamar a este proyecto de prueba eso. Y luego haces clic en Crear proyecto. Así que ahora consigamos que la unidad funcione felizmente con el código de Visual Studio. Entonces si hacemos clic en Unity y vamos a la configuración, y luego queremos hacer clic en herramientas externas. Y en la parte superior aquí, nos dirá cuál es nuestro editor de scripts externo en este momento, y el mío es Visual Studio para Mac, pero quiero usar código de Visual Studio porque este es un editor realmente agradable que funciona igual tanto en Mac como en Windows. Y así si elegimos código de Visual Studio ahí y luego cerramos eso, entonces podemos muy rápido, podemos hacer click derecho en esta carpeta del proyecto, podemos elegir Crear script C Sharp. Simplemente lo mantendremos nuevo comportamiento. Vamos a hacer doble clic en eso. Y si lo hemos hecho todo correctamente, así abre el código visual studio. Si ves que esta ventana sube por aquí, sí, podemos confiar. Bien. Los autores, sí, y solo voy a marcar esto también para confiar en todos los archivos. Ahora bien, cuando abras este script en Visual Studio Code, código de Visual Studio te avisará y te dirá, ¿quieres instalar este defcate de C Sharp Ahora bien, en realidad tener ese C Sharp defcate es una muy buena idea porque te da mucha ayuda con el lenguaje C Sharp No obstante, si hacemos clic en extensiones aquí, y buscamos unidad, Y hacemos clic en la sugerencia superior y vamos a hacer esto un poco más grande para que veas un poco más claro. Entonces esta es en realidad una extensión suministrada por Microsoft para ayudar con la unidad. Y en realidad dice aquí que va a construir sobre lo que proporciona el kit C sharp dev y las extensiones C sharp. Entonces esto en realidad instalará el devkit C sharp también con solo instalar esto Así que vamos a instalar esta extensión y todo lo demás debería venir con ella. Bien, una vez que esté instalado, en realidad podemos ver qué extensiones instaló esa extensión de unity adicionalmente. Si vamos a esta pestaña de extensión aquí, borra cualquier filtro que hayas puesto aquí y Todo el instalado debería mostrarse en la parte superior aquí, y podemos ver que instaló la herramienta de instalación..net, C sharp, C Sharp déficit en telecde para déficit de C Sharp, y la Así que tenemos mucho instalado ahí por tan solo instalando éste. Y si volvemos a nuestro código, Ahora verás que si aquí arriba, quiero hacer una propiedad, y solo me siento un poco perezoso y solo hago prop así, puedo golpear tabulador y va a llenar una pequeña propiedad agradable para mí ahí. Explicaré qué propiedades son más adelante. Pero apenas empezamos a recibir un poco de ayuda aquí en el editor instalando esa extensión. Nuevamente, si empiezo a escribir instanciate, puedes ver que nos está dando una lista desplegable ahí Muy servicial. Y luego volví a golpear tabulador. Y me dirá que hay bastantes métodos de instanciación diferentes a los que podemos llamar con diferentes parámetros Así que ahora tenemos código de Visual Studio funcionando muy bien con unity. 3. El editor de Unity: Ahora, conozcamos un poco mejor a Unity. Así que abramos Unity Hub, y luego hagamos clic en Nuevo proyecto. Para mantener las cosas simples , ya que recién estamos comenzando, crearemos un proyecto usando la plantilla de dos DURP Y podemos ponerle nombre a esto como queramos. Voy a llamar simplemente a esto tutorial. Y luego haz clic en Crear proyecto. Ahora, una vez que se haya abierto la unidad, te enfrentarás a una pantalla que se ve así. Bien. Ahora puedes cambiar el tamaño de todos estos diferentes paneles Para que puedas personalizar la unidad para se vea exactamente como quieres que se vea. Ahora, si haces clic en este cuadro desplegable aquí, hay muchos tipos diferentes de diseños. El predeterminado aquí es el que verás inicialmente. Y el que en realidad prefiero usar es este dos por tres uno. Y la razón por la que me gusta este diseño en particular es que puedes ver cómo se ve tu juego en tiempo real, lo que realmente no llegas a ver eso con el diseño predeterminado. Tienes que seleccionar la pestaña del juego aquí para ver cómo se ve tu juego, y eso te obliga a seguir cambiando entre las dos pestañas. Y eso no me gusta mucho. Entonces vamos a usar este diseño de dos por tres. Y la única otra cosa que cambiaría con esta disposición en particular es que tiendo a ir a Ventana, consola general, Y luego acola esta consola dando click en aquí y arrastrándola a esta ventana aquí Y es un poco complicado porque quiero arrastrarlo realmente al fondo de esta ventana de aquí. Entonces déjame hacerlo otra vez porque eso no estaba particularmente claro. Entonces, si hago clic en ventana, haga clic en General, haga clic en consola. Y en realidad, si lo muevo aquí arriba, podría ser más fácil. Entonces porque no es muy útil si está flotando por aquí, y puedes especie de expediente al lado de la escena aquí Pero nuevamente, hay que seguir dando click entre los dos para ver qué pasa en la nueva consola. Y la consola en realidad es bastante útil, sobre todo cuando empiezas a escribir scripts porque cualquier error se mostrará aquí, como, por alguna razón, tengo este extraño error de asignación aquí. Realmente no significa nada para mí. Parece una especie de extraño error de unidad. En realidad no debería estar pasando. Pero lo que puedes hacer es simplemente hacer clic claro y no es quedarse ahí, así que en realidad no es un problema. Y podemos agarrar esta consola y ponerla aquí abajo. Y así soltaremos el botón izquierdo del ratón cuando esté en su lugar y tengamos nuestro layout. Y si queremos guardar este diseño, solo podemos hacer clic en Guardar diseño y luego darle un nombre. Y yo sólo voy a llamar a esto. Morgan, haz clic en Guardar, y luego puedo cambiar rápidamente entre, digamos, el diseño predeterminado y Morgan, agradable y fácil. Entonces creo que la mejor manera de aprender la unidad es crear realmente un juego. Entonces vamos a crear un juego muy sencillo, y vamos a aprender la unidad a medida que avanzamos. Probablemente el mejor lugar para comenzar es en el panel de proyectos. Entonces aquí está nuestro panel de proyectos. Y el panel de proyecto es solo una vista en una carpeta en tu computadora. Y podemos probar esto si hago clic en la carpeta de activos aquí y hago revelador Finder o en una máquina con Windows, probablemente diría revelando el Explorador de Windows. Podemos dar click en eso y podemos ver que en realidad abre una carpeta. Y podemos hacer doble clic en esta carpeta de activos. Y como pueden ver, esta vista aquí es muy similar a lo que realmente hay en nuestro disco. Es sólo una especie de versión más amigable de lo que hay en nuestro disco Entonces podemos hacer cosas obvias como si queremos mantenernos bien organizados, deberíamos crear una carpeta donde pongamos todas nuestras cosas en. Entonces voy a hacer clic derecho y luego elegir Crear carpeta. Y voy a llamar a esta carpeta tutorial. Y si hacemos clic derecho sobre la carpeta tutorial, puedo crear otra carpeta. Y voy a llamar a esto escenas. Y tal vez vamos a crear otra carpeta, y voy a llamar a esto guiones. Bien. Ahora podemos ver que estamos muy bien organizados aquí con nuestro proyecto. Lo primero que realmente quieres hacer es entrar en nuestra carpeta de escenas. Podemos hacer clic derecho y podemos hacer crear escena. Podemos llamar a esto algo sencillo como escena principal. Debido a que este juego es un juego sencillo, sólo va a tener una escena. Y si hago doble clic en esa escena principal, entonces vemos que esa escena principal se ha abierto en la ventana jerárquica. Ahora, nuestra ventana jerárquica es una visión de lo que hay en nuestra escena. Generalmente, nuestra escena consistirá en cosas como cámaras y objetos de juego, y nos adentraremos en más de ella a medida que avanzamos. Pero lo único que realmente está en nuestra escena en este momento es una cámara. Lo que puedes hacer es hacer clic en esa cámara, y puedes ver que en nuestro panel inspector, podemos ver muchas y muchas cosas sobre esta cámara y puede parecer un poco aterradora, pero en realidad no necesitamos saber demasiado sobre esto en este momento. Descubriremos más a medida que avancemos. Ahora, se puede ver que al lado de la escena principal, hay un astérix Y eso solo significa que por el momento esta escena tiene algunos cambios en, pero no se ha salvado. Entonces si alguna vez ves eso, si no quieres perder nada, si la computadora falla o lo que sea, entonces podrías perder algunos cambios si ahí hay un asteryx Entonces quieres hacer Command S o archivo y guardar y guardar esa escena. Ahora, como mencioné, esta ventana de aquí es como una vista de lo que podemos ver en nuestro juego, y como pueden ver, es bastante aburrida por el momento, no podemos ver nada. Así que vamos a conseguir algo interesante en nuestra vista de juego. Para que podamos empezar a ver cómo pondríamos un juego juntos. Entonces si hago clic derecho aquí, y hago dos objeto D, sprites, cuadrado, Y podemos renombrar nuestro cuadrado si queremos Y voy a llamar a este uso de la palabra. No se parece mucho a un piso en este momento, pero lo resolveremos en un minuto. Se puede ver que tenemos esta plaza en medio de nuestra ventana de juego. Ahora bien, si queremos poner este cuadrado hasta el fondo, que sea más como en el piso, entonces lo que realmente podemos hacer es Si pasamos el cursor sobre nuestra escena, golpeamos el Wk, en realidad podemos ver aparecer este Gizmo, lo que nos permite mover Y así podemos pasar el cursor sobre esta flecha verde, y eso solo nos permite mover este cuadrado alrededor del eje y Y siempre puedes si lo has movido y quieres deshacer eso, simplemente puedes hacer comando o control D en una máquina windows, y eso realmente deshará ese movimiento. Y luego di si pasas el cursor sobre la flecha roja, puedes mover este cuadrado sobre el eje x Ahora bien, si observas, puedes ver que mientras estoy moviendo este cuadrado en el eje x, puedes ver que en nuestro inspector, si miras hacia arriba a la parte superior derecha de la pantalla, puedes ver que nuestra posición x está cambiando a medida que estoy moviendo este cuadrado por la pantalla Entonces por el momento, si lo muevo, puedo llegar a diez, 10.1, si lo muevo hacia abajo de esta manera menos diez. 0.54 en este momento. Si no quieres moverlo directamente en la vista de escena aquí, realidad puedes moverlo en el inspector. Entonces, si vamos al inspector, podemos pasar el cursor sobre nuestra x. Esta era la que estaba diciendo que estaba cambiando, y en realidad puedes pasar el cursor sobre la x, así puedes ver una flecha yendo en ambos sentidos Haz clic izquierdo en mantener y arrastrar, y podrás ver que también puedes moverlo de esa manera. Por supuesto, puedes pasar el cursor sobre y y moverlo hacia arriba y hacia abajo. Si quieres moverlo en ambos ejes, simultáneamente, puedes pasar el cursor sobre este cuadrado azul aquí, hacer clic izquierdo, y luego puedes arrastrar este cuadrado a donde quieras, realmente Nuevamente, si eres observador, puedes ver que aquí está este rectángulo Y esta es en realidad el área visible del juego. Esto es lo que esta cámara puede ver. Y para demostrarlo, lo que podemos hacer es hacer clic en la cámara y podemos cambiar el tamaño de este rectángulo. Entonces, si vuelvo sobre este tamaño, de nuevo, me salen estas dos flechas, izquierda y derecha Puedo hacer clic y mantener presionado, y puedo cambiar el tamaño. Como pueden ver, si lo hago para que la plaza sólo esté tocando el costado de esa plaza. Se puede ver en esta ventana aquí, eso es exactamente imitando lo que puede ver la cámara Y lo que realmente podemos hacer es aumentar el tamaño masivamente y esencialmente ese cuadrado se hará cada vez más pequeño y más pequeño porque nuestra cámara es muy grande, nuestra área de visualización de nuestra cámara es masiva ahora, y así nuestros cuadrados muy pequeños en comparación Ahora, llamé a este piso, y eso es porque quiero que sea un piso en nuestro juego. Así que vamos a mover esto hacia abajo aquí, así. Y luego lo quiero en el medio. Así que podría intentar conseguirlo en el medio así, pero es un poco complicado hacerlo bien en el medio. Pero si lo queremos justo en el medio, es cuando x es cero. Porque en realidad justo en el medio de nuestra cámara es x es igual a cero, y es igual a cero porque nuestra cámara también está en esa posición. Entonces tiene sentido que poner algo en el medio de la cámara es donde se coloca la cámara al centro de la cámara. Pero volvamos a bajar esto otra vez, así que lo movemos aquí abajo. Y entonces queremos que este sea un piso que cubra todo el fondo aquí. Ahora bien, ¿cómo lo hacemos? Bueno, queremos escalar en nuestra x. Entonces, si pasamos el cursor sobre x y lo arrastramos hacia arriba, podemos hacer de este un piso de selección de hielo así Y ahora tenemos un piso en la parte inferior de nuestra pantalla. Entonces sería un poco genial tener una pelota que cae al suelo como que cae al suelo. Entonces hagámoslo a continuación. 4. Tu primer script: Ahora bien, ¿qué es lo que realmente quiero hacer? Bueno, inicialmente, solo para probar las cosas. Cuando golpeo play, quiero que la pared se mueva en alguna dirección inicialmente. Entonces lo que podemos hacer es que podemos subir aquí, presionar Enter y simplemente escribir conmigo. Serializar campo. Eso está entre corchetes, y luego voy a escribir vector privado dos, y voy a subrayar la velocidad inicial punto y coma. Entonces voy a hacer campo serializado otra vez, privado voy a decir rígido dos D. Asegurarme de que sea cuerpo rígido dos D. No solo cuerpo rígido, y luego voy a hacer por dos D. Luego bajé para comenzar y voy a hacer cuerpo rígido dos D la velocidad es igual a subrayar la velocidad inicial Ahora, voy a salvar eso. Voy a dar click de nuevo a mi editor de unidad. Y voy a echar un vistazo a mi consola para asegurarme de que no tengo ningún rojo en esta consola. Y si haces clic en claro y no hay rojo, entonces no he cometido ningún error en mi guión. Pero por ejemplo, si vuelvo a mi guión y escribí mal el cuerpo de Ridge dos D, tal vez usé una minúscula aquí, y luego Y volví aquí. En realidad me mostraría un signo de exclamación rojo. Yo daría click en él, y diría algo a lo largo de las líneas del nombre cuerpo rígido dos D no existe en el contexto actual. Y luego volvería a mi código y me iba, Oh, tonta de mí. Usé una D minúscula, y de hecho nombré a mi cuerpo rígido dos variables D, sin embargo mayúscula D. Guarde eso otra vez, y es feliz. Ahora bien, si le pego a play ahora, no pasaría nada, en realidad, permítanme darle solo a play. Y como pueden ver, no hay errores ni nada, y no pasa nada. Ahora bien, eso es porque todavía no hemos puesto este guión en nuestra escena. Y si hacemos clic en nuestra bola, y nos desplazamos hacia abajo. Lo que realmente podemos hacer de la manera más sencilla de poner nuestro guión en nuestra bola es simplemente arrastrarlo y soltarlo en nuestra pelota. Así que vamos a hacer eso, arrastrar y soltar eso aquí abajo. Lo arrastraremos aquí abajo para agregar componente, y lo conseguirás ahí. Otra forma en la que puedes hacerlo es déjame simplemente quitar ese componente de eliminación. Puedes hacer agregar componente, y solo puedes comenzar a escribir bola y verás tu guión aquí y puedes simplemente hacer clic en él, y esa es otra manera fácil de agregarlo. Ahora bien, si mantengo la velocidad inicial a cero, a cero, no vamos a ver que pase nada. Entonces hagamos esto algo así como diez y diez Y entonces realmente ves este cuerpo rígido dos D aquí, y muy similar a como arrastramos y dejamos caer nuestro material de recompensas en material De hecho, podemos arrastrar y soltar nuestra bola sobre el cuerpo rígido dos D. Y eso en realidad es asignar el cuerpo rígido dos de componente que está en nuestra bola en esta variable aquí Así que en realidad está asignando este componente aquí a esta variable aquí Lo que significa que en nuestro guión, podemos establecer cualquier cosa que esté en este componente. Y una de estas cosas que está en este componente, no se puede ver aquí, pero está en ese componente es la velocidad. Entonces, si golpeamos play, en realidad puedo ver que nuestra pelota golpea las paredes y empieza a rebotar porque le dimos una velocidad inicial. Vamos a intentarlo de nuevo. Bien, eso no se ve muy emocionante. Así que juguemos con nuestro material hinchable para que rebote en las paredes, un poco mejor Entonces probemos una fricción de cero y una rebote de uno. Ahí vas. Eso está rebotando mucho en las paredes ahora 5. Escenas y GameObjects: Bien, las cosas se están poniendo interesantes. Por eso me vuelvo a poner el sombrero porque las cosas se están poniendo serias. Aquí tenemos una pelota volando alrededor de nuestro juego. Y creo que tenemos que explicar un poco lo que está pasando y lo que acabamos de hacer. Así que vamos a sumergirnos. Entonces creamos una escena. Lo nombramos escena principal. Llegó con una cámara. Agregamos una bola. Agregamos un techo de piso, pared izquierda, pared derecha, y creamos un nivel en el que pusimos todos estos solo para hacer las cosas un poco ordenadas. Y realmente no explicamos qué es todo eso. Y hagámoslo ahora. Bien, comencemos con lo básico. Qué es una escena. Ahora, tenemos una escena aquí. Lo hemos llamado escena principal. Y esencialmente una escena es una colección de objetos de juego. Entonces todo dentro de una escena es un objeto de juego. La cámara principal es un objeto de juego. Esta pelota es un objeto de juego. Este nivel es un objeto de juego. Pisos un objeto de juego, etcétera, etcétera. Entonces estos objetos de juego, aunque todos son objetos de juego, lo que los hace diferentes entre sí son los componentes que se mantienen dentro de estos objetos de juego. Así que la mayoría de los objetos de juego que ves dentro de todos los objetos de juego en realidad que has visto sideocne tendrán Y eso es porque en una escena, el objeto del juego tiene que ser colocado en alguna parte. Entonces la transformación lo pone en una posición. También le da al objeto del juego una rotación y una escala. Entonces la transformación es el componente más básico que realmente puedes tener en un objeto de juego. Lo que hace especial a esta cámara principal es que tiene un componente de cámara en ella. Y así este componente hace de este objeto de juego una cámara. Y luego tiene un oyente de audio ahí y tiene este guión de cámara adicional universal aquí también Pero lo principal que hace que este objeto de juego de cámara principal especial es este componente de cámara. Si echamos un vistazo a la pelota. Nuevamente, tiene un componente de transformación en él, pero tiene este componente de renderer de sprites en él Y si minimizamos eso, si recuerdas, agregamos un cuerpo rígido dos D, y agregamos un colisionador circular dos D, y agregamos este guión de bola Pero el componente del renderer de sprites esencialmente significa que esta bola es un Entonces ese es nuestro propósito principal de este objeto de juego es que esté mostrando un sprite visible que podamos ver Ahora bien, este objeto de juego de nivel es un objeto de juego muy básico. Solo tiene este componente de transformación en él porque solo estamos usando como contenedor, casi como una carpeta donde sostenemos otros objetos del juego solo para mantener las cosas ordenadas. Ahora bien, ¿qué es una escena? Bueno, dije que una escena es una colección de objetos de juego. Eso es cierto. Y realmente una escena es una forma de organizar tu juego. Por lo que un juego simple solo puede tener una escena. De hecho, puedes salirte con tuya creando un juego que solo tenga una sola escena y puedas mostrar y ocultar elementos del menú y para este juego en y puedas mostrar y ocultar particular, solo tendremos una escena, y eso está absolutamente bien. Pero para juegos más complejos, es posible que desee una escena para el menú principal, otra escena para el primer nivel del juego, otra escena para el segundo nivel del juego, otra escena para el juego sobre pantalla. Y así es posible que quieras dividir el juego de esa manera en particular. En realidad también puedes apilar escenas. Así podrás tener dos o tres, cuatro escenas abiertas al mismo tiempo, una encima de la otra, y esa es una forma muy viable de separar tu interfaz de usuario de tu juego principal. Entonces es posible que tengas una escena de interfaz de usuario que esté abierta durante todo el tiempo de tu juego, y es la superposición que ves encima de todos tus niveles, etcétera Y así esa es otra forma de armar un juego. Pero para este juego en particular, lo mantendremos agradable y sencillo. Tendremos una escena. No cargaremos ninguna otra escena ni nada por el estilo, y eso mantendrá las cosas bonitas y simples para este tutorial en particular. 6. Variables: Bien. Entonces ahora hablemos un poco de nuestro guión porque nuestra pelota realmente no hizo nada demasiado interesante. Teníamos gravedad que la hacía caer y rebotar un poco. Pero cuando en realidad queríamos enviarlo en una dirección particular y que rebotara alrededor de la pantalla, en realidad agregamos un guión Y echemos un vistazo a ese guión ahora. Entonces lo que puedes hacer es hacer clic en la pelota y luego expandirla haciendo clic en esta flecha aquí, el guión de la bola, y luego déjame hacer doble clic aquí. Eso realmente abrirá el script en el código de Visual Studio. Entonces, ¿qué está haciendo este guión? Bueno, queremos controlar el balón. Así podemos controlar la pelota a través de su cuerpo rígido dos D, y tenemos este cuerpo rígido dos D en esta bola. Y si recuerdas, podríamos controlar el balón teniendo una escala de gravedad de uno. Pero en realidad puedes establecer la velocidad de este cuerpo rígido dos D en un guión, y eso es muy útil para que la pelota se mueva en una dirección particular a una velocidad particular. Entonces cualquiera que haya hecho alguna física sabe que puedes especificar una velocidad o algo usando un vector. Y porque estamos haciendo un juego de dos D, solo necesitamos un vector bidimensional. Entonces un vector es que solo puedes pensarlo como un titular para dos números. Entonces, al crear esta línea aquí significa que esta velocidad inicial está disponible en nuestro editor, y la podemos ver aquí. Entonces esta velocidad inicial se ve un poco diferente. Pero en realidad, aquí está Esta línea aquí. Y para probarlo. Entonces por el momento, dice velocidad inicial. Pero si solo digo algo como mínimo, velocidad inicial. Así que esa velocidad inicial mínima, y vamos a cambiar eso ahí así. Si vuelvo aquí, Unity, lo pensarás por un segundo, y luego cambiará eso a velocidad inicial mínima. Así que se tomó eso y lo ha convertido en algo que es un poco más legible humanamente. Velocidad inicial mínima. Pero es exactamente esto aquí. Bien, entonces esto es en realidad lo que se llama una variable. Y esta variable aquí es como queremos cambiar realmente la velocidad de nuestra bola. Y así queremos poder concretarlo nosotros mismos en el editor. Y entonces esto es lo que está haciendo esta línea. Ahora bien, si acabamos de eliminar este campo serializado y acabamos de hacer de esto una variable privada así Si volvemos aquí, Como pueden ver, no podemos ver esto en el editor. Y así no podemos especificar la velocidad de nuestra velocidad inicial de nuestra bola. Y así si golpeamos play ahora, Nuestra pelota simplemente se sentaría tristemente ahí sin hacer nada. Ahora, por supuesto, podemos establecer esto en código, y eso es razonablemente fácil de hacer. Entonces si solo vengo aquí y hago algo como Vector dos, e hice diez diez, así. Entonces estoy especificando que esta variable comienza con un valor de x es igual a diez, y es igual a diez. Entonces si vuelvo aquí, y golpeo play. Entonces como pueden ver, nuestra pelota rebota alrededor. Pero es un poco doloroso cada vez que quiero ajustar la velocidad inicial de esta pelota Tengo que entrar aquí e irme, es un poco demasiado lento, así que cambio esto para decir 15 15, ahorro, vuelve aquí. Unity lo piensa un poco. Y luego volví a pulsar play. Y la pelota es un poco más rápida, pero a lo mejor creo que es demasiado rápido, vengo aquí, vuelvo aquí, la cambio, ya sabes, eso es un poco doloroso. Así que la unidad hace que sea agradable y fácil para nosotros exponer esta variable en el editor para que podamos cambiarla. Y la forma más sencilla de hacerlo es hacer campo serializado entre corchetes como este frente a privado, y entonces eso le dirá unidad para mostrar esto en el editor Entonces ahora si vuelvo aquí, ahora puedo cambiar estos valores aquí, 12 12 y es solo un poco más rápido para mí cambiar estos valores así. 7. Formación básica terminada: Enhorabuena. Hemos cubierto los fundamentos de unidad y ahora estás listo para quedarte atrapado en un proyecto real. 8. Laberinto: Bien, comencemos este increíble proyecto. Vamos a dar click en Nuevo Proyecto, y voy a elegir dos DURP como mi plantilla Y puedes elegir tu ubicación, y yo solo voy a guardarlo por defecto aquí, que está en una carpeta llamada Morgan Page courses y voy a llamar a este Laberinto luego haz clic en Crear Proyecto. Bien. Una vez que ese proyecto esté abierto, voy a cambiar mi diseño a Morgan, que es esencialmente de dos tres con una consola aquí abajo. Y luego en assets, voy a hacer click derecho y elegir Crear carpeta y voy a llamar a esto Mae. Y luego dentro de Mae, voy a crear una carpeta para mis texturas. Y luego otra carpeta para mis guiones, y eso probablemente servirá por el momento. Bien, voy a arrastrar mi juego de mosaicos Maze desde mi escritorio a esta carpeta Texturas. Ahora, si hago clic en este conjunto de mosaicos M PNG, puedo abrirlo con mi editor de sprites Y voy a rebanar esto, haga clic en rebanar y cuadrícula por tamaño de celda debería ser dos, cinco, seis por dos, cinco, seis. Mantener vacío s. esto es un poco útil esto mantener rets vacíos porque Si alguna vez quieres agregar a esta baldosa, agrega otras fichas y cosas, entonces en realidad si básicamente puedes llenar estos restos vacíos más adelante Básicamente están vacíos en este momento, pero es posible que quieras llenarles las cosas. Entonces tiendo a mantener esta marcada. Bien, entonces ahora tenemos un juego de baldosas de laberinto muy básico, pero es bastante sorprendente lo mucho que puedes hacer con solo un pequeño juego de azulejos como este. Así que asegúrate de hacer clic en Aplicar y cerrar. Voy a crear otra carpeta aquí y voy a llamar a esto escenas y voy a crear una escena completamente nueva en esta carpeta, crear escena. Sólo voy a llamar a esta escena principal. Y luego hagamos doble clic sobre eso. No se molestó con esa escena. Fresco. Tenemos nuestra propia escena, igual que una cámara en, cosas bastante estándar. Bien. Ahora, queremos dibujar nuestro laberinto. Entonces la forma más fácil hacerlo es si hacemos clic derecho en aquí, podemos ir a dos D mapa de teselas de objetos rectangulares. Y ahora tenemos un mapa de teselas al que podemos dibujar. Pero, ¿cómo dibujamos a este mapa de teselas? Bueno, necesitamos crear una paleta. De nuevo, vamos a crear una carpeta para una paleta podría también. Manteniendo súper organizado en este momento, y luego podemos hacer clic derecho en crear dos D Tile Palette, nuevamente, rectangular. Y voy a llamar a esto Maze porque esta será nuestra paleta Maze. Entonces si llegamos a ventana, dos D, podemos dar click en paleta de azulejos aquí. Acopemos esto aquí así, y tenemos nuestro laberinto pálido ya creado ahí dentro. La otra forma de hacerlo es que puedes subir este panel de paleta de teselas y luego puedes crear la paleta directamente aquí así. Esa es otra forma de hacerlo. Bien, entonces queremos arrastrar, conjunto de azulejos laberinto hasta aquí. Voy a arrastrar y soltar, y luego necesito crear una carpeta para mis mosaicos. Si hago clic aquí, ponlo bajo texturas y crea una nueva carpeta. Y sólo voy a llamar a este laberinto azulejos. Entonces sé lo que son todos estos azulejos. Y elige, y eso desaparecerá y creará un montón de azulejos. Pero lo de la llamada ahora es que podamos hacer click aquí y podamos empezar a dibujar cosas. Pero eso se ve terrible. Y la razón por la que se ve terrible es que no hemos establecido correctamente el tamaño del azulejo establecido. Voy a establecer nuestros píxeles por unidad a 256256. Y haz clic en Aplicar aquí, y eso ya se ve mejor. Haga clic en Mapa de azulejos, haga clic en Paleta de azulejos, y podemos dibujar. Bastante genial, ¿eh? Trabajemos a nuestra manera. Desde el centro hacia afuera y dibujaremos un lado del laberinto y luego esencialmente lo reflejaremos Creo que esa es probablemente la mejor manera de hacerlo. Entonces comencemos con el centro. Entonces, si puedo averiguar dónde está el centro, creo que está ahí. Así que abajo así. Dibuja eso así. Ahora, puedes dibujar tu propio laberinto. No tienes que copiar mi laberinto. Pero tengo uno al que estoy haciendo trampa y copiando, como me pueden ver mirando a la izquierda, tratando de averiguar cómo lo hice. Entonces sí. Bien. Entonces, lo que estoy haciendo aquí es que solo estoy usando el pincel estándar aquí en la paleta de azulejos. Entonces, si alguna vez te gusta Si no está dibujando por alguna razón, es probable que no hayas seleccionado esto, y entonces realmente tienes que seleccionar el azulejo con el que quieres pintar. Y en realidad, puedes elegir múltiples de estas cosas de clic clic y arrastrar, y luego eso se convierte en lo que estás pintando con Es bastante poderoso. Es bastante genial. La mejor manera de hacerlo, creo que es seleccionar esos, y luego Sí, por ahí, creo. Entonces escojamos ese perno que sobre ahí así. Y luego lo genial de esto. Ahora he creado este objeto aquí. Puedo usar eso para dibujar con, lo cual es amable y genial. Entonces déjame mostrarte cómo hacer eso. Así que puedes hacer clic en esta Marquesina seleccionar pincel nuevo, y en realidad puedes seleccionarlo desde aquí. Eso es amable y genial. Entonces puedo hacer eso. Y alejar un poco esta cámara, para que podamos ver un poco lo que estamos haciendo. Entonces probablemente va a haber suficiente Y ya no quiero dibujar con esto. Entonces, ¿con qué quiero dibujar? Yo quiero dibujar con eso. Así que quiero mantener siempre un cuadrado un ancho de baldosa para que los monstruos y esas cosas pasen. Entonces sí, eso se ve bien. Ahora bien, lo que puedes hacer porque es un poco complicado trazar una línea como esta porque puedes deambular a un lado así Entonces puedes elegir esta, que es que llenaremos toda una zona así, que no es lo que quiero hacer, pero en realidad también es buena para dibujar líneas. Así que eso funciona bastante bien. Todavía no sé cuánto tiempo quiero eso. Pero ahí tienes. Eso funciona. Y entonces tienes una goma de borrar aquí porque no quiero esa parte al final Bien. Ahora, déjame hacer mi selección de marquesina otra vez Solo quiero seleccionar la parte inferior de esto o tal vez la parte superior. Yo haré el fondo. Voy a tratar de solucionarlo. Creo que eso quiere ir ahí. Y después quiero seleccionar la parte superior de eso. Y eso puede ir ahí así. Entonces eso se ve bastante bien. Déjame volver a hacer mi herramienta de marquesina y pintar ahí. Ahora, creo que empecé un poco bajo, lo que puedo hacer mover selección con pincel activo. Entonces creo que lo que puedo hacer es seleccionar todo eso. Bien. ¿Eso funcionará? Sí. Ahí vas. Puedo moverlo hacia arriba. Que necesito hacer zoológicos mi cámara un poco más. De hecho creo que esta parte de aquí es subir una. Déjame hacer eso. Así que de nuevo, sólo tienes que seleccionar estos movimientos. Eso es bueno. Sí, no creo que quiera ir más allá. Creo que está bien. Ahora, quiero sacar un poco el muro aquí, así que hagámoslo. Bien. Entonces quiero este de aquí. Quiero dibujar ahí así. Y entonces haz eso dibujar eso. Entonces planteo eso. Quiero copiar esto aquí abajo, así que volvamos a hacer mi pequeña selección de Marquee Voy a poner uno aquí abajo y hacer otro. Aquí, así. Creo que estos realmente quieren estar favoreciendo. Quiere estar así”. s eliminar esto. Entonces creo que esencialmente quiero esto de ahí, creo. Yo solo quiero borrar quiero ir ahí así. Pero claro, eso está mal ahora. Entonces queremos arreglarlo. Entonces eso es complicado de arreglar con este juego de mosaicos porque borramos eso. Entonces necesitamos otra capa aquí para poder arreglar eso. Eso lo haremos en un segundo. Acabemos con lo que estamos haciendo. Reposicionar el un poco por el momento. Sí. Bien. Bien, así que eso se ve bastante bien. Tenemos algunos huecos, y así podemos arreglar los huecos, primer lugar, agreguemos algunos pisos. Así que haga clic derecho sobre la cuadrícula de dos objetos D, mapa de teselas, rectangular. Vamos a bajar esto a aquí, y solo voy a llamar a esto porque eso es todo lo que va a ser. Si hacemos este un pedido de inlayer y luego el piso es cero, entonces significa que el piso estará debajo Las paredes. Entonces lo que podemos hacer ahora es seleccionar placa de azulejo. Asegúrate de que dice piso aquí. A veces puedes meterte un poco en un fregadero, si lo hace, entonces realmente puedes elegirlo aquí, a qué capa estás pintando. Entonces queremos elegir esta, llenar caja, y podemos dibujar en nuestro piso así. inmediato, luciendo mejor ahora. Ese es nuestro piso. Pero sí queremos algunos agujeros. Queremos unos agujeros ahí y allá y allá porque lo que vamos a hacer es hacer que este fondo negro y vamos a hacer eso ahora para que podamos ver cómo será eso. Da click en la cámara, baja al ambiente, tipo de fondo, color sólido. Hagámoslo tono negro así. Otra vez, ya luciendo un poco mejor, en realidad queremos desmayar esta parte ahora. De hecho es bueno que cambiemos eso, lo hace obvio. Otros bits que queremos hacer paleta de azulejos negros, asegúrate de que estamos pintando en un piso y levantemos eso. Entonces sí tenemos algunas brechas. Tenemos algunos agujeros aquí, aquí, aquí y aquí, cuales necesitaremos otra capa solo para rellenar esto porque es un conjunto de azulejos tan básico que necesitamos emplear algunos pequeños trucos para llenar esos agujeros. Entonces hagámoslo ahora. Así rejilla, clic derecho, dos objeto D, azulejo rectangular, y voy a llamar a esto muros. Voy a llamar a esto fue extra. Y asegurémonos de que nuestras paredes extra estén encima de nuestras paredes. Así que las paredes son una. Entonces, si hacemos dos aquí, entonces eso asegura que las paredes estén en la parte superior. Los extras de las paredes estarán encima de las paredes. Y veamos. Intentemos llenar este vacío. Entonces, ¿cómo lo hacemos entonces? Entonces eso es esto, creo. Ahí vas. Eso va a hacer. Entonces llenaste un pequeño agujero ahí. Aquí tenemos esto. Bueno, eso se ve así. Yo lo haré. Y entonces tenemos un agujero aquí, lo cual voy a hacer. Esta de aquí otra vez es ésta. Y ese hay uno complicado porque en realidad no tenemos ese. Para que podamos darle la vuelta a éste porque lo queremos ahí. Entonces, lo más fácil es darle la vuelta a este. Nosotros, podríamos rotar el otro, pero creo que voltear podría ser mejor Para que puedas voltear el pincel actual con este artilugio aquí. Vamos a darle click y a ver, lo volteamos. Entonces eso se ve bien. Y entonces qué tenemos aquí? ese, creo que Pits ¿no? No, no lo hace. Está arriba a la derecha. Sí. Entonces es éste volteado Entonces quiero hacer eso. Ahí vas. Fresco. Entonces tenemos medio nivel. Um Si. En realidad, nos estamos perdiendo esto aquí. Eso es solo ¿eso es lo que es eso? Ese es ese, creo. Ahí vas. Bonito. Comando para guardar. Y, aún falta uno. ¿Qué es esto? Esto es abajo a la derecha, que es. Ahí vas. Fresco. Creo que estamos bien. Sí, creo que estamos bien. Así que guarda eso. Y queremos seleccionar todo eso y reflejarlo. Entonces veamos cómo vamos a hacer eso, para que podamos hacer una selección de Marquee Seleccionemos los muros. A eso, que es entonces patear con todo eso. Pero claro que no queremos hacer eso porque eso va a ser basura Pero aquí podemos usar esta herramienta, que volteará todo el asunto, y luego estamos bien. Creo que ahí vas. Haga clic. Hecho en eso, tenemos que hacer nuestros pisos. Entonces, pues vamos a deshacernos de eso. Podemos simplemente pintar nuestro piso porque son todos los mismos azulejos. Así que solo haz clic en éste, en realidad. Haga clic en eso. Y estamos pintando en nuestro piso porque es todo el mismo azulejo. Es todo eso de ahí. Entonces eso es bueno, y entonces no queremos hacer nuestros pequeños extras. Puedo hacerlas todas singularmente. Pero soy perezoso. Entonces voy a hacer Marquee select. Ese tirón de arrendamiento. Vuelve aquí y mira si, ahí tienes. Eso se enlinea. Haga clic. Haga clic, y luego acabamos de tener algún piso ahí que necesitamos eliminar. Ahí vas. Um. Bien. Y y y tal vez hubiera sido mejor que Markie la seleccionara. Bien, creo que se ve bastante genial. Así que descansemos ahí. Bien. 9. Laberinto Navmesh: Ahora, para que nuestros enemigos puedan encontrar su camino alrededor de este laberinto, vamos a usar lo que se llama una malla Nav. La mejor manera de entender una malla Nav es simplemente usarla. Entonces, si Google Nav mesh más este H eight man Nav mesh más GitHub repo debería estar en ese listado en alguna parte, o simplemente dejaré caer un enlace en las notas Pero si te desplazas hasta el fondo aquí, sí te dice cómo agregar este NavMesh plus a un proyecto de unidad El método tres es en realidad el mejor método. Entonces queremos copiarlo y queremos instalarlo a través del gestor de paquetes. Entonces, si volvemos a nuestro proyecto de unidad, vamos a Window and Package Manager, y hacemos clic en este desplegable junto al plus, y queremos instalar el paquete desde una URL G. Entonces podemos pegar en esa URL GT y darle click a instalar. Una vez que esté instalado, podemos cerrar nuestro gestor de paquetes. Una vez Unity deja de pensar en las cosas, programa muy filosófico. Unidad, le gusta pensar mucho en las cosas. Bien, cerremos eso Y solo para asegurarnos de que no tenemos ningún rojo en la consola después de hacer clic en borrar y nuestro paquete NavMesh está listo para ser usado Entonces lo que queremos hacer es, bueno, en realidad podemos expandir nuestros paquetes e ir a NavMesh plus Da click en la M de lectura, y solo podemos seguir las instrucciones aquí. Usando tu proyecto, creando objeto en la ruta de escena Agrega servicio de navegación, superficie y este NavM hagámoslo Entonces haz clic derecho, crea vacío, vamos a asegurarnos, está en la ruta. Vamos a llamar a esto malla de Na. Vamos a restablecerlo solo para estar en el lado seguro. Y luego quisimos agregar superficie de navegación, creo que lo fue. Sí. Eso se ve bien. Y luego Navegación recoge fuentes a D. Sí, eso parece correcto, también. Y luego está diciendo que la superficie de Nav no se gira respectivamente a d d. Así queremos hacer clic en esta superficie de rotación a x y para que eso desaparezca, y verás que está girada x -90, solo parece que necesita eso para hacer lo suyo Entonces esa es una pequeña malla de Nav feliz ahora. En realidad podemos hacer clic en hornear y no va a hacer nada, pero tampoco se queja de nada, así que está tratando de hacer algo Bien, solo vamos a guardar eso. Ahora lo que queremos hacer es si ampliamos nuestra grilla. Ahora, voy a agregar colisionadores separados a nuestra red. Podríamos usar las paredes aquí, pero creo que es un poco más limpio y más fácil agregar nuestros propios colisionadores en un mapa de azulejos separado Así que vamos a añadir dos objeto D. Agreguemos otro mapa de teselas. Rectangular, obviamente, vamos a llamar a esto colisionadores porque eso es lo que es Y esto será útil para hornear la malla Nav y también para evitar que nuestro jugador se tope con las cosas Lo que podemos hacer es que queremos añadir a este inicio tecleando colisionar Y queremos que el mapa de teselas colisionen dos D aquí. Y no queremos renderizar este mapa de teselas. Esto es puramente por colisión. Entonces voy a apagar el renderer de mapas de teselas. Entonces voy a ir a Tile Palette, voy a usar este bloque aquí porque es una pared. Puedo usar cualquiera de estos en realidad. Bueno, en realidad quieres uno que esté llenando toda la plaza, así que el colisionador es correcto porque déjame simplemente hacer esto Si solo me aseguro en la superficie del colisionador. Entonces, si solo hago eso, se puede ver que ahí se pone un colisionador verde Si usé ese y puedo ver que ahí pone medio colisionador Entonces hace que el choque sea la forma del sprite. Pero por el momento, solo voy a tener los colisionadores como fichas de tamaño completo Y vamos a probar esto. Entonces si hago eso y vengo aquí y hago hornear. Eso todavía no funciona porque necesito agregar un mapa de mosaico modificador de navegación. Ahí vas. Podría intentarlo de nuevo, Y eso es algo que funciona, pero no realmente porque quiero que esta sea área de anulación. No es transitable, no es transitable, dibujando colisionadores. Entonces veamos si ese aspecto un poco era más sensato ahora. Amable Empecemos a dibujar algunas cosas más y veamos qué pasa. Entonces, si vengo a esta paleta de azulejos, y dibujemos nuestras paredes así. Así y así. Veamos qué hace ahora el horneado. Así que eso es genial. Así que tenemos una zona transitable aparte de ahí. Pero debería poder mandar al enemigo por ahí. Pero no puede pasar por ahí. Entonces creo que vamos a tener que usar los colisiones de tamaño adecuado para que esto funcione Entonces estos son correctos y estos son correctos, pero vamos a dibujar en el tamaño adecuado choca aquí Entonces queremos que miremos. A ver si ya puedes pasar por ahí. Pero vamos a dibujar este también. Ese. Ese. Esa así. Bien, veamos como eso es más feliz Y eso es más feliz. Pero todavía está un poco constreñido pasando por ahí. Así que vamos Bien. Dibuja eso así, y podemos usar eso. Pero no los queremos así. Vamos a tener que darle la vuelta a éste. Hagámoslo, voltearlo así. Entonces ahí vas. Eso probablemente va a ser más feliz. Vamos a Marquee seleccionar y copiar algo de esto Bien. Y me pregunto si debería ser así. Sí, hagamos eso antes de darle la vuelta a ese, uno , y queremos esencialmente ese pero volteado Ahí vas. Y ese volteó Bake Sí, eso se ve bastante bien. Bien. Así que vamos a seleccionar la tecla. Pat haga esa de ahí, esa de ahí. Bien. Y me voy a ir a hacer el resto de esto. Puedes hacer esto por tu laberinto particular que has creado o si intentas copiar lo que he hecho, bueno, voy a detener el video aquí y reiniciaré cuando todos los colisionadores estén dibujados Bien. Una vez que hayas dibujado todos tus colisionadores, así que mira algo así Si vas ahora a NavMesh y haces clic en Hornear, entonces deberías ver algo como esto Ahora bien, ¿qué significa todo esto? Bueno, esencialmente, lo que ha hecho la malla Nav es que se descifra de todos los colisionadores, donde el enemigo puede caminar Esta zona azul aquí es donde el enemigo puede caminar, y obviamente está evitando cualquier lugar que tuviera un colisionador Y entonces lo que esta malla Nav es genial porque puedes crear un script de IA que usaremos algo llamado agente nab mesh Y este agente de malla nab se adherirá a esta zona transitable. Así que no caminará por ninguna de estas paredes ni nada por el estilo. Se pegará a esta zona azul. Y así para ir de, digamos, aquí a aquí, irá si voy por aquí o debo ir por ese camino, y como que se va a dar cuenta de eso por sí mismo. Pero no va a pasar por la pared. Y por lo tanto, realmente parece una IA bastante inteligente. En realidad no lo es, pero parece que está pensando en qué camino tomar y eso es bastante genial. 10. Laberinto enemigo: Bien, ahora tenemos nuestro NavMesh. Vamos a crear un enemigo que pueda utilizarlo. Entonces porque nuestro enemigo finalmente va a ser una mancha, vamos a crear un círculo Por nuestro enemigo. Así que dos objetos D sprites círculo porque vamos a convertir ese círculo en un blob eventualmente Pero sólo para mantener las cosas bonitas y simples, será un círculo para comenzar. Entonces comencemos aquí en la esquina inferior izquierda. Llamemos a este enemigo. Y vamos a crear un script Así que haz clic en nuestra carpeta de scripts, haz clic derecho y elige Crear guión C Sharp, y voy a llamar a este enemigo AI. Y vamos a hacer doble clic en eso. Ahora, necesitamos una referencia a nuestro jugador. Entonces vamos a hacer guión bajo de transformación de campo serializado Entonces nuestro enemigo sabe dónde está nuestro jugador. Y sobre esta IA enemiga, vamos a tener un agente NavMesh Así que voy al agente privado de Nash, y esto realmente atraerá el espacio de nombres de IA del motor de unidad porque ahí es donde está el agente NavMesh Sólo voy a llamar a este agente de subrayado. Porque lo que podemos hacer es configurarlo en nuestro inicio. Así que puedo hacer subrayado agente es igual a obtener agente componente Entonces, por supuesto, esto significa que necesitamos agregar un agente de malla Nav a nuestro objeto de juego, lo cual aún no hemos hecho, pero lo haremos. Y entonces lo que podemos hacer en actualización es que podemos decirle a nuestro agente de Nombres establecer el destino a la posición del jugador. Porque queremos atacar a nuestro jugador. Queremos movernos hacia nuestro jugador. Y así esta es la fuente mágica que le dirá a nuestro agente de malla Nab, ve a buscar a nuestro jugador Y como le estás diciendo al agente NavMesh que lo haga, va a usar la malla Na para hacer esto Por lo que va a atravesar sólo en la malla Na para llegar a nuestro jugador Entonces creo que deberíamos meter nuestro jugador en la esquina superior derecha para que podamos ver que nuestro enemigo puede llegar hasta nuestro jugador, todo el camino hasta allí. Entonces hagamos dos objetos D, sprites Hagamos de nuestro jugador un triángulo por el momento, y aumentaré el orden en el layout solo para poder ver nuestro jugador y vamos a arrastrarlo a la esquina superior derecha Llamemos a este jugador. Y luego queremos arrastrar nuestro guión de IA enemiga hasta aquí sobre nuestro enemigo. Y luego queremos arrastrar a nuestro jugador a nuestra referencia de jugador aquí. Entonces ahora, en nuestro guión de IA enemiga, todo esto está muy bien configurado. Entonces nuestra variable de jugador en realidad será distransforme aquí Bien. Entonces dijimos que necesitamos agregar a nuestro enemigo un agente de malla Nav. Entonces hagámoslo ahora. Entonces si apenas empiezo a escribir Na mesh, entonces ahí tienes. Puedes ver nuestro agente NavMesh aquí. Y por el momento, vamos a mantener todo por defecto. Vamos a golpear play y a ver qué pasa. Ahora, como pueden ver, se está moviendo por aquí, pero no podemos verlo. Pero eso es bastante genial. Se va todo el camino, así que va a repasar, pero aquí desapareció. Y era como que giraba alrededor. Si si nos aseguramos de que el enemigo seleccionara y golpeara play probablemente va a estar jugando con nuestra rotación Bueno, si tenemos ahí un sprite lob. No queremos que el sprite blob esté rotando alrededor. Entonces eso tampoco va a funcionar para nosotros. Así que tendríamos que hacer un par de retoques más a nuestro agente NavMesh para evitar que eso suceda Lo primero que tenemos que hacer es que podemos hacer subrayado agente punto actualización eje igual a false Entonces el eje arriba en un juego de dos D. Bueno, ya sabes, tenemos x e y arriba y abajo, pero de lo que está hablando realmente está arriba como en arriba como en el eje Z porque en el eje Z porque realidad el agente Unity NavMesh es una especie de agente tres D. Y tan confuso para el agente NavMesh es en realidad el eje Z. Entonces es decir, no te metas con nuestro eje. Así que eso debería impedir que nuestro sprite desaparezca, y luego evitar que nuestro sprite gire alrededor Podemos hacer la rotación de actualización es igual a false. Entonces no queremos que nuestro agente esté rotando por ahí. Entonces le estamos diciendo que no haga eso. Vamos a intentarlo de nuevo. Yo juego. Ahora, mira esto. Nuestro enemigo viene por nosotros. Está atravesando el laberinto. Bien. Y son los dioses. ¿Qué tan genial es eso? 11. Jugador de laberinto: Bien, sí se siente un poco injusto que el enemigo pueda venir y atacarnos, pero no tenemos forma de evitarlos. Así que vamos a arreglarlo ahora. Entonces, si entramos en guiones, haga clic derecho y cree un guión C sharp, y solo voy a llamar a este Player, y hagamos doble clic en eso para abrirlo. Bien, ¿qué queremos aquí? Bueno, para ser útil para poder establecer nuestra velocidad a la que estamos corriendo. Así que vamos a crear un flotador y llamaremos así a esta velocidad de subrayado Seamos específicos y llamémoslo privado. Este privado es en realidad opcional. Si lo dejas fuera, entonces se presume que esta variable en particular aquí es privada, pero a veces es bueno ser explícito sobre estas cosas Derecha. ¿Qué más queremos aquí? Pensemos. Queremos tomar la entrada de nuestro jugador para que podamos mover a nuestro personaje de jugador. Entonces podemos crear aquí un vector privado tres, y vamos a llamar a este subrayado entrada de usuario Ahora podemos usar esto en nuestra actualización Bien. Como aquí dice con facilidad, actualización se llama una vez por fotograma Este método aquí se llama automáticamente para nosotros. ¿Qué queremos hacer? Bueno, queremos dos establecer nuestra entrada de usuario igual a dos. Ahora un vector. Vamos a crear un nuevo vector y queremos que la x venga de nuestra entrada get axis Y esto es zon input, obtener acceso pero es Cool. Entonces eso es tomar aportes de nuestro usuario. Entonces eso es en realidad te voy a mostrar dónde se configura esto en un segundo. Obtenemos estos de forma gratuita, viene junto con una configuración predeterminada de proyecto de unidad. Y sí, en realidad son las AWS AWSD y las teclas de flecha Estamos usando get access access porque esto es un poco de un juego de dos D D. Entonces el get axis raw no tiene ningún alisado en él. Si en realidad solo puedes usar get axis y eso funcionará. Pero lo que encontrarás es que el personaje se acelerará un poco. Entonces presionarán una entrada y no irá inmediatamente a toda velocidad. Poco a poco va a llegar allí. Y eso es por que toma en cuenta la sensibilidad. Y nuevamente, en un minuto te mostraré dónde se configura eso. Pero vamos a conseguir que esto funcione y luego podremos pasar por ello. Entonces queremos hacer position es igual a transformar position plus y así queremos seguir agregando a nuestra posición esta entrada de usuario esencialmente. Podríamos hacer algo n como usarlo tiempos de entrada velocidad. Bien. Y eso parecería que estaba funcionando. Um, así que hagamos eso por el momento porque eso es poco súper sencillo de entender, ¿verdad? Estamos tomando nuestra posición, y somos todos los fotogramas, y eso es muy importante, cada fotograma. Y si lo piensas bien, la cantidad de fotogramas que ocurren cada segundo en un juego en realidad puede cambiar dependiendo de lo potente que sea tu computadora. Entonces eso es algo a tener en cuenta. No estamos tomando eso en cuenta por el momento. Entonces lo que estamos haciendo es cada fotograma, estamos tomando la posición, y estamos agregando cualquiera que sea nuestra entrada de usuario, de hecho, este vector tres, solo para ser específicos, y podemos simplemente poner un cero común ahí. En realidad no tengo que hacerlo. De hecho voy entender que va a tomar un crear un vector tres de x y y cero de todos modos si lo dejas fuera. Pero solo para ser específicos, ¿verdad? Estamos configurando la x de este vector a nuestra entrada actual, nuestra y de este vector a nuestra entrada de corriente en la vertical y Z sin tocar. Entonces y entonces estamos multiplicando esto. Estamos haciendo esto primero. Las multiplicaciones ocurren primero Quiero decir, puedes poner corchetes alrededor de esto, pero en realidad es innecesario porque hace esto primero. Entonces veces eso por lo que sea que estemos poniendo aquí. A lo mejor deberíamos poner una velocidad por defecto porque no veremos que pase nada si la velocidad es cero, así que es bueno tener una velocidad predeterminada. Y eso debería parecer que está funcionando. Entonces hagámoslo. Vamos a hacer clic en Jugador. Arrastremos el guión de nuestro jugador ahí, lo configuré a una velocidad de uno por defecto. Vamos a hacer clic en Reproducir. Y en realidad, desactivemos nuestra y por el momento porque no quieres preocuparte de que un enemigo nos persiga mientras estamos probando el movimiento. Oh, guau, eso es rápido. Eso es rápido. Entonces bajemos la velocidad a 0.01. ¿Qué aspecto tiene eso? Ser lento. Hagámoslo, está bien. Fresco. Ahora bien, hay algunas cosas obvias mal aquí. En primer lugar, estamos atravesando paredes. Entonces no estamos tomando en cuenta ninguna colisión. Y también, una cosa que es bastante sutil, en realidad, y estoy usando las teclas AWSD para mover esto, pero también puedo usar las teclas de flecha Entonces esta es flecha izquierda flecha hacia abajo flecha derecha. Ahora bien, una cosa que no es obvia es en realidad en la diagonal, vamos más rápido. Es sutil, pero definitivamente está ahí, ¿verdad? Se puede ver que la diagonal es más rápida que ir a la izquierda, y generalmente no quieres eso. Y esto es un error que veo pasar mucho con gente haciendo su movimiento de personajes. Yo se olvidan de éste. Entonces, primero arreglemos el problema de la diagonal. Entonces pongamos esto en permanentemente 0.09. Y entremos en nuestro jugador. ¿Y cómo solucionamos el problema de la diagonal? Bueno, lo que en realidad está pasando aquí es cuando alguien presiona el ky izquierdo. Y en realidad, vamos a hacer esto. Podemos depurar esto para que veas que esto sucede. Así que depurar log y hacer De hecho, solo podemos hacer entrada del usuario porque sí, debería trabajar. Entonces si acabo de hacer entrada de usuario, dos puntos. Y luego lo que puedes hacer entre llaves. Puedes usar entrada, y solo se insertará. Esto es bastante útil esta forma de hacer cuerdas en Do sharp. Si pones $1 delante de una cadena, entonces puedes usar estos corchetes para insertar variables donde quieras en la cadena. Y eso es muy agradable. De lo contrario, tendrías que hacer concatenación. Esa es otra cosa que funciona. Puedes concatenar variables al final de las cadenas, pero se vuelve un poco desordenado si luego quieres continuar con la Aquí no tendría mucho sentido, pero podrías usarlo input y no conozco algunos signos de exclamación o Y es solo que esto solo siento que es un poco neter. Bien. Entonces echemos un vistazo y veamos cómo es esto. Bien. Entonces se puede ver que es todo ceros en este momento, pero si golpeo a la izquierda, se puede ver que inmediatamente va a menos uno son x, y si voy a la derecha, ya sea D o flecha derecha, muestra uno Si hago A y S o y a la izquierda, simultáneamente, se puede ver que es menos uno menos uno. Y por eso va diagonalmente porque va a la izquierda y hacia abajo, cantidades iguales, y así termina yendo diagonalmente por la pantalla Entonces ojalá, ya sabes, tengas una comprensión básica de los vectores. No son demasiado complicados, pero ojalá puedas averiguar qué está funcionando, cómo funciona eso a partir de eso. Allí hay una depuración muy básica. Pero lo que no es obvio es eso en la diagonal. Entonces, si vamos a la izquierda, solo estamos agregando uno a x, en realidad cada fotograma del momento, o en realidad multiplicado por la velocidad. Entonces no es exactamente que, por ejemplo, digamos que no multiplicamos por velocidad, o la velocidad es una, estaríamos en uno, cada fotograma a la izquierda. Si eres diagonal, entonces en realidad estás agregando uno a la izquierda y otro al extremo derecho. Pitágoras entra ahí, en realidad, porque vas abajo una y vas a la izquierda una, lo que significa que diagonal, que significa que diagonal, realidad estarías yendo a la raíz cuadrada de una al cuadrado más una al cuadrado Entonces, esencialmente, la raíz cuadrada de dos, que es el rollo de tambor. Bueno, en realidad no tengo que resolverlo. Puedo depurarlo a nuestra consola para decirme. Entonces lo que puedo hacer es que puedo tirar U de magnitud de entrada. Ahí vas. Y una magnitud de un vector es esencialmente la distancia, y. entonces Y ojalá, poder ver el tema, bien. Aquí tenemos cero al final. Entonces, eso está bien. Tenemos una magnitud de uno yendo a la izquierda y a la derecha arriba y abajo, tenemos una magnitud de uno. Pero mira si vamos diagonalmente, 1.41, cuatro, lo que sea, 1.4 1421, cuatro, algo así, ¿ Y si hago la raíz cuadrada de dos, sólo para demostrártelo, pipagor raíz cuadrada de dos, 1.4 Ahí vas. Entonces Pypagor trabajando ahí y está despilfarrando nuestra velocidad Entonces hay una solución realmente fácil para esto, y solo debes hacerlo cada vez. Ni siquiera hay que pensarlo. Entonces, si nada de eso significa nada para ti, ni siquiera te preocupes por ello, ¿verdad? Todo lo que necesitas hacer es hacer normalizado. Todo eso. Y lo que puedo hacer ahí es que voy a normalizar eso normalizado y tomar la magnitud de eso. Y luego verás cómo lo arregla. Entonces de nuevo, dejó uno abajo uno. Pero diagonal. También uno. Y puede ser bastante obvio para ti que la velocidad en la diagonal ahora es buena. Perfecto. Entonces tenemos buen movimiento en la diagonal, que es lo que quieres. Y lo único que es buggy ahora es que somos dependientes de la velocidad de fotogramas, lo que no es nada bueno. Queremos tener una velocidad constante en unidades por segundo, no unidades por fotograma porque nuestra velocidad de fotogramas puede cambiar, pero los segundos son segundos ahí mismo. Bastante sólido. Entonces, ¿ cómo hacemos eso? Bueno, no pensemos demasiado en ello. Sólo tenemos un pequeño truco para arreglar esto. Lo multiplicamos por tiempo do a tiempo. Y eso convierte esencialmente en una velocidad de unidades por segundo. Y sólo muy brevemente, eso es porque Delta time es la cantidad de tiempo que cada fotograma está tomando. Entonces multiplicando esto aquí, si los fotogramas son muy rápidos, entonces esto es muy pequeño, y si los fotogramas son muy lentos, entonces es grande y iguala todo Entonces explicación muy básica. Fresco. Entonces probablemente signifique que tenemos que subir un poco nuestra velocidad porque como digo, tiempo Delta suele ser bastante pequeño porque los fotogramas son rápidos. Oh, sí, apenas podemos ver que nos estamos moviendo. Por lo general, alrededor de las cinco, creo que sí. Ahí vas. Cinco es bueno. Voy a parar eso y hacer cinco. Bien, entonces estamos atravesando paredes. Y eso es porque no tenemos un colisionador en nuestro jugador Entonces claro, estamos atravesando muros porque aquí tenemos colisiones, así que ya pueden ver, aquí tenemos colisiones Entonces el jugador debería ser para chocar con estos, pero solo si el jugador mismo tiene un colisionador, y necesitas un colisionador tanto en el jugador como en el nivel A pesar de que no es lo suficientemente bueno como para agregar un Caldor, y déjame probarte eso Entonces si agrego componente Caldor, y vamos a mantenerlo realmente simple Círculo Caldor me va a hacer bien. Y ahora estoy tratando de conseguir el momento, pero ¿a quién le importa? Um. Esto no va a funcionar. Pero solo demuestro que no lo es. Ahí vas. Entonces tenemos un colisionador pasando por otro colisionador. Y ese es un tema bastante conocido porque en unidad, necesita un cuerpo rígido en al menos uno de los colisionadores para que ocurra la colisión Entonces es generalmente lo metes en lo que se mueve, que es el jugador aquí. Así que cuerpo rígido dos D, Ahí tienes. Asegúrate de agregar un cuerpo rígido dos D y no un cuerpo rígido. Entonces Simulado tiene que ser marcado. No quieres ninguna gravedad, y eso debería hacer el truco. Guardar Ahí vas. Así que golpeando contra esa pared, y no nos pueden pasar Estamos golpeando contra esa pared. Pero eso sí parece bastante basura. A pesar de que es un poco de trabajo. Quiero decir, si nos acercamos, se puede ver que estamos pasando por este choque, quiero decir A ver si puedo seleccionar ambos. Ahí vas. Mira, estamos pasando por el Clider. Bueno, eso es un poco raro. Y eso es porque estamos como luchando contra la física en el camino. La física está haciendo lo suyo, y nosotros estamos haciendo lo nuestro, y los dos chocan un poco Así que en realidad tenemos que ir con la corriente en este caso, ir con la física de la Unidad dos D y utilizarla para el movimiento, y entonces todo va a ser un poco más feliz que este horrendo Si eso fuera un pozo muy aleta, probablemente podríamos pasar por él, no llamar. Bien, entonces vamos a arreglar eso a continuación. 12. Física del jugador de laberinto: Bien. ¿Qué estabas haciendo? Ah, sí, íbamos a arreglar nuestras colisiones de mal calidad, ¿no? Hagámoslo. Sue. Ahí está nuestro guión ahí está. Bien. Vamos a hacer doble clic en eso. Ahora, probablemente te estabas preguntando por qué pongo entrada del usuario aquí y la estamos usando aquí y aquí. Así que en realidad no hay razón alguna para que sea una variable de clase. Podría haber hecho un vector tres aquí, lo que sea. Y lo hice de esa manera. Pero en realidad nos facilita cambiar nuestro código para hacer nuestras colisiones físicas adecuadas Entonces necesitamos usar actualización fija. Ahora bien, esto es como la actualización de física. Y así, si quieres estar sincronizado con nuestro motor de física, tenemos que usar esto. Así que ya lo tenemos listo. Pero sí necesitamos una referencia a nuestro cuerpo rígido dos D. Rígido dos D. Y no parece que vaya a estar usando start. Así que cambiemos eso a despertar. Despierto es el primer método al que se llama. Obviamente, un buen lugar para configurar cualquier referencia a componentes que necesitemos en nuestro objeto de juego. Y definitivamente necesitamos hablar con nuestros componentes rígidos del cuerpo si se mueven de posición. Y entonces en realidad podemos simplemente tomar todo esto basado ahí dentro. Agradable y fácil actualización. Entonces es exactamente lo mismo que esto, pero hacerlo a través del cuerpo rígido dos D para que sea amigable con el motor de física. Vamos a comentarlo. Vamos a comentarlo. Ahora te preguntarás estoy jalando la entrada del usuario aquí y no aquí. Bueno, la actualización tiende a llamarse más veces que la actualización fija, por lo que es un buen lugar para tomar en la entrada del usuario. Esto no tiene nada que ver con nuestro motor de física, simplemente tirando de lo que el usuario ha presionado hacia abajo en el teclado, y queremos hacerlo súper rápido. Y entonces encontrarás que si hiciste esto aquí, tus entradas, nos sentimos lentas y es solo porque a esta actualización se le llama más veces que Entonces veamos cómo le va eso. Oh. Ahí vas. Ya sabes, golpeando esa pared, y no vamos a atravesarlo. Entonces eso es bastante genial. Oh o no. Eso es bastante gracioso. Vamos a arreglar eso. ¿Qué está pasando ahí? Bueno, esa es una solución fácil, en realidad. Venimos aquí a nuestro cuerpo rígido dos D. Y especificamos que no queremos rotar sobre la z. Vamos a intentarlo de nuevo. Bien. Fresco. Bonito. Fresco. Eso es bueno. Bastante bien. A mí me gusta mucho. Tal vez solo podamos asegurarnos de que esté un poco menos pegajoso en las esquinas, tal vez. Podemos ayudar un poco creando un vamos a crear un material de carpeta Vamos a crear un dos D. Asegúrate de elegir dos D. Física material dos D. Sólo voy a llamar a esto resbaladiza Voy a tener una fricción de cero rebote de cero, y simplemente arrastraremos y soltaremos eso sobre el material ahí Y para estar seguros, lo arrastraremos a nuestro cuerpo rígido dos D también. Echemos un vistazo. Bueno, eso es como que dar la vuelta de la esquina es un poco mejor. No hay mucho en él. Pero eso es bastante genial. En realidad, sólo para que quede claro, si volvemos a jugador, Asignar el material al cuerpo rígido dos D en realidad es suficiente Tuve que buscar ese en realidad. De hecho, puedes tener múltiples colisionadores aquí con diferentes materiales físicos Pero si solo tienes uno, entonces agregar el material al cuerpo rígido dos D significa cualquier colisión en ese objeto de juego heredará El material en el ridgidbody dos D. Así que no duele tenerlo en ambos, pero voy a tenerlo solo en el Rdidbody dos D, y este círculo colisionador dos D puede heredar ese material de ese cuerpo rígido dos D. Así que solo aclaración dos D. Así que no duele tenerlo en ambos, pero voy a tenerlo solo en el Rdidbody dos D, y este círculo colisionador dos D puede heredar ese material de ese cuerpo rígido dos D. Así que solo aclaración ahí. 13. Patrulla de laberintos: Bien, pongamos a nuestro enemigo deambulando por nuestro laberinto hasta que se acerquen demasiado a nosotros y luego vendrán tras nosotros. Entonces abramos la IA enemiga. Y vamos a agregar algunos campos más en la parte superior aquí. Así que agreguemos flotador para nuestro rango de ataque. Entonces, cuando el jugador se ponga dentro de este rango de ataque, el enemigo va a venir tras nosotros. Agreguemos también una velocidad porque tenemos una velocidad para nuestro jugador, pero no tenemos una velocidad para nuestro enemigo, así que deberíamos arreglarlo. Ahora necesitamos algunos puntos de paso. Entonces la forma en que esto va a funcionar es que el enemigo se va a mover entre estos waypoints hasta que se metan dentro del alcance de ataque del jugador Así que esto tiene que ser una serie de waypoints. Entonces ponemos un par de corchetes al final y verás lo que hace eso en un minuto. Entonces usemos nuestra velocidad, en primer lugar, para que podamos hacer subrayado que la velocidad del agente es igual a la velocidad Tengo que configurarlo y comenzar. Eso es genial. Ahora, por el momento, comentemos esto. Y pensemos lo que queremos hacer. Entonces queremos movernos entre puntos de paso y vamos a tener múltiples waypoints Entonces, en cuanto el enemigo llegue a un waypoint, quiere comenzar a moverse al siguiente waypoint Así que tenemos que verificar qué tan cerca estamos si estamos cerca de un waypoint, y luego tenemos que pasar al siguiente waypoint Entonces voy a hacer algo sencillo como si agente de subrayado restante distancia es menor de lo que podemos poner algo que me suele gustar a los valores duros, pero esto probablemente va a ser bastante seguro 0.5 F y necesitamos rastrear nuestro punto de ruta actual. Entonces, solo mantengamos una pista. Y tengamos este público por el momento para que podamos ver cómo funciona esto. Entonces vamos a llamar a este índice de puntos actual. Bien. Entonces, esencialmente, nuestro índice de waypoint actual necesita ser incrementado si el agente ha llegado al waypoint actual Pero tenemos que ser un poco cuidadosos porque no podemos simplemente incrementar porque saldremos de los límites de esta matriz Entonces, si llegamos al último waypoint, tenemos que volver a cero Y entonces hay una manera genial de hacer esto, agradable y fácil, para que podamos hacer subrayar el índice de waypoint actual más uno, y pongamos corchetes alrededor de esto solo para ser claros Y entonces podemos hacer módulo de manera puntos de longitud de punto. Entonces queremos establecer nuestro agente conjunto destino dos, este waypoint Eso es en este índice de waypoint actual. El corchete, el índice de puntos de referencia actuales de subrayado y los waypoints Entonces solo queremos tomar la posición de la transformación así. Entonces veamos si esto funciona, y luego lo explicaré. Entonces necesitamos establecer nuestros waypoints. Así que vamos a crear un objeto de juego vacío, llamarlo waypoints. Reiniciemos este reinicio, y vamos a crear nuestro primer waypoint Simplemente llamemos a esto cero porque está en el índice cero o lo estará. Y vamos a hacer doble clic. Entonces está ahí arriba y queremos tirarlo hacia abajo hasta aquí. Bien. Y si quieres que sea un poco más visible, podemos hacerlo como un punto rojo. Ahora es un poco más visible. Entonces ese es nuestro primer waypoint. Duplicemos eso y movamos nuestro siguiente waypoint hasta aquí Llamémosle a éste. Duplicemos eso. Pasemos eso a Todo eso dos y bajemos eso hasta aquí y eso es tres. Ahora en realidad necesitamos asignarlo a nuestra matriz de puntos way aquí. Ahora, es bastante complicado porque queremos arrastrar y soltar los cuatro de estos aquí. Pero si empezamos a hacer eso, entonces eso desaparece. Entonces hay un truco para esto. Bajemos aquí, preparémoslo, y luego simplemente hacemos clic en este candado aquí. Y luego ahora, podemos dar click en eso. Haga clic en eso y arrástralos a waypoint a este bit aquí, y soltará los cuatro Y se puede ver que este es el elemento 00123. Así que eso funcionó. Puede deshacer eso ahora Todo lo que hace ese candado es que bloquea al inspector en lo que sea que hayamos seleccionado. Para que podamos seleccionar otras cosas y el inspector seguirá estando en la cosa original. Eso es genial. También alcance de ataque. Hagamos ese cero para que simplemente vaya dando vueltas por ahí y de hecho, no tenemos el código para esto, en realidad, no importa, pero hagamos esto cinco vamos a golpear play y veamos qué pasa. De hecho, bajemos hasta aquí y echemos un vistazo a nuestro índice de waypoint actual Se va ahí incrementó eso, vas a cuatro y luego vuelves a cero Para que veas que nuestro enemigo va bicicleta entre todos los waypoints Empecemos de nuevo y expliquemos lo que está pasando. Nuestro índice de waypoint actual comienza en cero, si miramos nuestro código, Bien, distancia restante va a comenzar como cero porque realmente no hemos establecido el destino inicialmente Entonces va a entrar aquí bastante inmediatamente, y va a incrementar el waypoint A ver si ese es el caso. No estoy diciendo mentiras. Sí. Es decir, ese waypoint actual sí se incrementa de inmediato. Lo cual tiene sentido porque, sí, no hemos establecido nuestro destino inicialmente, por lo que la distancia restante es algo indefinida, pero es cero. Entonces entraremos aquí. Incrementaremos el índice de waypoint actual índice Waypoint actual comienza en cero. Añadimos uno. Y hacemos waypoints de módulo longitud de punto, y tenemos cuatro Entonces va a lo que hace este módulo es que se necesita siempre es el resto que devuelve. Entonces va a ser 1/4 es cero resto uno, ¿verdad? Entonces es una forma bastante inteligente de andar en bicicleta por 0-3. Yo solo voy cero, uno, dos, tres, cero, uno, dos, tres, porque si lo piensas bien, una vez llegamos al punto de manera índice tres, que es este aquí porque en realidad los índices empiezan en cero. Entonces esto es 0123. Una vez que llega al punto de manera actual índice tres, si esto se convierte en cuatro, entonces obtendríamos un error porque esto abandonaría el final de la matriz y rompería las cosas. Pero lo que hace es que va tres más uno es cuatro, pero hace cuatro módulo cuatro que es uno. Pero claro, devuelve el resto, es un resto cero. Entonces eso se convierte en cero. Así que eso es un poco genial de matemáticas, lo cual es muy, muy práctico. De hecho voy a ver esto bastante en la programación. Y luego asignamos el destino establecido a puntos de vía y como digo, esto va a uno inmediatamente, camino 0.1 posición. Entonces voy a ser éste de aquí. La posición de éste aquí. Y así esto empieza a marchar hasta aquí. Y no vuelve a entrar en este bit de código aquí hasta que se ponga dentro de 0.5 f de este waypoint, y luego comenzará a entrar aquí, incrementar esto y comenzar a marchar hacia el Entonces eso es bastante genial. Ahora tenemos que hacer es agregar nuestro código para cuando el jugador se acerca demasiado al enemigo. Entonces hagámoslo. La distancia del jugador es igual a y podemos usar nuestro método de tres distancias vectoriales, que toma dos vectores tres y devuelve la distancia entre ellos. Entonces queremos la posición del jugador y la posición del enemigo. Esto es sobre el enemigo, por lo que es solo una oposición transformada. Entonces eso debería devolver lo lejos que está el jugador de nosotros. Y cierre la sesión. Así. Y entonces podemos decir, si la distancia del jugador es menor que nuestro rango de ataque, entonces podemos usar esta cosa que acabamos de comentar aquí. Queremos establecer nuestro destino a nuestra posición de jugador. En realidad queremos regresar en este punto porque estamos fuera de nuestro modo de patrullaje, y ahora estamos en nuestro modo jugador Entonces así va a funcionar esto. Entonces, vamos a correr esto para ver cuál sería una distancia justa para ese rango de ataque. Bien. Así que nos estamos acercando cada vez más aquí patrullando aquí arriba Así que en realidad no ha caído por debajo de 20, no lo creo todavía. Obtener Tal vez diez sería bueno. Quiero decir, no fue del todo, quiero decir , obviamente, de momento, está puesto a cero, así que nunca vamos a llegar tan cerca. Entonces echemos un vistazo. Sí, el rango de tach es cero. Cambiemos esto a diez entonces. Y creo que probablemente sea bueno. Bien. Así que justo fuera de rango ahí. Pero ahora estamos en el rango, y debería estar viniendo tras nosotros. Sí, se saltó ese waypoint. Y ahora definitivamente tiene aroma y viene tras nosotros. Sí. Y entonces, obviamente, estamos muertos. Bien. 14. Laberinto la mancha: Bien, vamos a traer un par de texturas de bloques para nuestro enemigo. Voy a arrastrar esto a nuestra carpeta de texturas. Así que vamos a seleccionar ambos. Puedes seleccionar uno y luego desplazar y mantener presionado para seleccionar el siguiente, así, y luego voy a elegir 256 para nuestros píxeles por unidad. Haga clic en aplicar. Y cerrar nuestros puntos de paso. Vamos a arrastrar estos. Entonces seleccionas ambos. A continuación, arrastre y suelte. Y la unidad es bastante inteligente. Si arrastras dos texturas, va a presumir que estás intentando crear una animación usando esas dos texturas. Entonces eso es bastante inteligente. Y vamos a entrar en laberinto y crear una nueva carpeta llamada animaciones. Bien. Y vamos a poner nuestra animación aquí y voy a llamar a este blob guión bajo caminar así Haga clic en Guardar. Y se puede ver que esto ha creado un objeto de juego, y ha agregado un animador, y creó un controlador para nosotros también bastante Y si hacemos doble clic en este controlador, en realidad creamos un estado en el que inicialmente entra que está conectado a esta animación, blob walk Si hacemos doble clic en eso, entonces vamos a arrastrar esto y hacer este panel de animación aquí. Y podemos seleccionar blob. Podemos ir a escena. Vamos a acercarnos un poco. Vamos a mover eso ahí por el momento. Ordenando capa, necesitamos obtener esto por encima de nuestra capa para el nivel. Y si le pego a play, una forma hacerlo es simplemente reproducir la animación aquí. Ahora ya tenemos este blob seleccionado. O puedo presionar play aquí para ver realmente que reproducirá esa animación predeterminada de blob walk tan pronto como le peguemos play Eventualmente. Pero esto no se ve muy bien. Parece algo espasmo, no una mancha. Entonces, ¿cómo arreglamos eso? Bueno, en esencia, esta animación simplemente va demasiado rápido. Hay múltiples formas de cambiar eso. manera bastante fácil es hacer clic en estos tres puntos aquí, y podemos mostrar la frecuencia de muestreo. Y podemos establecer nuestra frecuencia de muestreo en algo así como uno, lo que ralentizará las cosas. A lo mejor dos lentos ahora. Cambiemos esto a una frecuencia de muestreo de dos. Ahí vas. Eso se ve mejor, y solo estamos como un poco blogging a lo largo Ahora, no hemos asignado. Vamos a parar con eso. No le hemos asignado esta mancha a nuestro enemigo. Deja alejar un poco. Hagámoslo. Primero que nada, cambiemos el nombre de esto a blob Y podemos arrastrar y soltar eso sobre nuestro enemigo y vamos a poner a cero esto y esto para que el blob quede justo sobre nuestro objeto de juego enemigo Y entonces ya no necesitamos nuestro renderer de sprites circulo aquí Vamos a quitar eso. Pero todo lo demás que quieras seguir ahí porque tiene nuestro guión de IA. Vamos a hacer clic en esa jugada. Ahora tenemos esta mancha genial moviéndose por nuestro laberinto. Y viene por nosotros y nos tiene. Bien. 15. Entrada de laberinto: Ahora, sí dije que iba a adentrarme de donde viene esta horizontal y vertical. Entonces, si vas a editar la configuración del proyecto, obtienes este panel de configuración del proyecto aparece a la izquierda aquí, quieres hacer clic en Administrador de entrada, y de aquí es de donde provienen horizontal y vertical. Entonces si expandimos horizontal. Entonces esto define horizontal aquí, y el botón negativo para horizontal es la tecla de flecha izquierda. Pero también tiene este viejo botón negativo, y eso es una presionando la tecla de flecha izquierda o la tecla a, luego horizontal se convierte en menos uno en la x Entonces así es como funciona eso. Y la diferencia entre el eje get y el eje raw se define por la sensibilidad. Por lo que esta sensibilidad aquí significará que si usas get axis, entonces va a tipo de rampa hacia arriba dependiendo del valor de esta sensibilidad. No pasará inmediatamente de cero a menos uno, digamos, cuando te fuiste de Aki pasará una cierta cantidad de tiempo. Entonces porque estoy usando get access raw aquí, estoy ignorando esa sensibilidad por completo, y voy 0-1 inmediatamente Así es como funciona eso, y por supuesto, tenemos vertical aquí. vertical se define aquí con el botón negativo abajo, botón positivo hacia arriba, flecha y el botón negativo botón positivo W. Así es como funciona eso. Bien. 16. Ratón laberinto: Bien. Vamos a ordenar nuestros nombres un poco. Entonces solo quiero llamar a este control una mancha. Entonces vamos a traer un par de texturas más. Entonces traeremos nuestras texturas una y dos, y hagamos que nuestro jugador se mueva. Así que de nuevo, haz click izquierdo en Ratón uno , haz clic en Mouse dos, y arrástralo a nuestra escena. Vamos a tener que seleccionar nuestra carpeta de animaciones y voy a llamar a este ratón vamos a llamarlo player underscore walk Haga clic en Guardar. Cambiemos el nombre de nuestro controlador que acaba de crear a player. Y echemos un vistazo donde puso este ratón aquí vamos a conseguirlo arriba. Y está un poco en el lado grande, reduzcamos esto a 256 píxeles por unidad y presionemos aplicar. A ver. Pongámoslo en el medio ahí para que podamos verlo. Todavía es un poco grande, pero lo abordaremos en un minuto. Sólo voy a cambiar el nombre de esto a Mouse. Bien. Y seleccionemos nuestro panel de animación. Entonces solo tenemos que jugar un paseo en este momento, y mi conjetura es que eso va a ser súper rápido. Echemos un vistazo. Sí, un poco maníaco. No creo que quiera ser tan lento como el blob. Entonces cambiemos las muestras a cuatro y golpeemos Enter. Entonces se necesita eso. Creo que está bien. Eso es lo correcto, creo. Así que vamos a adjuntar esto a nuestro jugador y vamos a poner a cero estos cero, cero, y hacer doble clic en nuestro jugador para que podamos ver qué está pasando. Y pienso bien, antes que nada, vamos a deshacernos de este renderer de sprites No quiero que ese triángulo se muestre. Y hagamos clic en el mouse y hagamos clic en esta cosa de escala aquí para que podamos escalar proporcionalmente nuestro mouse un poco hacia abajo Pensando en 0.6, probablemente va a estar bien. Golpeó play. Y claro, se puede ver que el problema inmediato es que está reproduciendo esa animación caminando todo el tiempo. Y eso no se ve bien. Para la mancha, está un poco bien porque la mancha es solo una mancha Pero para la animación de caminar, realmente no quieres ver a alguien caminando en el lugar. Entonces tenemos que arreglarlo. Bien, entonces abramos nuestro controlador de reproductor, y podemos ver que tenemos este paseo, solo puedes arrastrar esto por ahí. Eso es andar estado. Eso es tocar esta obra un paseo, y como que queremos una animación ociosa que solo esté de pie en su lugar. Entonces lo que podemos hacer es si entramos en animaciones pincha sobre nuestro jugador Walk. Podemos mandar a D que duplique eso. Bien. Podemos cambiarle el nombre a Idle. Vamos a hacer doble clic en él. Y vamos a deshacernos de ese segundo marco de caminata porque tenemos este tipo de que tenemos que seleccionarlo para verlo. Entonces aquí tienes. Ese segundo fotograma es que puedes verlo cambiando aquí, el sprite del mouse uno al mouse dos Así que queremos eliminar esto pero asegurarnos de que no somos seleccionados para jugar un paseo. Queremos jugar un ocioso. Vamos a hacer clic en éste y eliminarlo. Pero necesitamos nuestro controlador de reproductor para que esta sea nuestra animación predeterminada. Así que vamos a arrastrar la animación inactiva del jugador a nuestro controlador de reproductor. Alejar un poco. Tenemos caminata de jugador, tenemos jugador inactivo queremos que este sea nuestro estado inicial. Establecer como estado predeterminado de capa. Haga clic derecho aquí. Establecer como estado predeterminado de capa. Ahí vas. Si vuelvo a la escena y presiono play, un mouse solo debería pararse ahí y en realidad si hago clic en mouse y hago clic en animador Se puede ver que está jugando a este jugador inactivo. Queremos la capacidad de cambiar entre jugar un paseo cuando empezamos caminar y luego volver a estar inactivo cuando dejamos de caminar. Entonces lo que tenemos que hacer es que necesitamos agregar un parámetro aquí y hay un montón de formas en las que podemos hacer esto, pero solo voy a agregar una bola Bolean verdadero o falso y llamar a esto caminar y click derecho, hacer transición ahí Y esencialmente, si hago clic en esta transición, puedo especificar la condición que se va a mover de aquí a aquí, y la condición es que el parámetro walk aquí es verdadero, por defecto es false, así que no va a hacer esa transición a menos que de alguna manera se dicked entonces podemos hacer una transición hacia atrás, hacer transición, haga clic Haga clic en esa transición. Agrega una condición, y volverá cuando caminar se vuelva falso. Así que voy a ir a caminar se hace verdad, golpear por aquí, caminar se vuelve falso, volvemos a golpear hacia aquí. Entonces así es como funciona eso. Entonces veamos si podemos ver esto funcionando en la vida real. El Zoom en el juego uno de aquí no es muy agradable, pero deberíamos casi poder ver lo que está pasando. Si le pego play, No está haciendo nada. Golpeé caminar. Y ojalá, solo se pueda ver que ahora estamos caminando. Y entonces si desmarco esta caminata, volvemos a no caminar Y puedes ver las transiciones un poco lentas y lentas Déjame inhabilitar al enemigo por el momento. Vamos a intentarlo de nuevo. Así que haga clic en caminar, y se puede ver que no pasa del todo de inmediato y luego si me marca caminar. De nuevo, como que hace una pausa. Y eso es porque si hago clic en éste, tenemos este tipo de tiempo de salida y aquí tenemos una duración de transición. Así que voy a enterrar esto y voy a poner eso a cero, y entonces lo que esto significa es que esa transición va a suceder de inmediato. Y voy a hacer lo mismo de esta manera. Tiene tiempo de salida, transición cero. Ahí vas. Y así esto será un chasquido inmediato entre los dos. Un poco como nuestro eje get y get axis raw. Solo queremos que las cosas sean ágil en un juego arcade. Así que bang. Ahí vas. Bang. Banco. Ahora bien, parece que todavía hay una pausa aquí, y eso es solo porque el primer fotograma de la animación de caminata sigue siendo el tipo de estar parado en su lugar. Para que podamos intercambiarlos, lo que hará que las cosas se vean aún más ágil No es 100% necesario, pero si hacemos clic en Caminar, se puede ver que este es el de pie en el lugar uno, y este es el que camina. Entonces lo que podemos hacer es simplemente mover eso por aquí por el momento, mover eso a aquí, mover eso de nuevo a allá, y simplemente cambiarlos esencialmente. Así que volvamos aquí al juego. Inactiva. Ahí tienes, S Inmediatamente cambiando entre los dos muy rápido ahora. Y creo que eso es bastante llamado para un juego arcade. Derecha. Ahora, obviamente, no podemos, ya sabes, estar haciendo esto mientras jugamos el juego. No podemos estar caminando así, y luego estamos caminando ahora. Vamos a hacer clic en esto, y ahora estamos caminando. Y ahora paramos. Tenemos que hacerlo programáticamente, ¿verdad? Entonces hagámoslo en nuestro guión. Bien, hemos abierto un guión de jugador. Y vamos a deshacernos de estos comentarios, y no es necesario que nos digan qué hace la actualización. Sabemos lo que hace eso. Bien, entonces necesitamos una referencia al animador porque este es el animador de aquí Puedes ver el panel aquí. Se llama animador. Este es el animador, y queremos llegar a esta cosa del paseo Entonces tiene sentido que caminar esté dentro del animador y necesitamos una referencia al mismo. Campo tan serializado. Un. Asegúrate de que no sea animación, es animador, así Animador de subrayado. Entonces podemos bajar aquí y podemos hacer subrayado animador Recuerda, este parámetro aquí es un booleano, set ball, y se llama walk Y queremos caminar cada vez, nuestra entrada de usuario es un poco distinta de cero. Entonces, ¿cómo averiguamos si tenemos entrada del usuario? Bueno, como que lo hemos visto antes. Podemos usar magnitud porque la magnitud será cero. Si nos quedamos quietos y no será cero, mayor que cero, si nos estamos moviendo. Si tenemos una entrada de usuario, queremos movernos. Entonces esto va a ser agradable y ágil porque lo hemos hecho en actualización Ahora, podemos dejarlo así. Pero si quieres hacer un poco de optimización, podemos usar algo llamado magnitud cuadrada. Porque eso hace lo mismo. Quiero decir, la magnitud cuadrada va a ser cero si todavía estamos, y va a ser algún valor si no lo estamos. Aún así, va a ser un valor mayor que cero. Pero la magnitud cuadrada está un poco más optimizada porque magnitud, hay que tomar una raíz cuadrada de un número. Pero con magnitud cuadrada, no estamos teniendo que tomar la raíz cuadrada. Entonces es solo un poco más rápido, solo una ligera optimización, no es gran cosa. Entonces volvamos aquí. Entonces, como saben, nuestro animador en realidad está en nuestro ratón, no en el jugador Así que queremos arrastrar nuestro objeto de juego hacia allí así. Y luego el animador en el objeto del juego ahora está asignado a nuestro guión Veamos cómo se ve eso. Entonces ese es un buen comienzo. Estamos quietos. Ahora nos mudamos. Y estamos caminando un poco difícil de ver, en realidad. Vamos a acercar este. Y justo a punto de ver que nuestras piernas se mueven ahí, pusieron pies muy cortos muy pequeños. Bien, genial. Entonces eso es genial, pero estamos especie de luna caminando hacia atrás aquí, lo cual no es lo ideal. Ahora, la solución fácil para eso está dentro de nuestro renderer de sprites en nuestro mouse Tenemos un pequeño volteo aquí, lo cual es bastante práctico, así que simplemente podemos darle la vuelta al mouse así usando eso. Esto es flip x. Hagámoslo en código. Por supuesto, necesitamos llegar a nuestro renderer de sprites, que en realidad está en nuestro mouse Para que podamos hacer trampa. ¿Es trampa? No lo sé, pero podemos hacer algo así. Es igual a. Por supuesto, es recordar que no está en el objeto del juego del jugador. Está en el objeto del juego del ratón que está debajo de aquí, pero sí tenemos animador que hemos asignado, que está en el ratón Así que en realidad podemos hacer esto. Y tenemos a nuestro renderer de sprites en nuestro mouse. Y luego solo queremos voltear x, recuerda, y queremos establecer esto en true cuando nuestro subrayado usuario input dot x left and right es menor que cero Entonces nos estamos moviendo hacia la izquierda, así que hemos visto, ¿no tenemos antes que es menos uno cuando vamos a la izquierda Entonces eso debería hacer el truco. Echemos un vistazo. Ahí vas. Izquierda e izquierda, va a la derecha, y va a la derecha. La única otra mejora que podemos hacer para esto es en cuanto libere, vuelve a verse bien. Y hay una solución fácil para eso. Porque en ti como que quieres recordar, ¿verdad? Vamos a la izquierda, paramos. Seguimos buscando a la izquierda, de verdad. Es un poco raro chasquear siempre para estar buscando bien. Una solución fácil para eso es simplemente decir subrayado la entrada del usuario x es igual a cero, retorno No ejecutamos el código de abajo si no nos estamos moviendo. Este código aquí solo lo hará alguna vez si realmente nos estamos moviendo, que es lo que realmente queremos. Voy perfecto. 17. Laberintos para reunir: Bien, lo estamos haciendo bastante bien. De hecho voy a cambiar por donde empieza el jugador porque el jugador quiere empezar por aquí. Bien. Y luego vamos a mover nuestro gráfico por ahí, para que no parezca que estamos caminando hacia la pared aquí. Veamos en este momento porque nuestro círculo está un poco más alto en nuestro cuerpo. Estamos haciendo eso. Así que podemos simplemente mover nuestro personaje hacia arriba, hacer eso, y luego creo que eso es mejor. Sí, creo que eso funciona bien. Encontremos que nuestra cabeza está por encima de la pared ahí porque eso es Sí, está totalmente bien. Entonces lo que encontrarás es que la unidad se olvida, cualquier cambio que hagas Durante el modo de juego, cuando realmente estés jugando al juego, haz los cambios que se te olvida Entonces esta y va a volver a cero. Entonces solo quiero copiar ese valor. Y cuando presiono stop, como pueden ver, va a volver a cero, y luego lo voy a pegar nuevo solo una manera rápida y fácil de hacerlo. Y entonces solo movamos eso abajo para allá. Bien. Centrarlo un poco. Y ese es un buen punto de partida, creo, porque el enemigo va a estar en la esquina viniendo por nosotros. Ahora, creo que es un momento genial para agregar algunos frunces. Cosas que estamos dando vueltas, recogiendo en el laberinto, tratando de conseguir antes de que el enemigo llegue a nosotros y nos mate. Y si no podemos conseguir todos los Gathers, entonces hemos ganado el laberinto Entonces hagámoslo ahora. Permítanme agregar en algunas imágenes de recopilación. Así que voy a arrastrar y soltar este pequeño trozo de queso fresco. Aquí, sólo voy a llamar a esta bola de recolección. Podría mantenerlo juntando pelotas. Entonces entonces voy a arrastrar aquí este trozo de queso. Aumentemos el pedido para que estemos en la cima. A lo mejor queremos estar por debajo de nuestro personaje aunque. Entonces alrededor de dos. Sí. Y está un poco en el lado grande, así que cambiemos nuestra unidad de píxeles b aquí a dos, cinco, seis, aplique. Y eso es lo correcto, en realidad. Eso me gusta. Eso es bueno. Y si pongo ese queso aquí, y sólo voy a llamar así a esto se reúnen. Entonces, claro, lo que quieres es cuando jugamos en el juego, corriendo por ahí, y si caminamos sobre el queso, lo recogemos. Entonces necesitamos un guión llamado Gacrit eso. Abre eso. Así que vamos a deshacernos de este código de aquí. Bien. Y si ponemos un disparador en este objeto de juego recopilable al que se adjunta este script, entonces hay un poco de código que podemos poner aquí que se llamará automáticamente Esto es en dos D. Vamos a hacer esto bien. Si lo deletreamos erróneamente, entonces no se le llamará, y si obtenemos mal el parámetro, no se llamará Vamos a hacerlo bien en el gatillo dos D. Vamos a cerrar la sesión de algo en nuestra consola. Bien. Para que podamos ver que algo sucede. Así lo hice con y luego solo podemos mostrar el nombre del objeto del juego con el que acabamos de colisionar Entonces este colisionador dos D es en realidad el colisionador en los otros objetos del juego Esto estará en nuestro queso y este colisionador dos D en realidad será ojalá en nuestro jugador En realidad es el único jugador que tiene colisionadores que se mueven por el mapa, el M. Así que eso debería hacer el truco Ahora bien, si tocara esto ahora, no haría nada porque no tenemos , antes que nada, no hemos arrastrado y dejado caer nuestro guión ahí, así que hagámoslo Pero incluso ahora, no pasaría nada porque aquí no tenemos un detonador. Entonces, ¿a qué me refiero con un disparador? Bueno, déjame mostrarte. Entonces si agrego componente circle collider dos D. Ahora bien, esto no es un disparador Tenemos que marcar esta casilla aquí. Quiero decir, si ahora choco con avión, ya ves, sólo vamos a chocar con nuestro queso porque ese colisionador es un colisionador Pero los colisionadores se pueden convertir en disparadores con solo una marca de casilla, y de repente esto ahora es un disparador Ahora cuando le pego a play, Ahí tienes. Chocó con el jugador. Eso es exactamente lo que querías. Entonces el jugador ha entrado en el gatillo que está en nuestra bola Gatherar y disparó ese pedacito de código aquí. Esto se llama automáticamente siempre y cuando tengamos un disparador en nuestro objeto de juego. Impresionante. Entonces, vamos a guardar eso. Y qué queremos hacer cuando hemos chocado con nuestro queso Bueno, queremos que el queso desaparezca. Hacemos que parezca que hemos recogido ese queso. Entonces eso es realmente bastante fácil de hacer. Podemos simplemente hacer objeto de juego porque estamos en nuestro queso. Así que el objeto de juego es el objeto de juego de queso, el objeto de juego de recolección. Así que podemos hacer objeto de juego, establecer active false. Compruébalo. Ahí vas. Recogimos nuestro queso. Bonito. Ahora, por supuesto, queremos tener una partitura. Y nuestra puntuación será la cantidad de trozos de queso que hemos recogido antes de que nos maten el enemigo. Entonces, para que nuestra interfaz de usuario, nuestra interfaz de usuario sepa que hemos recogido un Gain le. Necesitamos agregar un poco más de código aquí, en realidad, listo para nuestra interfaz de usuario, porque no sé si ya has escrito nuestra UI, pero preparemos este código para eso. Entonces lo que podemos hacer es que podemos subir aquí y hacer una estática pública y explicaré qué es una estática en un segundo. Acción. Y vamos a hacer tabulación ahí para que su acción sea parte del espacio de nombres del sistema. Así que eso se agregó automáticamente si haces tab. Si no se agrega automáticamente, entonces solo agrega puedes agregar terminar aquí, solo di usando sistema. Pero si haces tabulación, como acabo de hacer, debería agregarse automáticamente. Y entonces voy a hacer voy a llamar a esta acción sobre reunidos. Entonces lo que puedo hacer aquí abajo es que puedo hacer reunidos y te perdonarían por solo hacer invocar y así Esencialmente, lo que eso hace es que invoca la acción, y algún otro objeto del juego puede escuchar esta acción en particular, y cuando sucede, esencialmente puede ejecutar un método Pero el problema de solo hacer una invocación de punto, vamos a obtener un error en este punto Déjame mostrarte una obra de teatro. Y simplemente dice que no hay excepción de referencia. La referencia de objeto no está establecida. Y eso es porque aún no tenemos ninguna interfaz de usuario escuchando esto. Y así se trata de invocar algo que no está ahí. Así que podemos dejar eso en su lugar porque eventualmente configuraremos alguna interfaz de usuario para escuchar. Pero permitimos que ocurra un error solo porque no hay alguna interfaz de usuario escuchando esto. Entonces lo que podemos hacer es simplemente hacer un signo de interrogación ahí. Y ese signo de interrogación es básicamente tipo de cheques para ver si on recopilados es nulo, y si es nulo, entonces no va a hacer la invocación Pero si no es nulo, entonces va a hacer una invocación Entonces esa es como una manera muy agradable y fácil de deshacerse de ese error, si lo hago ahora, no obtendrás una excepción de referencia nula porque no va a hacer la invocación Pero lo hará cuando hayamos enganchado las cosas. Ahora, voy a cambiar ese código en un minuto, pero hacerlo un poco mejor. Pero vamos a crear un poco de interfaz de usuario para nuestro puntaje, y solo va a ser un número en la esquina superior derecha. Entonces hagámoslo ahora, haga clic derecho, vaya a, y voy a crear un panel. Y si hago doble clic en ese panel, se puede ver que está cubriendo toda nuestra cámara. No quiero eso. Así que vamos a hacer clic aquí. Y si mantengo presionado el turno, dice También establecer la opción de pivote o alt Posición de ajuste automático. Y entonces si hago arriba a la derecha así, va a anclar este panel a la parte superior derecha de aquí, y entonces puedo establecer este ancho desde esta altura hasta lo que quiera. 100 por 150 tal vez jugar un poco alrededor de estos números. 200. Y tenemos un panel en la esquina superior derecha donde podemos, clic derecho en la interfaz de usuario texto malla de texto P. Vamos a agregar algo de texto a este panel. Debido a que esta es la primera vez que usas Text mesh P, va a llegar a este pequeño diálogo, y solo queremos importar aquí y solo queremos importar elementos esenciales de la malla de texto pro, lo que permitirá que Texts P funcione. Y todo text mesh pro es realmente solo texto en nuestra interfaz de usuario. Es un sistema algo poderoso para mostrar texto en nuestra interfaz de usuario, y vamos a expandirlo para llenar todo nuestro panel. Así que de nuevo, la opción shift o alt, y vamos a hacer clic en esta de aquí, que esencialmente consigue que se extienda por todo nuestro panel, y luego puedo bajar aquí y centrar el texto tanto en la horizontal como en la vertical, así que está en el medio de nuestro panel, y solo voy a escribir uno, dos, tres aquí solo para demostrar que eso va a mostrar algunos una puntuación en la esquina superior derecha. Ahora, eso está todo bien y bien. Pero aquí hay un pequeño problema en que si cambio la resolución de mi juego, como pueden ver, eso se ha ido bastante pequeño. Entonces si lo hago aún más, decir, cuatro k, decir, es ilegible Nuestro juego se ve bien, pero la interfaz de usuario no es genial. Entonces puedes hacer algo para arreglar esto. No hay problema. Entonces, si entramos en click en Canvas y Canvas scaler no queremos un tamaño de píxel constante porque eso está causando el problema Queremos escalar con nuestro tamaño de pantalla. Haga clic en esto. Lo que tiendo a hacer es mover esto al medio. Tiene un equilibrio entre el escalado para el ancho y el escalado para la altura. Hagamos eso 0.5 800 por 600, bien. Ahora bien, si cambio esta resolución, se puede ver que nuestra interfaz de usuario no está cambiando en absoluto. Eso lo arregla bastante bien. Bien. Entonces esto ahora se ve un poco en el lado grande, así que vamos a ajustar esto. Yo como que lo quiero. Um. Probablemente nunca voy a ser un número enorme aquí. Vamos a hacer algo así. Entonces está metida en la esquina superior, así. Y realmente no me gusta tener antecedentes en este panel, así que sólo voy a querer marcar eso. Ahí vas. A lo mejor sólo pueda hacer que el texto sea un poquito más pequeño. Ven aquí, talla frontal. 32. Sí, eso se ve bastante bien. Tal vez 30. Ahí vas. Fresco. Eso es bueno. Pero, ¿cómo cambiamos realmente este texto? Nombremos este texto. Puntuación. Sólo voy a nombrar este panel. Puntajes así. Entonces necesitamos realmente un guión que nos permita obtener este texto para poder cambiarlo. Así que voy a crear un objeto de juego vacío llamado UI. Es restablecer la posición. Y voy a añadir un guión. Este es un juego simple, así que puedo llamar a una interfaz de usuario de script, y manejará toda la interfaz de usuario en nuestro juego. Pero a menudo, si tienes una interfaz de usuario muy compleja, posible que quieras dividir esta funcionalidad en muchos pequeños scripts de interfaz de usuario, pero este es un juego bastante básico, así que lo arrastro ahí, así que. Vamos a abrir ese script de interfaz de usuario. Vamos a deshacernos de todo esto. Bien. Hagamos un campo serializado. Texto privado me pro, dame. Ese es el que queremos. Si pulso tabulador, debería agregar el uso de TM P. Y voy a llamar a esta partitura de texto. Y luego al despertar solo para demostrar que esto está funcionando, solo quiero poner el texto a cero. Ej. Bien. Bueno, volvamos aquí, y tenemos que conectar esto. Vamos a hacer clic en UI, y puedes ver que tenemos este campo aquí. Todo lo que tenemos que hacer es arrastrar y soltar nuestro texto allí. Y ya lo hemos enganchado. Y si le pego a play, solo salvaremos. Si le pego a play, deberíamos ver esto ir a cero porque en una estela, estamos en ese pedacito de código que hace eso, y ahí tienes. Pero claro, queremos incrementar eso cuando recogemos un poco de queso Ahora, realmente no deberíamos estar haciendo nada como incrementar y rastrear puntajes y cosas en nuestra interfaz Nuestra interfaz de usuario debe ser bastante doblada. No deberías estar rastreando datos, al menos no bits fundamentales de datos. Entonces, ¿dónde deberíamos poner la cantidad de queso que hemos reunido? Bueno, en realidad podemos usar Gatherle dije que te explicaría la estática y no lo hice Entonces déjame arreglarlo ahora. Así que vamos a crear otra estática. Entonces voy a llamar a esta estática privada en reunidos. Hagamos un pequeño comentario aquí, que es sobre los recolectores que se están reuniendo Hasta el momento. Ahora bien, esto puede parecer un poco raro porque esto está en un objeto de juego. Y claro, podríamos tener juego o, muchos trozos de queso que tienen el guión de reunir en ellos. Entonces inicialmente, permítanme simplemente crear otro trozo de queso entonces. Entonces, si duplico esto, y muevo esto a escuchar Entonces tenemos dos trozos de queso, y ambos tienen este guión recopilable encendido Y entonces puede parecer raro que tengamos esto reunido aquí. No se sostiene eso en cada objeto de juego, y eso va a ser muy confuso porque sabes que ese trozo de queso se ha reunido de tres y ese trozo de queso tiene un rejuntado de cuatro no tiene ningún sentido, ¿verdad? Bueno, en realidad, de eso se trata la estática. Estático significa que no es la instancia de esta clase. Eso tiene este valor en ello. Es la clase misma. Y solo tenemos a la única clase reunida. Es posible que tengamos múltiples instancias de recopilación. Es posible que tengas múltiples quesos que tengan Gaerle en él. Pero la clase misma sólo existe una vez. Y así podemos decir, bueno, en la clase misma, en esa instancia de la clase, bueno, ni siquiera es bueno llamarla instancia porque no es solo en la clase misma, vamos a sostener una variable llamada recopilada. Y así solo hay una versión de esto reunido, y así podemos usar eso para rastrear cuántos quesos hemos reunido Y podemos hacerlo muy fácilmente. Podemos bajar aquí y podemos hacer reunidos más D. Cada vez que recojas un trozo de queso, esta versión, esta variable va a ser incrementada Y el único problema es que hemos hecho esto privado. Siempre es bueno tratar de mantener tantas cosas privadas como sea posible porque tal vez solo Gatherable realmente debería actualizar esto reunido Pero la interfaz de usuario necesita ver cuánto se ha reunido. Pero podemos enviarla en realidad. Podemos enviarlo como parte de esta acción. Entonces podemos poner estos divertidos corchetes aquí con un int ahí. Y ahora en adelante reunido espera tener un int enviado junto con él. Para que podamos mandar reunidos cuando invoquemos esta acción. Entonces esta acción espera un int enviado cuando se invoca, y así eso es exactamente lo que podemos hacer Entonces, ¿cómo escuchamos esta acción y sabemos cuándo la hemos invocado Hagámoslo a continuación. Activar. Entonces enable es algo que se llama en un objeto de juego cuando está habilitado. La mayoría de los objetos del juego están habilitados de todos modos, generalmente, a menos que específicamente hayas ingresado al editor y lo hayas deshabilitado. Entonces esto se llama en la interfaz de usuario porque ese objeto de juego de UI nunca va a ser no habilitado. No por el nuestro de todos modos, generalmente. Entonces, activar es un buen momento para configurar cualquier acción que estemos escuchando. Entonces podemos hacer algo como reunir bola en reunidos y agregamos lo que llamamos un oyente a esto sobre la acción reunida Y un oyente es solo el método, de verdad. Es solo un método al que se llama cuando se invoca esta acción Para que podamos manejar reunidos. Y entonces puedo hacer aquí manija del vacío reunida. Ahora, hemos enviado un entero largo, si recuerdas correctamente. Por lo que esto obtendrá cuánto se ha reunido automáticamente enviado a la misma. Manejar reunido obtiene este campo en automáticamente podemos simplemente hacer el texto de la partitura es igual a recopilada y eso es una en. Necesitamos convertirlo en una cadena, para que podamos asignarlo a nuestro texto. Caja así. Y lo único que queremos hacer, solo para estar en el lado seguro es en deshabilitar, siempre debemos quitarnos a nuestros oyentes Así que quita nuestro oyente que hemos agregado en capaz. Y la forma en que lo hacemos es que hacemos un menos igual a eso. Entonces veamos cómo funciona eso. Puntuación cero. Ahora es uno. Ahora son dos. Impresionante. Vamos a repasar exactamente lo que hicimos. Aquí configuramos esta acción que vamos a invocar cada vez que recojamos un queso Cuando lo invoquemos, vamos a enviar sobre cuánto se ha reunido hasta ahora, y estamos rastreando esa recolección dentro, pero como un int estático Entonces solo hay una versión de la misma, por así decirlo. Sólo hay uno de estos enteros volando por ahí. Y así enviamos eso a lo largo Porque acabamos de incrementarlo, reunido más más eso es un incremento Eso es exactamente lo mismo que escribir reunidos iguales reunidos más uno, exactamente lo mismo que eso solo un poco más netter para hacerlo así Y si es cero, ahora después de esta línea, es una, hemos llamado a reunidos, hemos invocado a reunidos y le enviamos uno ¿Qué es lo que escucha para esto? Bueno, la UI, UI lo está escuchando. Es decir, Oh, quiero saber cuándo se ha reunido algo. Y la belleza de esto es que significa que la UI y Gatheran Bo están muy separados entre sí. Gaula Bo no tiene idea de UI. Y así no debería, ya sabes, Gathering Wable debería estar haciendo lo suyo, y no debería importarle el código de la interfaz Deberíamos poder eliminar este código, reescribirlo porque lo que encontrarás en juegos es que la interfaz de usuario, ya sabes, todos los elementos de la interfaz de usuario tienden a cambiarse mucho, ya sabes, cuando recoges algo en este momento es simple, solo estamos incrementando una puntuación Pero, ¿quién sabe? Sabes, tal vez queramos hacer estallar algunos fuegos artificiales, quizás queramos hacer sonar un sonido. Quizá queramos saber, hacer un efecto de partícula. Lo que sea, y así la interfaz de usuario siempre tiende a complicarse más. Y al separar esto, al tener este Gatherle simplemente disparar una acción que cualquier otra parte de nuestro código pueda escuchar significa que Gatherle no necesita saber sobre fuegos artificiales y sonidos no necesita saber sobre la interfaz de usuario, no necesita saber que hay una partitura en la pantalla ni No le importa nada de eso. Es solo decir, Oh, ya sabes, soy un pedazo de queso. Me han recogido. Cualquiera que quiera saberlo, ya sabes, esta es la cantidad de queso que se ha reunido hasta ahora y este trozo de queso acaba de ser recogido. Eso es lo que dice. Y a todos los demás, por el momento, es solo esta pieza de UI la que le importa. Pero solo, ya sabes, si lo hiciéramos, como, un gestor de sonido, el gestor de sonido pudiera escuchar podría hacer exactamente esto, podría reunirse y luego tocar algún sonido reunido. Y entonces eso automágicamente tipo de trabajo. Entonces es muy agradable. Esto en realidad se llama un patrón observador y un patrón de diseño de observador, y es bastante poderoso y definitivamente debería ser la forma que escribes tus UI Si quieres tener una interfaz de usuario muy bien separada del resto de tu juego. Porque en realidad, cuando tu interfaz de usuario se vuelve cada vez más complicada, a veces es realmente útil tener toda la interfaz de usuario, toda tu interfaz de usuario dentro de una escena por sí sola, y solo hay una escena que contiene toda tu interfaz de usuario. Y así tener este tipo de acoplamiento suelto entre tu juego y la interfaz de usuario es extremadamente útil en ese momento porque la interfaz de usuario está en su propia escena que realmente no puede llegar muy fácilmente a nada más. Y así este patrón de observadores significa que solo puede observar cosas como en recopiladas y actualizarse partir de escuchar estas acciones que se están disparando. 18. Laberinto Game Over: Bien. Lo siguiente que tenemos que hacer es crear un juego sobre pantalla. Así que vamos a UI y Panel. Ir a nombrar este juego de panel encima. Y queremos algo de texto aquí. Entonces la interfaz de usuario de malla de texto P y podemos Veamos juego. Eso es centro y centro llama a este juego de texto Bien. Hagamos este panel. Vamos a hacer clic en este cuadro aquí y conjunto de cuidados, mantengamos presionados el turno y la Opción o Alt y solo centremos esto. Y entonces podemos volver al ancho, y yo solo haré 200200 que podría ser suficiente A ver. Bien. Entonces agreguemos un botón. Así que hagamos clic derecho en nuestro juego sobre el panel. Ven a, yo y botón de malla de texto P. Llamemos a esto. Bueno, pongamos el texto en el botón para decir inicio tan simple como eso. Anclemos este botón a la parte inferior del panel. Así que cambia y opta de nuevo y haz clic en este botón aquí. Hagamos este botón un poco más alto, algo así. Vamos a deshacernos de la imagen de aquí, así que solo la deshabilitaré. De hecho, cambiemos este texto para que sea mayúscula que vamos a estirar este texto al ancho de nuestro panel, para que podamos simplemente aumentar el ancho hasta que obtengamos algo así. Creo que está bien. Bien. Ahora bien, si quieres ver una especie de mejores artilugios en la interfaz de usuario para cambiar el tamaño de las cosas en lugar de, quiero decir, solo he estado haciendo esto, cual es agradable y fácil Pero si quieres ver un poco más lo que está pasando, en realidad puedes este artilugio aquí, que es T. Y esto te muestra que el tamaño de los elementos de la interfaz de usuario son un poco más claros Y estas pequeñas flechas de aquí, que muestran ya sabes, si está configurado para estirarse con el componente o no. Y, ya sabes, cuando están aquí abajo así, demuestra que está anclado al fondo de nuestro panel Entonces eso puede ser muy útil porque, ya sabes, podemos simplemente cambiar el tamaño del panel y obtienes los elementos para moverte con eso Es bastante útil para diseñar las cosas. Hagámoslo así. Y creo que eso debería hacer. Vamos a cambiar el nombre de este botón reiniciar. Y agreguemos a UI public void restart game. Y lo que podemos hacer para reiniciar el juego, la forma más fácil porque es bastante difícil restablecerlo todo. Pero la forma más fácil de restablecer todo es simplemente recargar la escena Esa es una manera rápida y fácil de hacer esto, así que podemos hacer scene manager. Bien. Escena de carga de puntos. Y porque sólo tienes una escena. De hecho, podemos usar un cero aquí, pero necesitamos asegurarnos de que en la configuración de compilación, solo tenemos una escena listada ahí. Así que vamos a hacer eso ahora. Entonces, si voy a archivar y construir configuraciones, y esa es la escena equivocada. Esa no es nuestra escena. Así que seleccionemos eso y solo presionemos Eliminar y luego agreguemos escenas abiertas, que solo hay una escena, y es nuestra escena principal. Entonces esto es cuando se habla de escena de carga cero. Este es el cero. Escena indexada aquí, y así eso cargará esa escena en particular Y solo necesitamos enganchar ese botón. Entonces si hago clic en el botón, cuando hacemos clic, va a ejecutar lo que sea que esté aquí y lo que podamos hacer, haga clic en esto más, entonces podemos arrastrar esto aquí. Haga clic aquí y elija UI restart game. Guarde eso. Y cuando presionemos ese botón, volverá a cargar la escena Vamos a ver que eso sucede. Entonces digamos que muévete y recoja algunas cosas, y luego si presiono el reinicio, en realidad volverá a cargar todo Ahora, aquí hay un efecto secundario interesante, que es que esto no reseteó de alguna manera. Entonces este número parece restablecerse ahí porque estamos configurando el texto manualmente a cero. Pero en realidad, cuando luego recogemos un poco de queso, lo que está pasando es que esto reunido aquí no se está reiniciando. Entonces hay una solución fácil para eso. Y la razón por la que no se está restableciendo al cargar la escena es porque cargar la escena no está teniendo un efecto en esta clase. Estas variables de clase, las variables estáticas no se ven afectadas por las cargas de escena, y eso en realidad puede ser muy potente. Es muy útil para mantener el estado en múltiples escenas de carga y descarga. Se puede mantener el estado en una variable estática, y no se perderá. Entonces puede ser muy poderoso, pero en este caso en particular, es un poco doloroso porque es mantener el estado, mantener el valor de ese número y no restablecerlo Pero en realidad es una solución muy fácil porque podemos simplemente al despertar de estos objetos del juego. Recuerda, podría ser múltiple, así que esto en realidad se restablecerá reunido varias veces, pero eso no nos importa demasiado porque solo sucede al inicio del juego y se reunieron no importa cuántas veces pongamos reunidos a cero. Viviremos porque una vez que empiece el juego, se incrementará y todo está bien Bien. Es un poco basura que nuestro juego sobre la pantalla se muestre incluso antes de que hayamos comenzado Así que vamos a arreglarlo ahora. Voy a agregar campo aquí. Vamos a llamar a estos paneles de juego como una referencia a nuestro juego sobre panel porque básicamente queremos ocultarlo. Inicialmente, de todos modos, en despierto activo falso. Mientras estamos aquí, ¿podríamos también establecer una referencia a nuestro juego sobre texto? Porque probablemente vamos a querer cambiar esto dependiendo de si morimos por el enemigo o si ganamos el juego. Entonces por el momento está diciendo juego por aquí, pero vamos a querer cambiar esto a lo que sea que gane gane una cena de pollo o tú ganas o lo que sea, si ganamos el juego. Ahora bien, ¿cómo ganamos el juego? ¿Ganaremos el juego recolectando todos los recolectores? Ahora, nosotros Nadie has recogido un Grow ble porque nos hemos suscrito a la acción reunida aquí, y que las llamadas manejan reunidas Y obtendremos el número de bolas recolectadas. Pero en realidad no sabemos cuál es el número máximo de bolas recolectadas en nuestro nivel. Tengo dos quesos en este momento, pero probablemente voy a tirar algunos más por todo el nivel Y claro, podría guardarlo como un campo aquí con el que se comunique. Pero seamos un poco más inteligentes al respecto. No tengo que preocuparme demasiado por ello una vez que esté configurado. Entonces lo que puedo hacer aquí es que actualizaré el puntaje y luego voy a resolver Es este el cubrible final Entonces, ¿cómo lo soluciono? Total de bolas de Recoge a la izquierda. Entonces esencialmente, cuando eso llegue a cero, quiero mostrar el juego sobre pantalla y cambiar el texto para que ganes. Pero, ¿cómo averiguo cuántos Gatherlls quedan? Bueno, en realidad, tenemos esta cosa llamada buscar Objetos por tipo. Yo sí puedo reunirnos aquí. Y en realidad queremos esta segunda opción, que toma si solo quiero encontrar los objetos activos o inactivos. Entonces esto es encontrar por Buscar objetos inactivos. Bueno, quiero excluirlos porque habré hecho inactivos todos los quesos cuando haya ganado el juego Entonces eso es todo. Entonces tengo que hacer este modo de ordenación. Honestamente, no me importa el tipo de estos frunces. Y entonces eso me hace retroceder una matriz de todas las recopilaciones que están activas Y solo necesito encontrar la longitud de esa matriz. Y déjame moverlo aquí arriba y estirarlo a través para que puedas ver todo ese código. Y entonces déjame repasar eso otra vez. Entonces es encontrar objetos de por tipo, y es solo esencialmente los objetos del juego los que tienen el script de recopilar en un nivel muy básico, eso es lo que está encontrando. Pero estoy excluyendo cualquier objeto de juego inactivo. Y como viste cuando recogemos un queso, básicamente estamos poniendo ese queso a inactivo. Y así, una vez que hayas recogido el último queso, en realidad solo serán recolectados inactivos en nuestra escena Y así, si excluimos a esos inactivos, esencialmente tendremos cero regresando de aquí. Déjame depurar esto para que podamos probar que esto está funcionando. Entonces se fueron capables. Izquierda. Vamos a deletrear bien. Ahí vas. Y entonces si el total de gavles que queda es igual a cero Entonces, ¿qué quieres hacer? Queremos configurar nuestro juego de texto para que ganes. Y queremos mostrar el juego sobre panel. Eso es cierto. Bien. A ver si eso funciona. Primero, tenemos que conectarlos, así que juego sobre panel Juego sobre panel. texto Juego de texto terminado. Guarde eso Gas dejó uno. Queda uno. Ahora tal vez no deberíamos poder deambular después de haber ganado Así que arreglemos eso, pero eso está funcionando muy bien, en realidad. Así que vamos a obtener una referencia de nuestro jugador aquí. Y cuando ganemos. Ahí vas. Nos pondremos en falso. Porque vamos a cargar la escena cuando comencemos el juego y eso simplemente restablecerá todo. Jugador. Bien. Ahí vas. Fresco. Consiguió un estado de victoria, y para reiniciar solo ganamos ganar ganar porque no tenemos un enemigo que nos detenga. Aún no lo he hecho muy difícil. Bien, volvamos a poner al enemigo en el juego. Entonces la idea ahora es que El enemigo nos coja y debería matarnos. Sí. Y se acabó el juego y definitivamente no hemos ganado. Así que vamos a arreglar eso ahora. Bien, abramos nuestro guión de IA enemiga haciendo doble clic en él. Y estamos siendo atacados por el enemigo cuando estamos al alcance de ataque. Y aquí realmente queremos decir si subrayamos agente. La distancia restante es inferior a 0.5 f. entonces vamos a aceptar el hecho que el enemigo nos ha alcanzado y nos ha matado. Entonces quieres hacer algo aquí. ¿Qué aspecto tiene ese algo? Bueno, volvamos a invocar una acción. Vamos a crear una acción estática pública, presione la pestaña para agregar automáticamente usando el sistema. Y entonces vamos a llamar a esta acción sobre jugador atacado. Y así solo queremos invocar esto cuando nos ataquen. Pongamos ese signo de interrogación si acaso no lo hemos conectado por alguna razón. Entonces eso debería funcionar muy bien. Y entonces sólo queremos encargarnos de eso aquí. Entonces podemos hacer algo como enemigo más jugador igual. Atacado. Tomemos esa copia. Pero recuerda eliminar el método del oyente, y luego queremos manejar al jugador atacado, configurar un método que se llame ¿Y qué queremos hacer? Quiero hacer bastante similar a esto. Queremos mostrar el juego sobre panel y poner al jugador inactivo. Entonces podríamos cambiar este texto explícitamente y simplemente decir que pierdes, pero en realidad dice game over por defecto. Vamos a tener que hacer eso. Veamos cómo se ve eso. Se acabó el juego para intentar moverte. No se puede hacer clic donde reiniciar. Bien. Oh, casi una antes de que el enemigo me atrapara. Definitivamente uno ahí. Ahí vamos. Entonces creo que eso funciona bastante bien. 19. Prefabricados de laberintos: Bien, así que hagamos un poco de orden final. Así que vamos a deshacernos de ese juego a través del panel porque es algo así como en el camino. Entonces ese es el que configuramos activo o inactivo. Entonces podemos con seguridad solo establecer eso inactivo y eso seguirá funcionando bien. Reúne las bolas. Ahora bien, no lo sé con certeza, pero supongo que podemos agregar algo más de funcionalidad a estos reúnen ables. Y si clonar una carga de ellos si duplico una carga completa de ellos y los coloco alrededor del laberinto, como que quiero poder cambiarlos y cambiarlos a todos, y hay algo llamado prefab, lo que permitirá que eso suceda Entonces si en realidad creo una carpeta, prefabs, Bien. Con en nuestra carpeta Maze. Simplemente eliminemos esta bola de recolección por el momento. Y luego si arrastro esta bola de recolección a la ventana de nuestro proyecto y la coloco en cualquier lugar dentro de la ventana del proyecto, creará un prefabricado Simplemente pasaba que lo estaba tirando en esta carpeta de prefabs, pero no tiene que estar en ninguna carpeta en particular Solo el hecho de que lo hayas arrastrado de la jerarquía a la ventana del proyecto es suficiente para crear un prefab Y solo dice aquí Gale prefab asset. Y bien. Déjame explicarte qué hace eso. Entonces, lo que puedes hacer es hacer doble clic en prefab y editarlo solo el propio prefab Y los prefabricados son útiles porque puedes Ya sabes, abrir decir otra escena, crear otra escena, y luego tienes este gaffer todo lo que puedes simplemente arrastrar y soltar Entonces son muy útiles para casi la idea de portabilidad. Lo que en realidad voy a hacer es que voy a crear un objeto vacío a objeto de juego y llamarlo reúne Sólo porque me gusta mantener las cosas limpias. Y vamos a arrastrar eso ahí abajo. Hagámoslo y podemos duplicarlo. Y esto sigue siendo un pre fab y no debería estar anulando nada Y si hago clic en seleccionar aquí, en realidad seleccionaré el prefabricado el prefabricado original Entonces déjame mostrarte cómo funcionan los prefabricados. Entonces digamos por ejemplo, decido que este colisionador circular es decir demasiado pequeño, quiero hacerlo un poco más grande Bueno, normalmente si esto no fuera prefabs, tendría que entrar aquí, hacer esto más grande, luego entrar aquí, hacer este más grande, y todavía puedo hacer eso, ¿ Todavía puedo entrar aquí y puedo llegar a nuestro planeador circular y puedo aumentar el radio y decir, quiero que eso sea sobre uno Y luego entra aquí, y ves que eso no ha cambiado, pero yo también podría hacer esa. Por lo que puedo tratarlos individualmente todavía no hay problema. Pero lo que ahora dice es que si hago clic en las anulaciones, es decir que estoy anulando el colisionador circular en Si revierto y vuelve a lo que es en el prefabricado original Entonces es un radio de 0.55, lo que sea, aquí mismo. Y lo mismo con esto, podría ir aquí y revertir Pero solo para mostrarte lo que pasa, si cambio el prefabricado original, digamos que quiero cambiar esto a un radio de 0.7 Y esto también es lo útil para, ya sabes, si quieres hacer doble clic y ver cómo se ve eso, puedes hacerlo aquí y 0.7. Entonces es bueno poder hacerlo algo visual, así. Ahí tiene un asterisco, pero si hago clic lejos, automáticamente lo guarda. Si vuelvo aquí, éste todavía tendrá un radio de uno, Porque anulamos el ajuste prefabricado Pero este de aquí, en realidad obtendremos el nuevo radio de 0.7 porque no has anulado nada con este Ver, ahí no hay anulaciones. Y puedes volver aquí y como revertir la anulación, borrar la anulación de alguna manera Si lo revierto, en realidad volveré al 0.7. Entonces ahora probablemente empiezas a tener una idea de lo poderosos y prácticos que son los prefabricados, y cuanto más los uses, más encuentras que son bastante increíbles Así que vamos a lugares por todo el lugar. Todo bien. Yo sólo estoy haciendo el comando D aquí, voy a hacerlos bastante mal Probablemente debería colocarlos un poco más que esto, pero te lo dejaré a ti. Y claro, ahora estoy pensando que, sabes, 0.7 como disparador. A lo mejor es demasiado grande, pero no tengo que preocuparme porque no creo que ninguno de estos quede anulado, claro, porque acabo de colocarlos abajo. Así puedo volver al prefab y cambiarlo de nuevo para que se acerque a lo que era 0.6, 0.5, algo que era un netbooks lo hacen 0.6, está Y todos estos son ahora 0.6. Entonces cariño tuve que cambiarlo en un solo lugar y cambió todo el lote de ellos. Tan súper práctico. Bien. Pongamos uno aquí abajo. Duplica eso en realidad y arrástralo por ahí y duplica eso y arrastra eso a esa esquina. Arrastrar eso a esconderse un poco ahí, no importa. Voy a poner uno en cada esquina también . Eso probablemente sea suficiente. Estos probablemente necesiten bajar un poco. Hacer un poco ne. Fresco. Yo no soy ningún tipo. 20. Laberinto viendo doble: Bien. Hagamos un poco más de retoques. Porque me parece que el delgado es un poco lento, un poco por todas partes Y eso es bastante fácil de arreglar. Se ve un poco borracho en este momento. Como si estuviera tambaleándose un poco. Rich puede ser muy divertido tener a un delgado borracho deambulando por Pero intentemos arreglarlo. Entonces solo para mantener al jugador en la ecuación, pondré el rango a cero, así que solo va a deambular Vamos a poner esto en juego y vamos a ajustar algunos parámetros para ver si podemos detener ese comportamiento borracho Entonces eso en su mayoría solo viene de estos valores aquí, en realidad. Entonces Y es super obviamente si yo wa a subir la velocidad. Entonces, si iba a subir la velocidad, es como si estuviera sobrepasando y es Oh, querida Realmente es como un mal conductor de autos. Él es como. Entonces esto se debe a que la velocidad angular es muy baja, y así es como realmente no los hace muy eficientes. Entonces, si lo golpeo bien, entonces. Todavía no está mejorando porque no creo que tengamos suficiente aceleración. Así que vamos a subir eso. Ahí vas. Ahora está ardiendo por ahí. Como Bueno, bebí demasiadas bebidas azucaradas. Digámoslo de esa manera. Bien, entonces eso definitivamente es una mejora. Bastante seguro que la velocidad angular es un problema si eso es demasiado bajo también. Entonces, déjame solo verificar que ese es el caso si lo bajara. No parece tener tanto efecto. Supongo porque no estamos rotando ni nada así que probablemente no tenga ningún efecto realmente. Entonces es realmente esta aceleración que fue el problema, así que eso es bueno saberlo. Bueno, esa velocidad es una locura. Entonces creo que si lo bajamos a una velocidad más sensata de digamos ocho o siete, entonces Entonces, en base a eso, todavía voy a azotar la velocidad angular porque no creo que haga demasiada diferencia Y voy a golpear nuestra aceleración hasta 500. Y vamos a jugar un poco con la velocidad. Entonces hacemos el rango de ataque a diez. Necesito reiniciar, así que déjame cambiar eso de nuevo a diez. Entonces viene tras nosotros y C, probablemente queremos que el delgado sea tan poco más rápido que nosotros para que realmente tengamos que amable no tenerlo. Para que me guste bastante la velocidad del jugador. Entonces creo que la velocidad enemiga puede ser un poco más rápida entonces. Entonces vamos a hacer ese seis. Vamos a probar eso. Realmente me va a atrapar. Si no tengo cuidado. Oh, sí, sí. Creo que ese es probablemente un reto suficientemente bueno. Entonces, mantengámoslo así. Pero claro, agreguemos otro enemigo. Y entonces eso va a hacer las cosas realmente interesantes. Por último, sumémonos a nosotros mismos otro enemigo. Entonces 'plicar esto. Arrastremos a nuestro amigo hasta el lado derecho de la mazmorra Vamos a traer un par de texturas de bloques más. Voy a arrastrar tres y cuatro aquí así. Seleccionemos ambos y arrastrémoslos aquí solo para que obtengamos nuestra animación y control fácilmente creados. Vamos a entrar aquí. Esto va a ser blob. Paseo Morado. Al igual que así. Entonces eso creó ese controlador aquí, que en realidad es cambiemos el nombre de esto a Purple. Y vamos a hacer doble clic sobre eso. Entonces claro, este controlador, todo lo que hace es ejecutar esta animación. Así que en realidad no tenemos que hacer nada elegante aquí. Sólo tenemos que cambiar este controlador a este enemigo. Entonces este está usando blob en este momento, pero claro que queremos usar blob purple Recordemos también cambiar fotos por unidad a 256, cumplir. Y vamos a golpear play y a ver si eso funciona. Sí, pero esa mancha se ve un poco maníaca porque solo necesitamos cambiar esto a dos, no muestres la pendiente justo abajo Ya no necesito esto. Entonces, simplemente eliminemos eso vamos a usar para crear el controlador fácilmente. Y vamos a renombrarle el nombre a este deporte enemigo Púrpura. Y por el momento no se ve púrpura. Quiero decir, cambia cuando reproduce la animación, pero va a ser un poco útil solo para que se vea bien inicialmente. Entonces eso es solo arrastrémoslo. ¿Dónde estamos? El ahí vas. Así que ahora estamos morados ahí. Guarde eso. Estoy pensando esto va a ser bastante duro ahora en realidad. Sí, tengo dos. Sí, esto es complicado. Esto es bueno, debería ser complicado. Entonces anoté cinco ahí uno, dos, tres, cuatro, cinco, obviamente. Probablemente ese sea uno escondido ahí, ¿no? Oh. Sí. Definitivamente no es bueno en mi propio juego. Mira esto. Esto es bueno. No. Así que fue bueno jugar la prueba para asegurarse de que es bastante complicado, pero tal vez factible Probablemente no sea el movimiento más grande. Siete ocho, no, no. 9101112. Sí. Bien, genial. Creo que ahí tenemos un juego. 21. Cera: Bien, ahora vamos a conseguir algo de integración de la cadena de bloques en marcha. Tenemos que sacar bastantes paquetes. Entonces abramos nuestro gestor de paquetes. Y los vamos a agregar a través este paquete de instalación desde G URL. Entonces haz click en eso, y voy a pegar en el primero. Vamos a copiar eso aquí. Pega eso en, y este es webscket nativo. Vamos a instalar eso. Bien, vamos a por el siguiente. Esto es EOS sharp. Vamos a instalar eso. Como éste especifica, es una biblioteca de cliente C sharp para cadenas de bloques EOS IO. Entonces eso ya está instalado. Vamos a agarrar el siguiente. Pega eso en. Ese es el ancla Sharp. Como esto especifica, soporta la billetera ancla. Vamos a agarrar el siguiente. Esto es compatible con la cartera de nube de cera. Vamos a agarrar el siguiente. En realidad, esta es nuestra última. Bien. Y como éste especifica, es la biblioteca autenticadora universal Bien, aquí voy a crear una nueva carpeta, que va a ser una especie de carpeta específica de cera. Así que voy a llamar a eso cera. Y aquí dentro, voy a crear una carpeta llamada escenas. Y aquí dentro, voy a crear una escena y llamarla escena de cera. Y luego voy a hacer doble clic sobre eso. Entonces, ¿qué queremos hacer primero? Bueno, ya tenemos algunos prefabricados. Ahora hemos metido todos esos paquetes. Por lo que la mayoría de ellos residen en esta biblioteca autenticada universal Entonces si explico esto y lo encuentras en la carpeta de paquetes, y vamos a usar los prefabs de Canvas Entonces solo necesitamos este en realidad. Así que vamos a arrastrar y soltar. Éste de aquí. Para mantener estos organizados, voy a hacer una carpeta llamada wax, voy a restablecerla, y voy a arrastrarlos a todos aquí, que podamos esconderlos y sacarlos del camino si queremos. Entonces tenemos nuestro lienzo unidad UA L, Y luego queremos ir a los autenticadores, y debería haber un prefab para cada uno de estos Ahora, es un poco confuso porque tienen uno canvas uno y uno UI Talkit Y siento que el lienzo uno es un poco más fácil poner en marcha y la mayoría de la gente está un poco familiarizada con Canvas. Tú hablo es que es algo propio. Es bueno, pero está un poco involucrado. Entonces probablemente nos vamos a quedar con Canvas para este tutorial en particular. Para que podamos agarrar esto y arrastrar esto hasta aquí, y luego aquí, echemos un vistazo por un minuto. Autenticadores. Sí, queremos el autenticador Wax Cloud Wallet, así que eso estará aquí aquí y podamos arrastrar esto adentro Entonces, lo que esencialmente está haciendo es apoyar un autenticador para la billetera ancla y un autenticador para la billetera Wax Cloud Ahora, lo que encontrarás está en el editor, La billetera ancla funcionará bastante bien. La cartera de la nube de cera no funcionará en el editor. Y en realidad, incluso si construyes a GL web localmente, no funcionará, desafortunadamente. Necesita estar en una página web HTTPS antes de que la billetera Cloud sea un poco feliz. Entonces eso es algo que me libera y estoy seguro congeló a bastantes personas porque no se ha hecho muy obvio que ese sea el caso, pero no parece estar funcionando Entonces tan pronto como lo despliegas correctamente, funciona bien. Entonces ojalá, eso es bueno saberlo. Echemos un vistazo aquí. Entonces tenemos aquí esta unidad bastante importante Canvas UA L script, que especifica el ID de cadena, y este es el ID de cadena para cera, eso es correcto. Y luego el punto final que queremos usar. Ahora, descubrí que este no funciona en este momento. Es posible que queramos cambiar eso, y te mostraré cómo puedes verificar si estos puntos finales están funcionando o no. Hay un pequeño sitio útil que te dice si estos están en funcionamiento o no, y este parece estar caído en este momento. No sé si eso es algo permanente o no, pero de todas formas. Otra cosa con la que me topé. Si le pego a play, entonces vemos que aquí no tenemos nuestras opciones, y esto es porque sí necesitamos configurar algo aquí. Entonces volvamos a desplazarnos hacia abajo aquí de nuevo. Y si abrimos, sí, autenticadores, y vemos que no hemos configurado nuestros autenticadores Tiene dos ranuras porque tipo presume que vas a usar el ancla, así que voy a arrastrar eso ahí así, y el de cera La billetera hacha Cloud uno. Entonces eso está configurado ahora. Entonces si vuelvo a golpear play, entonces eso todavía no es suficiente para que las cosas funcionen porque en realidad tenemos que llamar a una inicialización sobre esto Entonces sí necesitamos un guión. Así que entremos en nuestra carpeta de cera. Ya podemos cerrar eso. Así que vamos a crear una carpeta llamada script. Y aquí dentro, vamos a crear un guión C sharp, y voy a llamarlo controlador de cera. Vamos a crear otro objeto de juego y llamarlo Controlador de cera, y vamos a arrastrar el controlador de cera a la x y vamos a abrirlo. Vamos a traer espacios de nombre. Entonces queremos biblioteca autenticada universal y universo o biblioteca autenticadora fuente Canvas y hagamos un campo serializado, y vamos a hacerlo Canvas AL, es Canvas Subrayan sobre eso. Así. En realidad, si solo queremos que esto funcione de inmediato, podríamos simplemente hacer eso.en él. Así. Y eso debería hacer el trabajo, lo hemos enganchado. Así que la unidad UA L salva la cadera Ahí tienes. Tenemos los dos autenticadores ahí dentro. Tenemos ancla y tenemos cartera de nube de cera. La billetera Wax Cloud no va a funcionar. De hecho, ninguno de estos va a funcionar porque sí necesitamos un sistema de eventos aquí dentro. Así que solo agreguemos eso también. Así sistema de eventos UI. Vamos a intentarlo de nuevo. Ahora estos son más felices. Entonces eso no va a funcionar. Vamos a cancelar que vuelva a entrar. Pero este W. Trae aquí un pequeño código QR genial. Y lo que voy a hacer es agarrar mi app ancla wallot en mi teléfono Entonces voy a hacer clic en escanear código QR, y voy a escanear ese signo. Pega mi huella dactilar en él. Sí, creo que estos errores aquí por ese punto final, no funcionan. Entonces, en realidad, conectemos nuestro evento de inicio de sesión, y nos duplicaremos. Volveremos a comprobarlo. Y si falla, cambiaremos ese punto final, y ojalá lo veamos funcionando entonces. Entonces hagamos todo eso. Entonces abramos nuestro controlador de cera. No necesito este método de actualización. Voy a borrar eso. No necesito ese comentario para decirme qué hace el inicio. Y aquí, voy a conectar una U un U método de inicio de sesión a esta acción aquí. Entonces, lo que sucede es cuando el usuario inicia sesión con éxito, esto se dispara, que luego ejecutará este método de inicio de sesión de usuario. Pero sí necesito crear este inicio de sesión de usuario. Así que puedo hacer una solución rápida aquí. Eso es algo así y solo puedes decir generar método para iniciar sesión de usuario, y es una especie de talones un método para ti así Eso tiene semicon aquí. Entonces, ¿qué quiero hacer cuando el usuario inicia sesión? Bueno, sí quiero averiguar el nombre de la cuenta que acaba de iniciar sesión. Entonces puedo hacer eso haciendo obtener el nombre de la cuenta así. Porque lo esperaba, puso esto una sincronización automáticamente porque si estás esperando dentro de un método, tienes que tenerlo tiene que ser un método A sync Y si antes no te has topado con un peso, esencialmente, lo que sucede es que esta línea no irá más allá esta línea hasta que esta haya regresado con éxito con un nombre de cuenta o haya fallado. Y Pero no bloquea toda la aplicación. Eso es lo bueno de un peso es que otras cosas pueden continuar. Es solo una forma eficiente esperar a que algo suceda antes de continuar porque no quieres ir más lejos en este método hasta que tengas un nombre de cuenta. Entonces voy a depurar g. Y voy a decir algo así como el usuario A L. Vamos a mostrar esa variable así. Esto debería funcionar ahora. Entonces en un inicio de sesión exitoso, esto así que corre, y deberíamos ver en la consola este mensaje con el nombre de la cuenta siendo lo que sea que haya iniciado sesión como car hit play. Haga clic en el ancla. Vamos a escanear esta señal. Ahí vas. Entonces me ha encerrado, pero no ha podido obtener el nombre de la cuenta, y creo que en ese momento, está tratando de usar ese punto final. Entonces arreglemos eso a continuación. Bien, entonces dije que iba a arreglar ese punto final. Pero probemos que ese punto final es el problema. Así que he venido a este sitio bastante genial. Se trata de puntos finales de herramientas de cera, y esto esencialmente enumera todos los Npoints API de cera Mint Y como pueden ver, hay signos de exclamación contra los que no funcionan Hay muchas garrapatas, pero hay una extraña que no está funcionando. Eso es en realidad un IPFS Sí. Pero si recuerdas con razón, el nuestro era el que estaba usando eran los líquidos. Si hago un comando F y solo empiezo a escribir líquido así, entonces puedes ver que está saltando aquí abajo y tiene un signo de exclamación que dice mal estado de puerta Entonces definitivamente, eso no está funcionando. Entonces, ¿cuál elegir? Bueno, en realidad no lo sé. Yo sólo voy a elegir el de arriba aquí. Pero es posible que desee hacer su investigación y preguntar por ahí para ver cuáles son los mejores para usar en este momento. Pero creo que este top es bueno. Suecia, en realidad, bastante gracioso, cera Suecia parece bonita en la pelota, así que probablemente sea seguro usar también si estás en Europa. Pero de todas formas, voy a usar esta. Entonces vamos a copiar eso. Así que solo lo seleccioné y copié. Entonces voy a volver aquí. Voy a volver a este Unity Canvas AL. Ven aquí abajo. Y yo sólo voy a pegarlo aquí. Entonces donde dice, API. No quiere este HTTP ni nada por el estilo en el frente aquí. Sí quiere conocerlo en el campo anterior, pero solo sé consciente de eso porque en realidad. Porque lo copié y pegué, se va a pegar eso en el frente. No quiere eso. No está contento con eso, así solo tienes que quitártelo. Así que voy a salvar eso. Creo que ya es suficiente, y vamos a golpear play de nuevo y comprobarlo. Así que de nuevo, Aquí ancla. Recoge mi celular con la cartera ancla puesta. Haga clic en escanear QR. Ven aquí. Sostenga el teléfono hasta la pantalla. Signo de clic. Usa mi huella del pulgar para identificarlo. Ahí vas. Es más feliz. Entonces ese punto final fue el tema. Y ahora tenemos un mensaje aquí diciendo, usuario Platón GM ha iniciado sesión, y esa fue la billetera con la que me conecté. Entonces eso está funcionando bien. 22. Cera atómica: Bien, entonces en realidad queremos traer otro paquete ahora. Así que vayamos a Window Package Manager, y igual que de costumbre, instalemos el paquete desde G URL. Vamos a pegar este en. Entonces este es el cliente de API de activos atómicos. Así que vamos a instalar eso. Entonces este paquete de activos atómicos nos permitirá ver lo que un usuario tiene en su billetera, respecta a las NFTs, y otros tokens, por supuesto, pero en este momento estamos interesados principalmente en las NFTs Entonces eso va a ser súper útil. Tengo algunas áreas aquí, pero no creo que sean importantes. Licencias, sin metopile Vamos ver si podemos eliminar eso para que no se queje de ello Ahí vas. Activos atómicos. La licencia no tiene metafila. hay un archivo de licencia Aquí hay un archivo de licencia que creo que solo podemos eliminar. Así que vamos a borrar eso solo para que Eric se vaya como que. Vamos a aclarar eso. Derecha. Debería estar un poco más feliz Realmente hicieron que probablemente no te molestes en hacer eso. Fresco. Derecha. Veamos cómo usamos este nuevo paquete entonces. Así que vamos a entrar en nuestro controlador de cera. Entonces voy a crear una función. Llamémoslo tarea obtener todo de la colección. Voy a pasarlo en una cadena, que es el nombre de nuestra colección. Ahora, necesitamos construir algunos parámetros. Llamemos a esto activos para abreviar, hagamos nuevo activo Bien. Ese de ahí lo estoy buscando. Entonces si selecciono eso y hago tabulador, eso traerá ese uso. Sí, ahí tienes. Sí, ahí. Entonces hagámoslo. Y vamos a construir nuestros parámetros. Por lo que queremos especificar el dueño que. Interesado en. Entonces ese sería Platón GM Platón GM. Entonces estoy buscando cualquier cosa que sea dueño de Platón GM. Pero sí, no quiero traer de vuelta todo. Así que puedo hacer con nombre de colección. Y voy a pasar ese nombre de colección desde aquí. Entonces voy a tener que pasar eso. Esto está codificado duro en este momento. Sólo voy a poner un gran cambio junto a eso, así que no me olvido. Porque no lo quiero codificado duro. De hecho, para ser honesto, probablemente pueda mandar eso de inmediato y llamarlo ahí. Sí, hagámoslo. Entonces iba a hacerlo en pedacitos, pero estoy seguro de que podemos hacer todo esto de una sola vez. Entonces hagámoslo. Y entonces podemos pasarlo, lo cual es genial. Podemos obtener los datos de recopilación solo hacer datos de recopilación es igual a ponderar esto porque esto va a salir a la web y tirar esto hacia abajo así que podría tomar un poco de tiempo. Utilizamos esta versión de fábrica de API de activos atómicos uno, que es la versión uno de la API que está usando. Voy a usar la API de activos, que parece súper flexible, y luego los activos y enviarle los params de activos Y luego voy a hacer un bucle de cuatro. Entonces, si apenas empiezo a escribir cuatro, luego flecha hacia abajo hasta aquí, presione tab, llenará un bucle de cuatro para mí. Yo es bueno. Datos de recolección. Quiero ir a través de toda la matriz que vuelve. De hecho, tiene que ser la longitud de los datos, así, y simplemente construir una cadena de información es igual a. Y en realidad, lo que voy a hacer es Primero que nada, metamos esto en La cosa así. Y luego vamos a construir una cadena a partir de esa información. Y por el momento, vamos a obtener el ID de activo porque eso siempre va a existir en este ID de activo, y vamos a desbog Para que pueda hacer debo ID de activo. Fresco. Bien, llamemos a este método después de que hayamos iniciado sesión con éxito. Entonces voy a hacer una espera, obtener todo de colección. Voy a usar el nombre de la cuenta con la que he iniciado sesión y El nombre de la colección. Sucede que sé que tengo tres NFTs de esta maravillosa colección llamada Platón evolucionó Entonces eso debería ser suficiente para que veamos tres ID de activos próximos, uno para cada uno de mis NFTs Bien. A ver si eso funciona. Voy a hacer clic en ancla, voy a escanear QR, escanear señal de éxito de impresión. Y ahí tienes. Tenemos tres identificaciones A regresando. Entonces eso parece que está funcionando. Ahora bien, si quieres ver los datos que están regresando, en realidad puedes venir a esta página aquí. Activos atómicos de la API de cera, y esto realmente te permite, tendrás que hacer clic. Comienza así. Necesitas hacer clic, probarlo. Usted quiere bajar a esta línea de buscar activos aquí. Y nombre de colección, Platón evolucionó, filtrar por dueño, que es Platón gM. Bajemos aquí. Nada más. Así que solo presiona Ejecutar. Y si nos desplazamos hacia abajo, puedes ver nuestra respuesta. Lo cual es muy práctico. Así que esos son los ID de activos. De hecho, si muevo esto un poco, ese ahí es ese de ahí. Y si bajamos. Ahí vas. Ese es el siguiente. Pero cada uno obviamente tiene bastante información. Pero lo que realmente nos interesa es un poco más abajo. En realidad está dentro de la plantilla. Um, tenemos estos datos inmutables dentro de la plantilla. Y ahí dentro, tienes IMG, creo que en el código, lo llama imagen y nombre, y eso es lo que queremos sacar. Entonces esto de aquí, no parece una imagen. En realidad es que este es un identificador único en el IPFS, que creo que significa sistemas de archivos interplanetarios Me volví loco así. Te voy a mostrar todo sobre eso un poco más tarde. Pero solo para mostrarte que puedes usar este sitio para probar y ver los datos que estás recuperando de estas llamadas a la API. 23. Interfaz de usuario de NFT con cera: Entonces, en realidad quiero esconder todas estas cosas, tan bien que las puse dentro de una carpeta, ¿verdad? Eso fue pensar en el futuro. Así que ahora puedo esconder eso por el momento y trabajar en lo que quiero mostrar aquí, que es cuando hemos iniciado sesión y hemos bajado los NFT de la cartera, sería bastante amable si mostraran aquí una imagen y tal vez muestren el nombre Creo que probablemente sea suficiente para seguir adelante. Entonces hagámoslo. Déjame crear otro lienzo. Al igual que así voy a hacer la escala estándar con tamaño de pantalla. Hazlo a 0.5, 800 por 600. Eso es todo bastante bueno. Bien. Entonces tenemos un lienzo que va a jugar muy bien. Y a partir de aquí, vamos a hacer botón. Porque si lo piensas bien, solo queremos presionar en cualquier NFT que queramos entrar y jugar el juego Entonces habrá un ratón, un gato y un perro, cualquiera que sea el que juguemos, hacemos clic en, entraremos y jugaremos como ese NFT, lo cual es algo genial Entonces aumentemos nuestra altura 260, así, agreguemos una imagen a nuestro botón a la imagen de la interfaz de usuario. Vamos a bajar eso un poco hacia abajo así. Vamos a darle una especie de sprite base aquí, veamos. Busca algo así como fondo. Sí, sólo una cajita como esa. Lo reemplazaremos, pero sólo para poder ver qué está pasando. Y voy a poner, vamos a ver. Yo lo hago s, hazlo simple preservar relación de aspecto. Así que eso va a hacer porque vamos a borrarlo de todos modos. De hecho. Veamos qué más podemos usar para esto. Oh, ahí tienes. Algo así que es un poco mejor. Bueno. Fresco. Y luego para el texto, voy a cambiar el nombre de esto y realmente no puedo ver lo que está pasando ahí. Dónde se esconde. Así que vamos a hacer clic. Desplazar una opción. Pongámoslo a la cima así y luego reduzcamos la altura a algo sensato como eso. Eso va a hacer, creo. Pero voy a crear un script para que sea más fácil actualizar este botón. Así que voy a ir a scripts, hacer clic en Crear guiones nítidos en C, y voy a llamar a esta interfaz de usuario subrayado NFT Y haga doble clic en él. Y luego voy a hacer un campo serializado, privado. Y hago una malla de texto PG hit tab, así que agrega el uso de TM pro en la parte superior ahí. Y voy a llamar a este nombre de subrayado. Y luego quiero otra, campo serializado, imagen privada esta vez Y no le pegues a Tab inmediatamente porque queremos este de aquí en realidad. Es un poco molesto que por defecto sea éste. Queremos esta interfaz de usuario del motor de unidad'. s tab ahí y agregará la correcta se puede llamar a esta imagen cuadrada. Así, y después deshazte de este comentario, deshazte de la actualización, y voy a estar nombrando esto para establecer NFT, así Esto solo tomará nombre y otra cadena, que es la URL de la imagen. Entonces, el nombre es fácil. Podemos simplemente asignarle eso así. Así. Y la URL de la imagen no es tan fácil, tenemos que hacer sprite de imagen es igual a algo Entonces, por el momento, solo hazlo nulo porque necesitamos crearnos algo que pueda tirar hacia abajo una imagen del sistema de archivos interplanetario No es demasiado difícil. Vamos a hacerlo. Entonces, si hacemos Una tarea. Hagamos tab para traer en el sistema las tareas de enhebrado. Sprite Sprite Una sincronización es un buen nombre. Eso es bueno. S T es la URL de la imagen. Entonces queremos hacer algo como esto. Unity web request texture, que está ahí. Bueno. Eso traerá en Unity un nuevo motor de redes. Y tenemos esta textura muy útil para obtener, que solo podemos pasar en una URL, y es casi tan simple como eso. Todavía no estamos del todo, pero es bastante impresionante que podamos simplemente hacer eso. Entonces podemos hacer solicitar enviar solicitud web. Lo que esencialmente hemos hecho es que hemos creado una solicitud web y luego ahora estamos enviando la solicitud web. Y entonces en realidad tenemos que jugar un poco los pulgares hasta que se haga la solicitud Así que estamos haciendo está hecho. Y lo que puedes hacer es que se vea complicado, pero en realidad no es todo lo que está haciendo es esencialmente no hará nada hasta que se establezca la solicitud, que es algo que sucede mágicamente detrás escena cuando recuperamos la textura Y entonces podemos Y estoy usando muchos vars aquí. No estoy muy seguro de haberlos usado antes. Vars son Es como taquigrafía porque voy a rellenar esto porque realmente no puedo molestarme en escribir el tipo adecuado que necesito Entonces, como que lo descifra a partir del contexto, el tipo de esta textura va a ser. Yo sólo un poco práctico. Sé que a veces hace que las cosas sean un poco difíciles de leer. Pero es un poco útil. Si no quieres seguir escribiendo tipos todo el tiempo. Para que obtengamos la textura de la petición que regrese. Y entonces esto es un poco interesante es que Esta es una textura dos D, creo. Déjame solo, sí. Yo me cierro sobre eso, me voy a decir, en realidad, lo que piensa que va a ser la var Así puedo reemplazar esa textura dos D así, y luego eso la hace un poco más explícita. Un poco más escribiendo, pero probablemente más limpio realmente. Puedo pasar el cursor sobre esto, y esto es como peticiones web de unidad Entonces puedes ver que estos vars son un poco útiles. Quiero decir, varing a un sprite es algo inútil porque eso es Así que no te ahorra nada y así que bastante inútil Así podemos crear un sprite a partir de una textura usando sprite do Y luego podemos hacer textura y tenemos que poner en el tamaño de la textura. Pero eso es más fácil de obtener de la textura, se siente un poco inútil, pero es lo que es Y entonces creo que este es el pivote, que amable solo queremos establecer en el medio. Entonces eso va a ser dios, eso será uno vector Vector dos, perdón uno multiplicado por 0.5. Esa es probablemente una manera fácil de hacerlo o simplemente puedes hacer nuevo vector 20.5 co 0.5, de cualquier manera Entonces esto parece ambiguo Bien. Entonces puedo alias ambus o eso. Hagámoslo porque eso es bastante genial. Entonces creo no creo que eso sea lo que quiero. Vamos a intentarlo de nuevo. Es Unity motor de vector dos que quiero. Sólo tienes que escribir en un motor unidad vector dos. Ahí vas. Feliz ahora aparte de aquí. Eso lo explicaré en un segundo, en realidad, porque eso es un poco raro. Bien. Yo saqué numéricos aquí. Déjame comentarlo y ¿es feliz? Sí, pensé que era un poco inusual Vector dos se quejara. Entonces los números estaban ahí por alguna razón. Pero esto puede ser un poco útil porque si tienes una ambigüedad, si tienes un vector dos en dos espacios de nombre y estás usando ambos espacios de nombre, entonces por supuesto, no sabe si el vector dos es de este espacio de nombres en particular u otro que estés Entonces puedes eliminar la ambigüedad especificándola así Se puede decir usando vector dos, lo que quiero decir es unidad motor vector dos. Entonces eso es un poco práctico, pero superfluo porque no necesito el numérico Así que eso se ve bastante bien. Entonces lo que podemos hacer ahora es, esperar, obtener una URL de imagen de sincronización, así. Y queremos que esto sea público porque se quiere llamar a esto. Lo que eso hace es que vamos a llamar a esto en realidad desde el Controlador de cera. Vamos a llamar a esto y lo vamos a mandar con el nombre, que probablemente va a ser gato, perro, lo que sea. Y una URL de imagen, sí, en realidad, pensando en ello, esto no está del todo bien, porque sí necesitamos en el frente para concatenar el sistema de archivos interplanetario Así que voy a pegar eso de alguna parte porque déjame ver. En realidad no se puede tener que usar este en particular. Hay muchos puntos finales de IPFS que puedes conectar aquí Y porque la URL de la imagen, que en realidad es, quiero decir, debería decir que esta no es la URL de la imagen, es como la llamaría ID IPFS Entonces, supongo. Yo sí. Entonces esta es en realidad esa gran cuerda que te mostré antes. Entonces es como una identificación única. Sí, probablemente sea un UID. Así que vamos a obtener una identificación única aquí, y así que en realidad pero cuando hacemos esto, se pone sprite, queremos una URL adecuada Y así al hacer esto más el ID único de IPFS, eso debería ser suficiente Y en realidad lo ha demostrado, ¿verdad? Así que copio eso. Vuelvo a sí, ahí tienes. Entonces si pego en eso ahí, lo cual no sé. Sí. La llave no puede estar vacía, así que no es suficiente. Tomemos eso. Vamos a copiar eso. Yo regalo un poco el juego aquí, pero de todas formas, es bueno. Entonces ahora he pegado en ese ID de IPFS. Y espéralo. Dedos cruzados. Sí. Ahí vas. Consiguió a nuestro gato. Así que eso es algo genial. Entonces esto es lo que vamos a esta es la cuerda que va a ser lo que esto termina siendo todo esto. Así que eso es genial. Regresemos aquí entonces. Y realmente ya no necesitamos ID de activo, así que hagamos este nombre. Y dijimos, ¿no lo hicimos que estaba en plantilla punto inmutable data nombre de punto Creo que eso es lo que dijimos y imagen de cadena es igual a plantilla de punto de datos otra vez imagen de punto de datos. Era IMG, pero creo que en el tipo de tipo de datos aquí, lo están haciendo imagen Entonces esa debería ser la URL de la imagen. Vamos a hacer nombre más URL, solo para que podamos ver eso. Pero sigamos adelante y descubramos qué vamos a querer hacer aquí. Bueno, vamos a querer usar un pre fab. Para usar un prefab FFT para crear una instancia UNFT entonces vamos a querer establecer NFT Con nombre Y luego vamos a querer configurar la prevención que configuró el evento en el botón. Fresco. Hagámoslo a continuación. Bien. Tenemos esto subrayo guión NFT. Queremos arrastrar eso a nuestro botón. Queremos que el nombre del texto esté ahí. Queremos que la imagen esté ahí. Llamemos a esto. Yo lo llamo botón NFT. Y vamos a crear una carpeta llamada pre abs, y vamos a arrastrar eso ahí adentro así que bien. Y luego en el controlador de cera, dijimos que necesitamos crear una instancia del prefab, así que vamos a necesitar ese prefab Así que vamos a hacer objeto de juego privado. Subrayar lo va a llamar un prefabricado FT. Y también saber que también sabemos que vamos a necesitar un padre del padre de los NFT, lo siento. Bien, eso es bueno. Así que arrastramos de los prefabricados. No lo arrastre desde la vista jerárquica. Arrástralo de la carpeta del proyecto porque es un prefab. Y entonces aún no tenemos a este padre porque pasemos por alto lo que queremos hacer Vamos a querer tener múltiplos de estos, ya sabes, y no queremos que se apilen uno encima del otro, los queremos uno al lado del otro. Entonces voy a crear un vacío aquí. Voy a estirarlo por el medio, así. Se estira con el ancho de nuestra vista de juego. Voy a llamarlo NFT parent, solo para hacer las cosas obvias, y voy a agregar un grupo de layout horizontal, y voy a unt estos y voy a hacer middle center Loco, ¿eh? Pero lo que eso hace es si arrastro y suelto estos aquí ahora, B. Niza. Todo dispuesto para mí en una fila, que es exactamente lo que quiero. Entonces lo que puedo hacer ahora es arrastrar a este padre NFT hacia aquí, y puedo usar eso para poblar esto con tantos de estos como quiera Entonces, permítanme borrar uno de ellos. Voy a hacer click, pero voy a borrar estos en código. Entonces solo para demostrar que los estoy limpiando y agregando más porque habrá tres. Estos se eliminarán y luego se agregarán algunos más. Haremos todo eso en código ahora mismo. Deberíamos aclararlo. Podemos aclararlo aquí afuera. Entonces, si lo hago por cada niño de transformación en guión bajo NFT padre parece un poco duro, pero definitivamente quiero destruir al Un poco megalmnia mía, pero esto es lo que hacemos Y si solo golpeo si solo le pego inicio bien juega ahora, entonces verás desaparecer a estos dos. Ojalá, creo que lo hemos enganchado todo. Entonces, si hago eso. Sí. Ahí vas. Desaparecen. Porque es bastante agradable tener algo mostrando aquí, solo para recordarnos que esto es algo así como lo estamos haciendo en código porque si solo borro estos, entonces es un poco complicado de ver Bien. Algo está pasando, ¿verdad? No sé, preferencia realmente. Pero sólo me gusta que me recuerden eso Oh, sí. Lo que voy a estar haciendo en código es llenar a este padre NFT con algunos botones, y así es más o menos lo que va a parecer Entonces es un poco agradable. Así que no está de más aclararlo en código. Derecha. Así que volvamos a nuestro controlador de cera. Entonces estoy limpiando estos. Y luego aquí abajo. A ver. Quiero instanciar cosas. Entonces NFT es igual a instanciar prefab y pegarlo pegarlo Bonito trazador de líneas, brillante. Entonces eso en realidad va a crear uno de estos botones y pegarlo. Aquí, por cada NFT que tenemos. Y veamos, tenemos este componente UI subrayado Tenemos este componente de script. Entonces llamémoslo así. Vamos a conseguir que consiga componente porque queremos que eso sea capaz de ponerme por delante de mí aquí, subrayo NFT set NFT Bueno, yo uso el nombre y la imagen que. Bien. Y luego queremos enganchar el botón. Entonces puedo hacer botón. Podría haber hecho esto en este UI NFT. Esa sería otra manera tal vez mejor de hacerlo, pero vamos a vivir con lo que tenemos, componente FTG botón de componente FTG y yo solo voy a hacer botón al click Agregar diez. Puedes hacer una función de flecha como esta, cual es genial para configurar lo que quieras hacer al hacer clic y simplemente puedes ponerlo aquí. Sólo voy a depurar. Por el momento, de todas formas, el nombre para que podamos demostrar que sabemos a qué NFT hemos presionado Pongamos estos en el lugar correcto. Entonces, ¿qué fue eso? Ese era el nombre de dos. Sí, y configuramos el evento en el clic del botón, que fue lo que hemos hecho ahora. Fresco. Sí. Veamos qué pasa. Siento que me falta algo porque eso fue muy fácil. A ver. A ver. A lo mejor me falta algo. Ah, bueno, lo que me falta es volver a mostrar esto de nuevo. Ves que esto se interpone en el camino. De hecho, podría, ya sabes, encender eso en código, lo cual podría hacer, en realidad. Vamos a probarlo primero de todos modos. Entonces, Anchor. Escanear, firmar. Bueno, tenemos nuestro gato, tenemos nuestro ratón. Oh, iba a decir, ¿por qué odia tanto al perro? Pero no lo hace. Los tenemos a todos. ¿Qué tan genial es eso? Y si hago clic en Gato, me sale gato. Si hago clic en perro, me sale perro y si hago clic en el mouse, me devuelve un mouse para mis problemas. Entonces eso es genial. 24. Reproductores de cera: Bien. Bien. Estoy de vuelta en la escena principal. Así que abrí la carpeta Maine. Así que abrí la carpeta Maze y me he metido en escenas y he hecho doble clic en Escena principal. Sólo voy a decir que si escuchas agua y lluvia y truenos en el fondo, no es porque haya agregado una banda sonora atmosférica a este curso, es porque está sucediendo afuera. Ojalá el micrófono no lo recoja demasiado. Ahora, ya no solo tenemos un ratón, sino que tenemos un gato y un perro con los que puedes jugar. Tenemos que hacer que eso suceda. En primer lugar, vamos a traer las nuevas texturas. Voy a dejarlos caer en nuestra carpeta de texturas Bien. Y bueno, ¿cómo vamos a hacer esto? Bueno, cuando abramos la escena principal, vamos a saber si en la escena anterior, si el jugador ha hecho clic en un ratón, un gato o un perro para jugar Así que tenemos ese nombre, y queremos convertir ese nombre a lo que carguemos para jugar en el juego. Ahora, en realidad hay una manera bastante ordenada de hacer esto. Entonces lo que podemos hacer es entrar en laberinto y podemos crear una carpeta llamada recursos. Que es una carpeta especial y puedes soltar prefabs aquí y luego cargarlos en un script Entonces déjame mostrarte cómo sería eso. Si tomo esto y me deja solo lo voy a llamar mouse y vamos a arrastrar esto a esa carpeta de recursos, y luego vamos a desactivar esto por el momento, guárdalo. Entonces vamos a crear un script que cargue esto en Okay. Entonces voy a crear un script de controlador de juego. Entonces creo un objeto de juego para ponérselo y luego en guión para crear un guión nítido, y lo voy a llamar controlador de juego. Haga doble clic en eso. Deshazte de mi consola, y deshazte de este método de actualización. Deshazte de esto. Entonces hagamos algo como objeto. Ab es igual a, y entonces podemos hacer carga de recursos. Esto va a cargar cosas del orden de recursos. Quiero cargar un objeto de juego y quiero cargar Bien. Eso es bastante útil porque vamos a saber si han hecho clic en ratón gato o perro Todo lo que tenemos que hacer es nombrar correctamente el objeto del juego , y estamos bien para ir. Bastante fácil. Ahora tenemos el prefab, necesitamos instanciarlo para que finalmente podamos hacer suficiente instanciar finalmente podamos hacer suficiente instanciar Agradable y fácil. Entonces veamos si eso funciona. Asegúrate de que lo he dejado caer aquí. No, no lo he hecho. Hagámoslo. Déjame guardar el juego. Y tenemos un ratón. Bien. Eso funcionó muy bien. Así que podemos eliminar eso en realidad. Eso está bien. Ya no necesito eso. Ahora bien, esto puede arrojar un error porque tenemos variables de excepción no asignadas sobre ¿en qué tenemos eso? Mi IA para desplazarse hacia abajo a veces, porque me está diciendo que la variable del jugador lo dice aquí en realidad. Entonces probablemente necesites asignar la variable jugador del guión enemigo en el inspector. Entonces, como que te dice exactamente lo que tienes que hacer. Bien. Bien, entonces tenemos un pequeño problema en que nuestro guión de IA enemiga presume que sabemos cuál es nuestro jugador Y antes solo podíamos arrastrarlo y soltarlo aquí. Pero ahora lo estamos instanciando, y así no tenemos jugador inicialmente Y también el script UI tiene ese problema también. Entonces el script de UI es bastante fácil de arreglar, creo, en eso solo podemos reemplazar esto aquí para que podamos eliminar esto donde quiera que diga jugador, simplemente podemos hacer algo como encontrar cualquier objeto por tipo jugador objeto de juego así. Probablemente queremos asegurarnos de eso porque no nos importa si se trata de un objeto inactivo o activo. Definitivamente queremos encontrarlo bajo todas las circunstancias. Entonces encontrar objetos inactivos incluyen y luego tenemos esto En realidad, es suficiente? Déjame solo verificar dos veces. Bien. Eso es suficiente para que eso funcione, ojalá. Por supuesto que no tenemos un modo sort porque solo estamos encontrando un juego ob object by type objects. Entonces vamos a copiar eso. Vamos a pegar eso ahí dentro y descomentarlo. Y ojalá eso arregle eso. Creo que podemos hacer algo similar por la IA enemiga. Pero bien. No sabemos exactamente cuándo se va a instanciar al jugador Quiero decir, es más o menos al inicio, pero este arranque podría estar corriendo antes o después del inicio en nuestro control de juego. En realidad tienes un poco de control sobre eso, pero normalmente no es buena idea preocuparse demasiado por eso. Entonces lo que podemos hacer es que tenemos aquí a este jugador. Podemos probar si es nulo, inicialmente lo tendremos como nulo, y no lo serializaremos realmente porque y explícitamente lo establecemos en null Entonces podemos hacer algo así como subrayado jugador es igual a null, entonces vamos a ejecutar este código aquí, y vamos a tratar de pegar aquí, encontrar cualquier objeto por tipo plan transformar Bien. Y quizá no esté más feliz de esto porque esto podría fallar Entonces, encontrar una transformación de un nulo probablemente sea una mala idea. Puedo ver si una pregunta arregla eso para nosotros. Veamos cómo le va eso. Jugar. Eso en realidad parece funcionar perfectamente bien. Deshagámonos de estos registros de distancia porque eso es simplemente molesto. Sí, vamos a deshacernos de eso. Y vamos a intentarlo de nuevo solo para asegurarnos. Pero creo que en realidad es feliz. Ahora, hay una especie de 1,000,001 formas de arreglarlo. Probablemente cuando se instancie al jugador, podrías dar inicio una acción que suceda y ellos puedan escuchar Probablemente sería una forma un poco más agradable de hacerlo. Pero sí, eso está funcionando bien. Bien, pongamos a nuestro gato y a nuestro perro. Entonces voy a duplicar nuestro ratón, y voy a llamar a este gato. Y voy a hacer doble clic en eso. Cambiemos el nombre de esto a animador de gatos. Bien. Ahora tenemos este reproductor controlador. Y va a ser un poco doloroso dejarme hacer doble clic en eso, hacer doble clic en eso. Sí. Va a ser un poco doloroso reproducir este controlador otro par de veces. Y luego imagina que quieres aún más personajes. Puedes tener que cambiarlos, conectarlos de nuevo, todo este tipo de cosas. Va a ser un dolor. Entonces, en realidad hay una manera más fácil de hacer esto. Lo que puedes hacer es que nosotros podemos entrar aquí. Podemos hacer clic derecho para crear el controlador de anulación de animación. Llamemos a esto CT. Y podemos arrastrar a nuestro reproductor aquí, nuestro controlador de reproductor aquí. Y podemos anularlos con las animaciones para el gato. Entonces lo que podemos hacer es que voy a duplicar el ídolo del jugador, y voy a llamar a esto Cat Idle. Voy a duplicar al jugador caminar y llamar a esto Cat walk. Ahora bien, estos podrían llamarse mejor mouse idol y mouse walk. No me voy a molestar, pero definitivamente algo que tal vez quieras limpiar. Pero voy a arrastrar al ídolo de gato ahí. Gato entra ahí. Y eso es algo que se explica por sí mismo, ¿verdad? En lugar de hacer el ídolo jugador o el ídolo del ratón, va a hacer el ídolo gato. Entonces va a cambiarlos, lo cual es algo genial. Pero tenemos que usarlo. Por lo que tenemos que hacer clic en CT Animator. Y en lugar de usar el controlador del reproductor, queremos usar este controlador CT Override aquí. Y luego podemos hacer doble clic en CT Idle. Abre eso. Y creo que deberíamos poder, déjame ver, pero deberíamos poder arrastrar y soltar esto a eso Sí, ahí va. Así que he reemplazado esa animación ociosa por el gato. Y vamos a hacer un paseo de gatos. Así que recuerda que empezamos con call, con mouse dos nos pondríamos empezando con. Entonces cuando empiezo con el gato dos, y el gato uno. Y creo que eso debería ser bastante feliz, y probablemente podamos simplemente intercambiar el real. Este sprite aquí con gato uno también. Ahí vas. Si solo lo arrastro, podemos volver a nuestra escena, podemos ver que ese es nuestro gato, es demasiado grande. Necesitamos si miramos nuestro ratón, es 256 y todos estos van a ser 100, cambiemos eso a 256. Vamos a aplicar. Sí, eso se ve mejor. Eliminemos eso en nuestro script de controlador de juego, solo probemos usando CT ahora. Vamos. Vuelve aquí. gato en recursos, por lo que debería encontrarlo. Vamos. Estás en esta. Podría pasar. No. O no. Bien. Fresco. Vamos a hacer el perro ahora. Final uno. Entonces voy a Duplicar, vamos D. Dog. Haga doble clic en él. Nombra ese animador de perros. Entra aquí. Queremos crear un ¿Qué es? Tengo que anotar abajo. Controlador de anulación de animador llamado perro. Nuevamente, vamos a arrastrar a nuestro mal llamado jugador Controller adentro, debería ser mouse, supongo. Playdle puede ser ídolo de perro especialmente, pero tengo que crearlos Playerid. Vamos, D, duplicado. Nombre Dog Idle. En este nombre duplicado para pasear al perro. Y entonces podemos arrastrar estos a la correcta en Perro. Y luego solo necesitamos arreglar estas animaciones, doble clic. Creo que no me permitirá reasignarlos a menos que me hayan seleccionado al animador . Vamos a probar eso. Curioso. Sí, tienes razón. Si estás luchando, esto no está funcionando. Y recuerda, eso tiene que ser seleccionado y luego obviamente asegurarme de que no he cambiado el controlador, error de novato Hagámoslo. Perro entonces ellos van con ver las animaciones correspondientes, y esto es ocioso, perro uno. Ahí vas. Eso funciona muy bien. Paseo canino. Entonces perro dos para el primero un perro uno para el Segundo uno. Ahí vas. Creo que eso fue correcto. Solo arrastrémoslo y veamos. Oh, sí. También queríamos cambiar el sprite inicial. Así que vamos a cambiar eso. Así que haz a ese perro. Ahí vas. Arrastra eso. Ahí vas. Ahí tenemos un perro. Comprobemos que funciona. Guarde eso, ven a nuestro controlador de juego. Tipo en perro. Ahí vas. Tenemos un perro deambulando por ahí. 25. Cera Comunica: Bien. Así que tenemos la capacidad de intercambiar entre un gato, perro y un ratón como nuestro personaje jugador. Pero, ¿cómo nos comunicamos desde la primera escena, que es la escena de cera con la que puedes elegir con qué NFT estás tocando para escuchar Bueno, creo que la forma más fácil es simplemente hacer una estática pública, Y solo voy a llamar a esto bien, va a ser una cadena, y yo sólo voy a llamar a esta obra llamar a este jugador personaje. Y solo voy a usar eso para elegir cuál juega un pre fab usar. Necesito poner esto en la escena anterior antes de que esta escena se cargue. Hagámoslo ahora. En primer lugar, vayamos a nuestra configuración de construcción y asegurémonos de que nuestra escena de cera aquí. Vamos a abrirlo. Vamos a construir configuraciones y vamos a arrastrar y soltar eso ahí. Queremos que sea la primera escena. Vamos a arrastrar esa hacia abajo. Vamos a nuestro controlador de cera. Bien. Mostramos estos botones, y en realidad está aquí cuando hacemos clic en un botón, estamos depurando el nombre Pero lo que realmente queremos hacer es que queremos hacer juego controlador jugador personaje es igual a nombre. Entonces nos estamos comunicando a través escenas como esa usando una estática, lo cual es bastante útil. Y luego solo tenemos que hacer escena de carga de punto manager. Y solo podemos especificar que puedes hacer el índice, pero en realidad solo puedes usar un nombre. Entonces escena principal. Así. Bien. Bien. Entonces probemos esto. Entonces voy a golpear play. Va a hacer clic en ancla. Para escanear señal. ¿Puedo usar mi huella del pulgar? Cierra esa espera. Pacientemente. Ahí vas. Ahora bien, qué quiero jugar como voy a jugar como el gato. Entrando como el gato. Vamos a hacer clic en Reiniciar. Mi conjetura es que probablemente no va a funcionar. ¿Queremos volver a aquí cuando hagamos clic en start? Supongo que podemos. Depende de ti, de verdad. Vamos a entrar como un personaje diferente esta vez. Sólo para verificar dos veces. Así que entremos como el ratón. Ahí vas. Y eso está funcionando. Sí. Bien. O sea, puede ser pero t, sí, tengo que hacer esto cada vez que quieras reiniciar. Podría ser bueno simplemente reiniciar la escena principal en lugar de volver a la escena de cera. De hecho, hagamos eso ahora. Entonces Mincene esa es la UI. Bolígrafo. Sí, porque esto está cargando el índice de escena cero, que ahora es la escena de cera. Seamos explícitos al respecto porque tener números de índice arbitrarios en no es muy usar ni amigable para otros programadores que vienen tras nosotros. Entonces si especificamos recargar la escena llamada escena principal. Eso es un poco más obvio lo que estamos tratando de hacer. Vamos a comprobarlo. Entonces quiero entrar en el juego de depilación con cera. Signo de escaneo de anclaje con estampado de pulgar. Vamos a elegir esta vez. Ahora bien, lo único que diría es que ir directo y luego comenzar es un poco injusto, creo. Entonces creo que tenemos una pantalla que dice, presiona cualquier tecla para comenzar. O podríamos simplemente tener un botón de inicio. Supongo que hagamos la pulsación cualquier cosa de tecla porque creo que solo me divierte mostrar cómo hacer eso. Entonces hagámoslo a continuación. Entonces vamos a abrir la escena principal de la escena de mayo. Debería llamarlo escena de mayo, pero de todos modos. Y no queremos comenzar de inmediato. Bien. Y de hecho, esto está roto ahora porque, por supuesto, estaría en blanco para comenzar sin objeto de referencia. Sí, eso tiene sentido que Esto no va a ser nada hasta que lo pongamos con la escena de cera. Pero hagamos un default solo para que digamos que aunque no tengas un NFT, tal vez para fines de depuración, tal vez para fines de depuración, es útil tener este conjunto como ahora spawn en un mouse Pero creo que va a ser útil no Entonces el controlador del juego es el lugar perfecto para configurar esto porque en realidad no está haciendo mucho en este momento. Entonces lo que podemos hacer es chico. La forma más fácil de hacer una pausa inmediata es establecer una escala de tiempo igual a cero. Veamos cómo se ve eso. Como pueden ver, nada se mueve, y de hecho, si tratamos de movernos, ni siquiera podemos movernos porque la escala de tiempo es cero. Así que tipo de todo está algo en modo pausa, lo cual es ideal. Verás esto usado en los juegos cuando aparezcas como una pantalla de configuración o algo así, muchas veces, pausará el juego de esta manera. Entonces, la escala de tiempo es una manera fácil y agradable de simplemente hacer una pausa en el juego Y queremos pausar la entrada cualquier tecla Así es cualquier tecla o botón del mouse actualmente pulsado, entonces podemos establecer una escala de tiempo igual a uno. Así. Ahora bien, esto se ejecutará todo el tiempo siempre que estemos presionando cosas, lo cual realmente no importa porque escala de tiempo se establece en uno está bien. Entonces, si simplemente sigue haciendo eso, entonces está bien. Pero si quieres evitar eso, entonces podemos hacer algo como bola privada cualquier tecla presionada A igual a falsa, solo para ser específicos. Y luego si tecla de entrada y no ninguna tecla presionada, entonces establecemos eso y luego simplemente podremos establecer cualquier tecla pulsada igual a true. Y eso solo sucederá una vez, y tal vez sea un poco más seguro. Clave, Así que ahí tienes. Y yo incluso al reiniciar, está haciendo una pausa hasta que presionas una tecla Lo cual puede o no querer que suceda. Pero, bien. Ahora bien, probablemente podríamos poner en esta pantalla aquí, presionar cualquier tecla para comenzar, pero tal vez no sea realmente necesario porque vas a presionar una tecla para ponerte en marcha de todos modos para intentar moverte. Eso lo dejaremos, pero definitivamente es algo agradable para agregar. Pero creo que eso está funcionando un poco y en realidad incluso presionando un botón del mouse lo iniciará, lo cual creo que está bien. 26. Cera Crea una NFT: Bien, vamos a crear nosotros mismos una colección NFT. Pero primero, antes de hacer eso, vamos a necesitar crear una billetera. Vamos a hacer clic en crear Wallet. Estamos aquí en wax dot atomic hub O. Vamos a dar click en crear Monedero. Y la que vamos a usar es esta cartera ancla en el extremo derecho de la pantalla aquí. Vamos a hacer clic en Seleccionar cartera Anchor. Voy a marcar aquí. Voy a dar clic en Siguiente. Voy a decir que no soy un robot. Voy a hacer clic en Completar. Termina tu cuenta en Anchor Wallet. Creación completa de billetera, debes proceder al ancla en si aún no has descargado el cliente ancla a continuación. Entonces voy a hacer clic en Crear cuenta en el móvil. Y esto nos dará un código QR. Y así quieres conseguir tu móvil, ya sea Android o IOS y descargar el monedero ancla en ese móvil. Y ya lo hice, así que voy a venir aquí, abrir mi app de monedero ancla. Voy a escanear código QR y voy a escanear eso y luego me va a pedir que elija un nombre de cuenta. Entonces voy a elegir un nombre de cuenta. A ver. ¿Qué debo usar? Entonces voy a usar cera Unity GM. Y voy a dar clic en Continuar. Y haz clic en Crear cuenta. Y todo esto está pasando en mi móvil, así que no puedes ver que esto suceda. Sólo te estoy hablando a través de ello. Deberías estar en tu móvil haciendo esto. Y dice, creando tu cuenta, espera. Comprobación de clave, huella digital de nuevo. Y dice cuenta creada. Ahora bien, en este punto, te recomiendo hacer una copia de tu cuenta. Solo para ser rápido, voy a decir más tarde, pero definitivamente haz una parte de atrás de tu cuenta porque la perderás de otra manera. Y volvamos aquí. Ahora podemos volver a wax atomic O y podemos iniciar sesión porque podemos elegir ancla ahora, y puedo escanear eso y ahora puedo iniciar sesión con mi cuenta de cera Unity gM. Ahí vas. Voy a querer que me deslice para confirmar. Así que voy a deslizarme para confirmar aquí. Y eso también me ha verificado. Bien, así que vayamos al creador de NFT y vamos a crear una nueva colección Y voy a llamar a esta colección, digamos, llamarla unidad de cera. Pero tiene que ser de 12 personajes, uno a cinco. Entonces, ¿cera es? Y Unidad. A la cera larga y la unidad uno. Creo que esa cera Unity. Ahí vas. Entonces voy a hacer la dosis me quedaré con esto de todos modos. Describe la colección de la colección y luego queremos subir algunas imágenes. Entonces quieres echar un vistazo a esto y ver qué tamaño necesitas para el Bien. Imagen de fondo y la imagen del logotipo. Las imágenes del logotipo son bastante estándar cinco 12 por cinco 12. Y esto es 1920 por 500. Déjame ver si voy a encontrar algunas imágenes para esto. Así que encontré algunas imágenes descaradas para estos documentos, MyFREC Eso es 1920 500. Entonces tengo que desplazarme un poco hacia abajo para ver el guardado. Y entonces sí tengo ahí un logo bastante cursi. Oh, caray Dejar. Y luego veamos qué más necesito llenar aquí. Creo que eso es, en realidad. Vamos a hacer clic en guardar ahora. Eso es pedirme que firme esto en mi billetera. Entonces abramos mi billetera ancla, y sin embargo eso es algo que ha salido de y wallet. Tengo que deslizarme para confirmar, tengo que desplazarme un poco hacia abajo, y luego deslizarme para confirmar. Y eso es hacer una transacción. Entonces probablemente obtendrás esto, que esencialmente significa que necesitamos poner un poco de dinero en nuestra billetera de cera. Debido a que el uso de la transacción es 25703 es mayor que 4906 Entonces lo que vamos a tener que hacer es neto hagámoslo. Bien. Simplemente podemos hacer clic en Agregar fondos aquí. Y voy a tener que irme y tú algo así como bancos para simplemente poner un poco de dinero en mi cartera de cera. Entonces te encontraré aquí atrás. Bien, entonces ahora tengo 20 cera en mi billetera. Entonces eso no es mucho dinero, pero debería ser suficiente para cubrir esta pequeña transacción. Es como $1.37. Entonces ahí voy a aceptar la cuota. Va a querer que firme en mi móvil, lo cual estoy haciendo. Y si consigues esto, entonces vamos a necesitar comprar algunos RM. Entonces necesita 360. Entonces echemos un vistazo. Estás comprando 300. Dos fue calzada comprar suficiente R. Así que hagámoslo. Me gustaría confirmar. Bien, ahora tengo algo de RM. Debería poder crear esta colección ahora. Vamos a intentarlo de nuevo. Yo no pasé. Entonces no me voy a molestar en poner una descripción. Guardar. Bien. Esto lo estoy confirmando en mi móvil. Y parece que pasó por ese tiempo. Fresco. Bien. Llegamos ahí eventualmente. Voy a subir ese mismo logo nuevamente así que tengo un logo para esta colección en particular, guardar Y luego si nos desplazamos hasta el fondo, ahora podemos crear RNFT Vamos a hacer clic en Crear Nuevo NFT. Seleccione la categoría. Voy a crear una nueva categoría porque aún no tengo ninguna. Y sólo voy a llamar a esta categoría juego. Haga clic. Estoy contento con estos atributos. Eso está bien. No necesito agregar más. Entonces, hagamos clic en Crear. Confirmar la transacción. Y el éxito en eso. Fresco. Entonces debería poder seleccionar categoría en su lugar ahora y genial. Tengo una categoría de juego aquí, voy a hacer click en eso. Y ahora voy a seleccionar una plantilla. Ahora, como dice aquí, el propósito principal de una plantilla es ahorrar costos de RM almacenando datos duplicados. Entonces, si lo piensas, ya sabes, teníamos los ejemplos de ratón, gato y perro. Y en realidad, cada uno de esos era una plantilla, lo que significa que puedo irme y crear más de ellos. No hay problema. No va a costar tanto más. Entonces es una buena idea crear una plantilla. Bien. Entonces aquí subiríamos una imagen del ratón. Entonces déjame hacer eso. Max suministro infinito, bueno. Queremos usar esta plantilla tantas veces como queramos. Bueno establecer para tener un campo de nombre, que vamos a llamar mouse. Ya subimos la imagen, así que esto es bueno. Y ahora estamos bien para crear nuestra plantilla. Entonces voy a hacer eso. Acordar términos y servicio, crear plantilla. Bien. Firme la transacción en el teléfono móvil como de costumbre. Y he creado una plantilla. Entonces ahora puedo usar esa plantilla para crear NFT. ¿Cuántas copias del ratón quiero? Bueno, por el momento, vamos a crear el uno, y vamos a ver si podemos usar eso en nuestro proyecto. Entonces bien. Vamos a refrescarnos. Hemos creado una categoría. Una categoría define los atributos de NFT y plantilla. Pueden ser formas de categorizar tus NFT como por tipo o versión Después creamos una plantilla. Tenemos una plantilla para el mouse, así podemos crear tantos NFT como quieras a partir de esa plantilla de mouse Voy a crear el único NFT, y voy a hacer clic en Crear Firma de la transacción. Y genial, hemos creado nuestro primer NFT, ¿ bastante impresionante? Ahora, veamos si podemos ver este NFT cuando iniciemos sesión en nuestro proyecto Bien.