Evoluciona tu juego
Utiliza las herramientas que conoces y te gustan para forjar juegos de cadenas de bloques con un diseño avanzado, un crecimiento inteligente y una mejor monetización.
Evoluciona tu juego
Utiliza las herramientas que conoces y te gustan para forjar juegos de cadenas de bloques con un diseño avanzado, un crecimiento inteligente y una mejor monetización.
¡Gracias! Por favor, compruebe su correo electrónico.
Error

La pila tecnológica que alimenta las reliquias perdidas

Una inmersión técnica profunda en cómo el desarrollador de Lost Relics, Cliff Cawley, usó la plataforma y el motor de la unidad de Enjin para construir el primer ARPG alimentado por Enjin.

Lo siguiente es un artículo de un invitado de Cliff Cawleycreador de Reliquias perdidas.

Han pasado ocho meses desde que lancé la primera versión jugable de Reliquias Perdidas (antes "Artefactos Olvidados"), un hackeo de mazmorra que funciona en Ethereum Mainnet a través de la Plataforma Enjin.

Reliquias Perdidas fue el primer proyecto aceptado en el programa de la Chispa de Enjin. Después de perderme el programa inicial de adopción temprana por estar ocupado con otros trabajos, aproveché la oportunidad de unirme a la Chispa y al ecosistema de Enjin y embarcarme en mi aventura en el espacio de los juegos de cadenas de bloques.

Aquí está mi experiencia desde entonces, junto con las mejores prácticas y recomendaciones para aprovechar al máximo la plataforma de desarrollo de juegos blockchain de Enjin.

Lanzamiento inicial

El primer lanzamiento del juego en mayo de 2019 fue rápidamente seguido por"Stampede", un evento que usé para ver lo bien que funcionaban los sistemas que había construido bajo presión, y si había algo más que necesitaba construir y mantener.

Originalmente había planeado apagar el servidor después del evento de la Estampida para pasar un tiempo reorganizando, planeando y mejorando. Sin embargo, los participantes lo disfrutaron tanto, que me pidieron que mantuviera el servidor en funcionamiento y les permitiera seguir jugando.

Con un mínimo de tiempo de inactividad para las actualizaciones, el juego ha estado en vivo durante ocho meses y contando!

El segundo evento,"Las Tabletas Caídas", comenzó el 1 de julio y probó el paso de los activos de la cadena de bloqueo entre los jugadores para completar un objetivo.

Como recompensa, los jugadores tenían la oportunidad de encontrar un botín de alto nivel dentro de una habitación secreta del tesoro después de activar y pasar una de las tres tabletas.

Lanzé el uso de PlayFab para mis servicios de backend, lo que me permitió desplegar rápidamente sistemas cruciales como cuentas de jugador, gestión de inventario y scripts del lado del servidor.

PlayFab es un servicio asombroso, simple y fácil de usar si estás empezando. Maneja muchos sistemas para ti y tiene algunas características fantásticas, como la gestión de jugadores, inventarios de jugadores, base de datos de artículos, tableros de análisis y tablas de clasificación.

Recomiendo mucho el PlayFab, pero el kilometraje puede variar dependiendo de lo que intente conseguir.

Me encontré con problemas en la forma en que necesitaba que las cosas funcionaran, algunos de los cuales detallo a continuación. En los meses desde que usé PlayFab por primera vez, han hecho algunas mejoras y cambios significativos, por lo que algunos de los problemas con los que me topé pueden haber sido resueltos ya.

Integración de Enjin

Anuncié públicamente la integración de Enjin con una ruta de usuario completa desde el inicio de sesión hasta la obtención de un artículo el 29 de marzo.

Aunque es increíblemente rápido demostrar que puedes hacer este proceso usando el SDK de Blockchain de Enjin para Unity, no querrás lanzar tu juego usando el SDK para hacer operaciones de escritura (por ejemplo, crear, enviar y acuñar objetos).

GUI del SDK del lado del cliente

El SDK incluye dos componentes principales: una interfaz gráfica de edición para gestionar los proyectos y una API para realizar consultas y mutaciones. La GUI hace que sea muy sencillo crear, editar, acuñar y fundir tus elementos.

Cuando empecé, esta fue mi gracia salvadora.

Me permitió ver visualmente lo que estaba disponible y lo que podía hacer, sin tener que consultar directamente a GraphQL, que todavía no estaba seguro de cómo utilizar.

Podía ver y editar mis artículos en un solo lugar.

Eventualmente, querrás mover este proceso a algo automatizado, sin embargo. Aunque es una gran introducción, no es algo que debas usar a largo plazo si estás creando muchos elementos.

Recientemente, Enjin actualizó su consola web para incluir las herramientas de edición anteriores, así que ahora también puedes hacer lo mismo directamente desde su panel web, lo cual es impresionante.

API del SDK del lado del cliente

El código de la API es un envoltorio de las llamadas de GraphQL, e incluye el código para conectarse al servicio de empuje para las actualizaciones (por ejemplo, cuando se actualiza el saldo de una cartera).

Esta API sólo debe ser utilizada con una identidad que haya tenido permiso limitado sólo a las vistas. Cualquier permiso que dé la posibilidad de modificar debe ser eliminado.

El único permiso de visualización que necesitas es el de ViewBalances.

Luego ingresas tus datos de acceso en el SDK, y los guardará para que los use tu cliente.

Ten en cuenta que estos detalles se almacenan en texto plano en tu binario del juego. Si haces esto, le das a quienquiera que descargue tu juego acceso completo a esa cuenta de Enjin, así que asegúrate de que esté bloqueada.

Podrías encriptar estos detalles en el binario del juego, pero es mucho más fácil de lo que crees invertir esos detalles y recuperarlos del juego.

Personalmente, le advertiría que no lo haga porque puede añadir accidentalmente sus datos de administración mientras desarrolla, olvidarse de eliminarlos y liberar el acceso completo en una construcción.

También va a hacer más consultas a Enjin porque su servidor todavía necesita consultar la misma información para validar las operaciones, y el cliente entonces necesita consultarlas de nuevo. Si Enjin implementó cuotas para las llamadas a la API, entonces es posible que más adelante tengas que encontrar formas creativas de reducir las llamadas de tus clientes.

Si todo está en el servidor en su lugar, puedes añadir el caching allí y luego devolver una instantánea al cliente. Si guardas ese caché en tu servidor y Enjin o Ethereum se cae (lo que ha ocurrido dos veces en los ocho meses que llevo en activo), tus jugadores podrán seguir usando sus objetos.

No recomiendo usar el SDK de Unity de Enjin (o cualquier otro SDK de motor de cliente) para cualquier cosa importante como la creación o la acuñación de moneda para su juego (por ejemplo, si envía un artículo a un jugador por completar un nivel).

Quieres que un servidor que controlas totalmente sea el agente autorizado, y la única entidad que hace estas operaciones.

En mi caso, tengo dos inventarios para un jugador: virtual (cualquier artículo que no esté basado en la cadena de bloques, o artículos que estén basados en la cadena de bloques y que estén en la cola esperando a ser enviados) y la cadena de bloques.

El servidor consulta ambos, los combina, los almacena en caché y envía el dinero al cliente. El caché se vacía de vez en cuando, pero el cliente también monitoriza el canal de empuje para los cambios. El cliente le dice al servidor sobre esto durante la siguiente actualización; si se cambian, el servidor también vacía el caché para ese usuario.

GraphQL

En su núcleo, el SDK de la Unidad llama al servicio GraphQL de Enjin.

Usé el SDK de la Unidad de Enjin como un recurso de aprendizaje. La mayoría de mis primeros conocimientos sobre cómo se deben armar las cosas vinieron de la lectura del código fuente del SDK.

Si estás esperando otros SDKs como un Unreal, te recomiendo que te lances y empieces a llamar directamente a GraphQL desde tu servidor, ya que es lo que vas a necesitar hacer de todas formas.

La plataforma de Enjin: Mejores prácticas

Usar un servidor

Asegúrate de que todas tus operaciones de mutación de cadenas de bloqueo se realicen sólo en un servidor seguro.

Nunca querrás que tu cliente (sea nativo de Windows, Mac, Android, iOS, Web) esté ejecutando llamadas GraphQL directamente porque permite a cualquiera con suficiente conocimiento hacer esas llamadas por sí mismo fuera de tu cliente/juego.

Cola y envío por lotes de artículos

Cuando lanzaba el evento de la Estampida, enviaba los artículos a los jugadores tan pronto como salían con éxito de la mazmorra.

Esto funcionó bien, y envié miles de artículos muy rápidamente, hasta que la red del Etereo se congestionó.

Descubrí que puede tener unas 16 transacciones pendientes en su cuenta (esperando ser minadas) antes de que cualquiera de las llamadas relacionadas con la cadena de bloqueo de Enjin empiece a devolver un error. Si no rastreó qué artículos estaba intentando manipular, ahora no tiene ningún registro al que recurrir.

Se entiende que los artículos perdidos durante este tiempo en las Reliquias Perdidas se han perdido en la lava de las mazmorras.

También cuesta gas para cada transacción, y la cantidad de gas que se paga aumenta con la cantidad de datos.

En aquel entonces, enviaba un solo artículo a una cartera de destino en una sola transacción usando un envío estándar (mucho ETH sólo para enviar artículos?).

En su lugar, recomiendo el uso de Envío Avanzado para todos sus propósitos de envío. Puede enviar varios artículos a varias direcciones en una sola transacción.

Hay límites porque el tamaño de la transacción en sí mismo tiene un límite, pero una guía aproximada no es más de 100 entradas en la matriz de transferencia. Tenga en cuenta que el recuento de los artículos no importa si está enviando fichas fungibles (FT), pero las fichas no fungibles (NFT) sólo pueden ser una por entrada.

Transacción devuelta de la tiendaID

Casi todas las llamadas de mutación a GraphQL de Enjin devuelven un transactionId. Es importante almacenar esto porque se puede utilizar para consultar el estado de lo que acaba de hacer. No lo almacene simplemente en un log, almacénelo con sus datos para que pueda usarlo para consultar el estado más tarde.

Por ejemplo, si emite un envío, puede utilizar esta transacciónId para determinar si el envío tuvo éxito, está pendiente en la cadena de bloqueo o ha fallado.

Una consulta común de GraphQL que uso cuando investigo una transacción es:

query {
 EnjinTransactions(
   id: TRANSACTION_ID_HERE,
 ) {
   id
   transactionId
   type
   state    
   error
   nonce
   token {
     id
     name
   }
   retryState
 }
}

Esta consulta devuelve suficiente información en una llamada para determinar la causa de un error o el estado si no hubo ningún error. La mayoría de los procesos de mi servidor utilizan esta consulta para determinar el estado.

Por ejemplo, para determinar si alguien completó con éxito una consulta, utilizo esta consulta para determinar si la transacciónId que emití al jugador para los requisitos de una consulta fue enviada con éxito a la cartera del juego.

Envío avanzado

El Envío Avanzado es impresionante. Puedes usarlo para enviar artículos a varias personas o para solicitarles artículos. Lo usé para implementar las misiones que ves en Reliquias Perdidas.

En el siguiente ejemplo, estoy enviando 20.000 FT de TOKENID1 y 10.000 FT de TOKENID2 de mi parte a dos carteras diferentes en una sola transacción:

mutation advancedSend {
 CreateEnjinRequest(identity_id: SENDER_ID, type: ADVANCED_SEND, advanced_send_token_data: {
 transfers: [
 {from_id: SENDER_ID, to: "0xTARGETWALLETADDRESS1", token_id: "TOKENID1", value: "20000"},
{from_id: SENDER_ID, to: "0xTARGETWALLETADDRESS2", token_id: "TOKENID2", value: "10000"}
 ]})
{
   id
   encoded_data
 }
}

Puedes añadir más elementos a la matriz de transferencias para transferir más de una vez; sólo asegúrate de no añadir más de 100.

Para solicitar artículos, sólo tienes que usar el ID de identidad del usuario al que estás solicitando. Ten en cuenta que el identity_id de un usuario es específico de tu plataforma, y debe tener vinculado su cartera y el gasto aprobado de ENJ.

Permitir la congestión

Cuando estás probando a Kovan, las transacciones ocurren muy rápidamente. La mayoría de las veces esto también es cierto en Mainnet, pero a veces hay problemas.

Algunos problemas comunes que he encontrado son:

  • El etéreo está congestionado y el precio de la gasolina ha subido de tal manera que las transacciones que usted o su jugador han firmado ya no son recogidas por los mineros (porque fueron firmadas con la tarifa de gasolina más baja).
  • Los errores en los sistemas de Enjin han resultado en transacciones que no se actualizan en su sistema GraphQL, aunque han procesado con éxito

Diseñe sus interacciones de cadena de bloqueo de manera que sean menos in-the-moment o asegúrese de tener una manera de anular manualmente el procesamiento en caso de que el tiempo de procesamiento esté excediendo lo que es aceptable.

Definitivamente querrás asegurarte de que cualquier interacción de cadena de bloqueo pueda ser interrumpida y reanudada más tarde en caso de que los precios del gas hayan causado retrasos.

Por ejemplo, si permites que tus jugadores elaboren un objeto, el proceso de elaboración debería proporcionar suficiente información sobre el progreso y permitir al jugador interrumpir el proceso y reanudarlo más tarde si considera que ha esperado demasiado tiempo.

Puedes ver cómo funciona esto en Reliquias Perdidas completando una búsqueda o abriendo un baúl de almacenamiento.

Además, diseñe su lógica de servidor para permitirle anular la comprobación del estado de una transacción de blockchain. En mi panel de administración, proporciono un botón que me permite forzar el estado de la cadena de bloques como exitoso. He utilizado esto muy a menudo en el último par de meses cuando las transacciones blockchain procesado correctamente, pero no estaban siendo vistos por Enjin.

Sólo asegúrese de no aprobar las transacciones que no se hayan procesado con éxito, lo cual puede hacer comprobando el hash de la transacción en EnjinX.

Esta solución alternativa me ha permitido verificar manualmente que la transacción fue exitosa y luego empujar la búsqueda al estado de "listo para reclamar la recompensa" para que mis jugadores puedan continuar.

Backend v1: PlayFab

Inicialmente lo lancé con mi backend potenciado por PlayFab y usé el catálogo de artículos y las características de la mesa de caída bastante extensamente. En un juego tradicional en el que hay un número ilimitado de artículos, el sistema funciona muy bien.

Artículos de suministro limitado

Si estás manejando artículos de suministro limitado, puedes encontrarte con algunos de los mismos problemas que yo.

Como la mayoría de mis artículos eran limitados, necesitaba asegurarme de que no estaba regalando más artículos de los que tenía en la cartera. Sería una mala forma de mostrarle a un jugador que acababa de ganar el ultra-raro GodSlayer pero no poder enviárselo porque me había quedado sin existencias.

PlayFab tiene una función de "edición limitada" que puedes habilitar por cada artículo. Esto parecía ser exactamente lo que necesitaba usar, sin embargo tienen un límite arbitrario de 100 artículos en total de . Creo que esto puede haber sido aumentado a 1.000 ahora, pero ese número todavía no es suficiente si tienes cualquier número de artículos por encima de ese valor.

Este fue el primer obstáculo que encontré, así que tuve que encontrar una solución creativa a su alrededor. Para ello, rastreé datos personalizados separados con el artículo. Estos datos personalizados rastrearon el total y el suministro restante.

Cada vez que le daba un objeto a un jugador, comprobaba si este valor había bajado a 25, y si lo había hecho, lo rellenaba hasta 100 (si había suficiente suministro restante). Era una tontería, pero funcionaba y me permitía seguir trabajando con sus sistemas.

Guión del servidor

Personalmente prefiero C#. Empecé mis primeros días de codificación en el instituto, aprendiendo QBasic y más tarde Visual Basic, y luego pasé a C y C++ cuando empecé a trabajar en la industria de los juegos. Cogí un montón de otros lenguajes a lo largo del camino, incluyendo los usados para la web (PHP, Javascript, etc.).

PlayFab usa Javascript para sus secuencias de comandos del lado del servidor, y aunque sé cómo codificar en Javascript, prefiero C#. El resto de mi pila era todo C#, desde Unity hasta mis herramientas personalizadas, así que esto era una desventaja para mí, pero algo con lo que podía vivir por el momento.

PlayFab ha hecho avances para permitirte ejecutar C#, y creo que están a punto de lanzarlo pronto (actualmente está en preestreno privado).

El primer código del lado del servidor escrito en Javascript

Una limitación de los scripts del servidor de PlayFab es que su script no puede tardar más de 10 segundos en ejecutarse. Si lo hace, se termina, según mi experiencia, después de unos 9,3 segundos.

Aunque la mayoría de los casos de uso nunca se acercan a este límite, empecé a darle dentro de un mes mientras añadía más y más llamadas a la API de Enjin.

Las llamadas de Enjin GraphQL desde los servidores de PlayFab a veces tardaban hasta un segundo en ejecutarse, dependiendo de la cantidad de datos que estaba consultando (por ejemplo, la cantidad de artículos que los jugadores tenían en sus billeteras), o si hacían una nueva versión en su servidor. Mezcla un par de llamadas de Enjin con llamadas de PlayFab y rápidamente se suma.

Si hubiera algún otro contratiempo en la red, una sola llamada a Enjin podría tardar un par de segundos o más.

A medida que añadí soporte para más artículos del Multiverso y más llamadas a Enjin, descubrí que las funciones escritas en los scripts del servidor de PlayFab sólo se ejecutaban parcialmente.

No tenía ni idea de cuánto se había ejecutado la función y descubrí que la única forma de aumentar el tiempo de ejecución era subir al nivel del Enterprise. Ya había pasado de Free a Indie, y luego a Pro para obtener algún nivel de soporte unas semanas antes, y no estaba preparado para pasar al nivel más alto posible sólo por esta función.

Backend v1.5: Bandazo temporal

No había manera de evitar el límite de tiempo de ejecución, así que tuve que encontrar una solución rápidamente.

Decidí convertir toda la lógica del servidor y otros códigos de los scripts del servidor de PlayFab (Javascript) a código C# y ejecutarlo en Microsoft Azure como un servicio web en su lugar. Esto me permitió tener un control total sobre el tiempo de ejecución de los scripts y me permitió seguir usando los servicios de PlayFab desde mi servidor.

Me llevó una semana convertir todo el código. Ahora estaba ejecutando mi código en mi propio servicio web Azure y confiaba en PlayFab para todas las cuentas de usuario, objetos, inventario, tabla de clasificación, etc.

Backend v1.5 Sunset: Adiós PlayFab

Durante el tiempo que estuve en la plataforma PlayFab, me encontré con varios errores, incluyendo un error crítico que afectó las limitadas características de suministro que estaba usando. No tenía control sobre cada uno de los problemas que encontré y tuve que esperar a que el equipo de soporte de PlayFab respondiera.

Los niveles Libre e Indie ofrecían sólo ayuda en el foro, con un tiempo de respuesta generalmente de 24 a 36 horas. Para algunos de los problemas más críticos que encontré, terminé actualizando a Pro porque ofrecía un soporte dedicado. Desafortunadamente, el soporte dedicado tomó casi tanto tiempo como los foros para obtener una respuesta, y parecía que estaban más ansiosos por cerrar los problemas que por resolverlos.

También tuve un problema de larga data en el que las cuentas de los jugadores ya no se cargaban una vez que había más de 2.000 eventos de registro de artículos en una cuenta dada. Para solucionarlo, sugerí que simplemente añadieran soporte de paginación, pero el problema nunca se solucionó y el soporte de PlayFab lo consideró como una "futura solicitud de características" que debía ser votada.

A medida que más jugadores añadían y quitaban objetos de sus cuentas, más cuentas dejaban de cargarse. Junto con los problemas de soporte, esto fue la gota que colmó el vaso para mí.

Era hora de empezar de nuevo usando mi propia solución personalizada.

Backend v2: Solución personalizada

He escrito muchos servicios de fondo a lo largo de los años, por lo que sabía que tenía la capacidad de asumir esta tarea gigantesca de recrear una gran mayoría de los servicios de PlayFab.

Fue a mediados de agosto, y empecé a trabajar para eliminar la dependencia de PlayFab. Recreé varios sistemas uno a uno y los puse en línea una vez que me alegré de que funcionaran de forma similar a los de PlayFab.

Terminé continuando con Microsoft Azure, ya que tenía la mayor experiencia con él en los últimos dos años y soportaban nativamente la pila de C# .Net Core que ya estaba usando. Creé una base de datos impulsada por Azure Sql e hice uso de su CDN, Service Bus, Blob Storage, y Application Insights.

En primer lugar, creé mi propio sistema de autenticación de usuarios, que se basaba en la autenticación de correo electrónico sin contraseña (similar al funcionamiento de la mecánica de "contraseña olvidada"). Una vez que este sistema manejó de manera transparente el lado de la autenticación, comencé a trabajar en la recreación de la base de datos de artículos.

Vista previa del Backend de administración

Una vez que la base de datos de artículos funcionó sin problemas, añadí soporte de inventario de jugadores, gestión de cuentas de jugadores, seguimiento de aventuras, tablas de clasificación, tienda, y un backend de administración, entre otros servicios más pequeños.

El 17 de septiembre, lancé con éxito el nuevo backend con una completa actualización del sitio web también. Después de algunas pequeñas correcciones, ha estado funcionando fantásticamente desde entonces, y continúo construyéndolo y mejorándolo.

Panel de administración

Algunos desarrolladores simplemente configuran el acceso directo a sus bases de datos, ejecutan consultas SQL para leer y escribir datos y administran sus cuentas, y eso es suficiente. Yo, sin embargo, prefiero reducir el componente de error humano y crear interfaces que cualquiera pueda usar.

He creado un sencillo panel de administración para facilitar esto y me da un panel de control para gestionar y administrar las Reliquias Perdidas.

Utilizo el panel de administración para crear mis elementos de juego (incluidos los de la cadena de bloques), configurar nuevos eventos, aventuras y misiones, todo ello sin necesidad de ejecutar comandos SQL hechos a mano y para asegurarme de que se siguen determinadas reglas al introducir los datos.

Edición de elementos

Artículo pendiente de creación de la cadena de bloques

Si el sistema detecta que un artículo es un artículo de cadena de bloqueo pero aún no ha sido creado, puedo crearlo directamente desde mi panel de administración.

Cuando hago clic en el botón "Crear elemento de la cadena de bloques", el elemento se añade a una cola para su procesamiento. Es recogido por un Web Job del servidor que emitirá llamadas a Enjin para crear el token con los valores introducidos, establecer los metadatos y acuñar todas las instancias.

Recomiendo encarecidamente la creación de sistemas automatizados como este para sus propios proyectos, ya que elimina el componente de error humano.

La cadena de bloqueo envía una cola...

Después del evento de la estampida, me di cuenta de que necesitaba una cola para procesar mis transacciones más tarde. El beneficio de una cola es poder comprobar varias condiciones previas antes de enviar los artículos.

Compruebo lo siguiente antes de enviar los artículos:

  1. ¿La cola de envío está activada? Si no lo está, retrasa el envío.
  2. ¿La última transacción que enviamos se ha completado con éxito? Si no, retrasa el envío.
  3. ¿Es el precio de la gasolina un precio razonable? Si no lo es, retrasa el envío.
  4. ¿Hay al menos 100 artículos únicos para enviar (es decir, un lote completo), o el artículo más antiguo que se ha añadido tiene más de 12 horas? Si no, retrasa el envío.

Si se cumplen todas las condiciones anteriores, entonces enviaré un lote de artículos.

Almaceno el ID de la transacción resultante y lo reviso regularmente para ver si tiene éxito.

El paso 4 se repite hasta que no queden más lotes completos, o después de que hayan pasado unos 30 minutos sin que cambie el estado de la transacción.

Todo el proceso se ejecuta cada dos minutos como un Web Job en Azure.

Hecho con la unidad

Cuando trabajaba en la industria de los juegos, cada compañía para la que trabajaba tenía su propio motor de juego.

Cada motor tenía sus propios pros y contras y normalmente estaba limitado por los conocimientos y la experiencia del personal de la empresa respectiva.

Si cambiabas de compañía, la mayoría de los conocimientos sobre motores que tenías eran ahora inútiles porque el motor de la siguiente compañía era muy diferente al que usabas antes. Generalmente no había normas que se aplicaran en toda la industria durante este tiempo, y cada compañía se aventuró en su propio camino.

La unidad ha cambiado esto y ha añadido la tan necesaria competencia y delicadeza, lo que también ha hecho bajar los precios de motores como el Unreal.

Por aquel entonces, las empresas para las que trabajaba nunca concedían licencias a otros motores porque los costes de las licencias consumían casi un tercio del presupuesto del juego. Ahora, es una historia totalmente diferente (más asequible).

La tienda de activos

Soy programador de profesión, pero también me gusta el arte, el audio y el diseño.

La facilidad de uso del motor de la Unidad, junto con su almacén de activos, me ha permitido crear rápidamente Reliquias Perdidas desde cero, todo por mí mismo.

Este tipo de facilidad de uso y potencia era inaudito hace 10 años.

Conservo muchas de mis obras de arte de la tienda Unity Asset y luego las personalizo para que encajen en el universo de las Reliquias Perdidas. Este es un proceso común para los desarrolladores independientes porque proporciona un poderoso impulso en la productividad.

Editor

Confío en la Unidad para dar vida al mundo de las Reliquias Perdidas.

Si alguna vez has escrito un motor, sabrás cuánto maneja la Unidad para ti (pista: es mucho). Yo diseño los niveles, creo el código para el juego, y previsualizo todo dentro del Editor de Unidad.

Unity hace gran parte del trabajo pesado para que yo no tenga que hacerlo. En cambio, puedo concentrarme en el juego y crear experiencias atractivas y divertidas para que todos jueguen.

Si has llegado hasta aquí, gracias por leer.

Si eres un desarrollador que se embarca en un viaje similar, ¡bienvenido al movimiento!

Si eres un jugador de Lost Relics, gracias por formar parte de este viaje.

Evoluciona tu juego

Utiliza las herramientas que conoces y te gustan para forjar juegos de cadenas de bloques con un diseño avanzado, un crecimiento inteligente y una mejor monetización.

Empiece

Evoluciona tu juego

Utiliza las herramientas que conoces y te gustan para forjar juegos de cadenas de bloques con un diseño avanzado, un crecimiento inteligente y una mejor monetización.

¡Gracias! Por favor, compruebe su correo electrónico.
Error

También podrías disfrutar