Esta plantilla exclusiva de UEFN contiene un pequeño juego al estilo de fábrica que incluye persistencia y progresión sin conexión.
Los tutoriales dentro de la plantilla requieren conocimientos básicos de Unreal Editor para Fortnite (UEFN) y la capacidad de abrir un archivo de Verse. No hay más requisitos. En la propia plantilla, se ofrecen las instrucciones del tutorial.
Te damos la bienvenida a la Fábrica de juguetes de Santa, una plantilla de LEGO® que se centra en la retención de los jugadores a través de bucles de juego atractivos que utilizan lo siguiente:
Persistencia: la capacidad de guardar los datos del jugador entre sesiones de juego.
Progresión sin conexión: la fábrica sigue produciendo juguetes incluso cuando el jugador no está en el juego, siempre y cuando haya espacio en el contenedor de la fábrica mientras el bosque de bastones de caramelo siga creciendo con o sin jugadores.
Con ambos combinados, también puedes crear mecánicas diarias que animen a los jugadores a seguir volviendo a tu isla. ¡Usa esta plantilla para aprender a implementar estas mecánicas en tu propia y acogedora isla de vacaciones!
En la plantilla, se incluyen tres tutoriales breves.
Principiante: muestra cómo cambiar el tiempo de crecimiento del bosque de bastones de caramelo en Verse.
Intermedio: sirve de guía para editar una variable en Verse.
Avanzado: permite modificar y añadir código de Verse.
En cada tutorial dentro del proyecto, se muestra cómo usar Verse para lograr la mecánica utilizada.
La plantilla se divide en tres partes:
Jugar: empieza jugando el juego durante 5 a 10 minutos para hacerte una idea de cómo funciona.
Crear: a continuación, crearás tres modificaciones siguiendo los desafíos del tutorial.
Explorar: finalmente, puedes explorar por tu cuenta y desarmar todo el código documentado para ver cómo funciona y, luego, crear tu propio juego para las fiestas.
Jugar
Desde UEFN, carga la plantilla. La encontrarás con las otras plantillas de LEGO. Empieza a jugar.
En el juego, para continuar con la misión, acércate a Sir Pawlar, quien te explicará qué hacer.
Sigue las instrucciones del juego.
En algún momento, en el tutorial, se te pedirá que finalices el juego. Presiona Esc y, luego, Terminar partida.
Espera 2 minutos.
Después de que pasen los 2 minutos, presiona Esc nuevamente; luego, presiona Iniciar partida.
Puede parecer extraño pedir esto, pero demuestra un punto muy importante. En este juego, las cosas siguen sucediendo mientras no estás jugando. La fábrica sigue produciendo, y el bosque de bastones de caramelo sigue creciendo.
Estas son mecánicas clave que pueden animar a los jugadores a volver a tu juego para cosechar o recolectar cultivos que crecieron o recursos que se produjeron a lo largo del tiempo.
Cuando regreses al juego, podrás ver lo que se produjo mientras no estabas en el juego:
Esto se hace en el archivo factory_manager.verse. Mide cuánto tiempo pasó mientras el jugador estaba fuera usando datos persistentes y el dispositivo de reloj en tiempo real. A continuación, calcula cuánto produciría la fábrica durante ese tiempo.
Después de producir la segunda construcción de fábrica, recibirás un mensaje para que vuelvas a UEFN.
¡Completaste tu primer tutorial! Es hora de pasar a los desafíos creativos.
Crear
¡Hora de divertirte! Tienes tres desafíos esperando.
Busca el primero, Freshman Flapjack. Te está esperando en uno de los tres cuadrados amarillos.
Desafío para principiantes: modifica el tiempo de regeneración del bastón de caramelo
El primer desafío es sencillo. Te mostrará cuánto puedes cambiar el juego con solo ajustar algunos valores, en este caso, el tiempo de regeneración de los campos de bastones de caramelo.
Junto a Freshman Flapjack, verás el dispositivo creado con Verse de bastón de caramelo.
Selecciónalo y asegúrate de haber seleccionado, a su vez, el panel de detalles.
Ajusta el parámetro
CandyCaneRegrowthTime; experimenta y observa cómo afecta esto al juego.
Desafío intermedio: modifica los precios de las mejoras
El segundo desafío te adentrará en el propio código de Verse.
Nuevamente, verás cuánto puedes cambiar el ritmo y la experiencia del juego con solo ajustar los precios de las mejoras de tu fábrica.
Abre el archivo upgrade_config.verse desde el explorador de Verse.
Puedes ver todos los precios de las mejoras de los distintos elementos de la fábrica. El primer lote de precios es para los cinturones de fábrica. Hay cuatro cinturones en la fábrica, por lo que, en la tabla de precios, se muestran cuatro columnas. Cada fila de la tabla es el precio por mejorar un cinturón a ese nivel.
Verse# This file contains the data used to configure the factory in the game. # This includes upgrade prices, max levels, production speeds, storage capacities and more. # It also contains functions for getting all this data. using { /Verse.org/Simulation } using { Persistence } # Blubberchops: "Looks like this is the place to modify the upgrade prices for belts."Sigue el consejo de Blubberchops y abarata el precio de mejorar los cinturones. También puedes experimentar aumentando el precio para que el ritmo del juego sea más lento.
Cuando hayas terminado, compila el código de Verse y aplica los cambios de Verse para probarlos.
Para obtener más información sobre lo que haces en este paso, consulta Cómo modificar y ejecutar tu primer programa de Verse.
Ten en cuenta que cada vez que apliques cambios en la sesión, se restablecerá el progreso de fábrica.
Desafío experto: el regalo diario
En el tercer y último desafío, deberás trabajar en el regalo diario junto al profesor Flopkins.
Para ello, tendrás que añadir algunos datos persistentes adicionales para almacenar cuándo se abrió el regalo por última vez. También tendrás que corregir la lógica en el dispositivo de regalo diario creado con Verse.
Consulta Cómo usar datos persistentes para obtener más información sobre cómo trabajar con datos persistentes en Verse.
Si necesitas un poco de ayuda con este desafío, echa un vistazo a la sección Dispositivo de regalo diario que aparece a continuación.
Abre el archivo player_info.verse desde el explorador de Verse.
Busca los comentarios del profesor Flopkins cerca de la parte superior del archivo.
Asegúrate de añadir un campo de matriz
date_and_timea la claseplayer_infopara almacenar la última vez que se abrió el regalo. Asegúrate también de que el valor del campo se establezca en el constructorMakePlayerInfo.Verse# This file defines player_info, the collection of persistable information stored for each player. # It also contains functions for creating, updating and returning information about a player. using { /Verse.org/Simulation } using { Config } using { Time } # Maps each player to their persisted information. var PlayerInfoMap:weak_map(player, player_info) = map{}Corrige las funciones para obtener y configurar el campo recién añadido. Esta vez, busca los comentarios del profesor Flopkins cerca del final del archivo.
Completa las líneas que faltan para que las funciones se comporten correctamente. Puedes ver algunas de las otras funciones en el archivo para inspirarte.
Verse# This file defines player_info, the collection of persistable information stored for each player. # It also contains functions for creating, updating and returning information about a player. using { /Verse.org/Simulation } using { Config } using { Time } # Maps each player to their persisted information. var PlayerInfoMap:weak_map(player, player_info) = map{}Con la nueva funcionalidad lista para los datos persistentes, abre el archivo daily_gift.verse para cambiar la lógica que hace que el regalo aparezca solo una vez al día.
Verás que faltan dos piezas fundamentales:
Almacenar la hora actual en la que se abrió el regalo.
Comprobar si se pasó la fecha desde la última vez que se abrió el regalo.
Sigue los comentarios del profesor y añade el código que falta.
Verse# When the gift is opened (harvested), give the selected player gold. OnHarvesting(Agent:agent):void= # Hide gift. set Opened = true PropManipulator.HideProps() # Show effect. spawn: ShowGiftEffect()Verse# Succeeds if the current date is different from the opening time. IsDateRolledOver()<decides><transacts>:void= # Get the current date. Now := RealTime.GetDateAndTime() # Professor Flopkins: "Hmm, the code to determine if the date has rolled over is also missing." # "Let's see.. first we'll get the selected player." # "Look in the OnHarvesting function to see how to do that."¡Ya puedes probar tu solución! Compila el código de Verse y aplica los cambios de Verse para probarlo en tu sesión.
Puedes usar el botón de depuración de Sub Zero como atajo para saltar en el tiempo y probar si el regalo reaparece cuando cambia la fecha.
Explorar
Ahora que superaste tus desafíos, es hora de explorar algunos de los otros dispositivos utilizados en esta plantilla.
Dispositivo de reloj en tiempo real
El dispositivo de reloj en tiempo real te ofrece la hora actual en tiempo universal coordinado (UTC). También anima las manecillas de un reloj.
Puedes utilizarlo para organizar eventos que deberían ocurrir a una hora determinada cada día o para realizar un seguimiento del tiempo transcurrido.
Viene con una función de prueba integrada que puede desplazar la hora actual. Echa un vistazo los archivos real_time_device.verse, date_and_time.verse y time_interval.verse.
Dispositivo de campo de bastones de caramelo
El dispositivo de campo de bastones de caramelo creado con Verse realiza un seguimiento de un campo de bastones de caramelo recolectables. Ofrece recursos cuando se recolectan y los hace regenerar con el tiempo. Puedes usarlo para todo tipo de recursos regenerados. Echa un vistazo al archivo candy_cane_field.verse.
Módulo de persistencia
Este módulo contiene todos los datos persistentes asociados con cada jugador. La clase principal es player_info en el archivo player_info.verse.
En este archivo, también se incluyen todas las funciones para leer y manipular los datos. También deberías revisar las otras clases en el módulo: cada una define algunos de los datos almacenados para cada jugador. Puedes modificarlas o añadir más datos según tus necesidades.
# This file defines player_info, the collection of persistable information stored for each player.
# It also contains functions for creating, updating and returning information about a player.
using { /Verse.org/Simulation }
using { Config }
using { Time }
# Maps each player to their persisted information.
var PlayerInfoMap:weak_map(player, player_info) = map{}
# This tracks all persistable information for a player.
player_info := class<final><persistable>:
# The version of the current player info.
Dispositivo de regalo diario
Este dispositivo genera un regalo diario, ¡o al menos lo generaría si funcionara!
Esta es una solución para el desafío experto a fin de ayudarte a aprovechar al máximo el dispositivo de regalo diario creado con Verse. Puedes usarlo para realizar todo tipo de eventos y recompensas diarias.
Comienza añadiendo los datos requeridos a la clase
player_infoy modifica el constructorMakePlayerInfoen el archivo player_info.verse.Verse# This tracks all persistable information for a player. player_info := class<final><persistable>: # The version of the current player info. Version:int = 0 # Latest harvest times of all candy canes. CandyCaneHarvestTimes:[]date_and_time = array{date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}} # The amount of gold the player has.Completa las funciones
SetGiftOpeningTimeyGetGiftOpeningTime:Verse# Sets the gift opening time for the player. SetGiftOpeningTime<public>(Player:player, GiftOpeningTime:date_and_time)<decides><transacts>:void= CheckPlayerInfoForPlayer[Player] SourceInfo := PlayerInfoMap[Player] set PlayerInfoMap[Player] = player_info: MakePlayerInfo<constructor>(SourceInfo) GiftOpeningTime := GiftOpeningTime # Gets the gift opening time for the player.Dirige tu atención a la clase
daily_giften el archivo daily_gift.verse. Primero, completa el almacenamiento de la hora actual al abrir el regalo:Verse# When the gift is opened (harvested), give the selected player gold. OnHarvesting(Agent:agent):void= # Hide gift. set Opened = true PropManipulator.HideProps() # Show effect. spawn: ShowGiftEffect()Implementa la función
IsDateRolledOver:Verse# Succeeds if the current date is different from the opening time. IsDateRolledOver()<decides><transacts>:void= # Get the current date. Now := RealTime.GetDateAndTime() SelectedPlayer := MaybeSelectedPlayer? GiftOpeningTime := GetGiftOpeningTime[SelectedPlayer] Now.Years <> GiftOpeningTime.Years or Now.Months <> GiftOpeningTime.Months or Now.Days <> GiftOpeningTime.Days
Dispositivo de administrador de fábrica
El dispositivo de administrador de fábrica creado con Verse inicializa y ejecuta la fábrica. Se encarga del cálculo de cuántos productos se crearon mientras el jugador no estaba.
Este cálculo puede resultar complejo, ya que el almacenamiento de fábrica se comparte entre varios cinturones de fábrica. En una configuración más sencilla, podrías calcular la cantidad de productos fabricados si calculas cuánto tiempo transcurrió desde la última producción y, luego, lo divides por la velocidad de producción.