Esta plantilla exclusiva para UEFN contiene un pequeño juego de estilo fábrica que cuenta con persistencia y progreso sin conexión.
Los tutoriales de la plantilla requieren conocimientos básicos de Unreal Editor para Fortnite (UEFN) y saber abrir un archivo de Verse. No hay requisitos adicionales. La propia plantilla contiene las instrucciones del tutorial.
Te damos la bienvenida a la Fábrica de juguetes de Papá Noel, una plantilla de LEGO® que se centra en la fidelización de los jugadores mediante atractivos bucles de juego que utilizan:
Persistencia: los datos de los jugadores se guardan entre sesiones de juego.
Progreso sin conexión: la fábrica sigue produciendo juguetes aunque el jugador no esté en el juego, siempre que haya espacio en el contenedor de la fábrica mientras el bosque de bastones de caramelo sigue creciendo con o sin jugadores.
Combinando ambos, también puedes crear mecánicas diarias que animen a los jugadores a seguir volviendo a tu isla. Utiliza esta plantilla para aprender a implementar estas mecánicas en tu propia y acogedora isla navideña.
La plantilla contiene tres breves tutoriales.
Principiante: muestra cómo cambiar el tiempo de crecimiento del bosque de bastones de caramelo en Verse.
Intermedio: guía para editar una variable en Verse.
Avanzado: permite modificar y añadir contenido al código de Verse.
Cada tutorial del proyecto te muestra cómo utilizar Verse para llevar a cabo la mecánica utilizada.
La plantilla se divide en tres partes:
Juega: empieza jugando durante 5-10 minutos para hacerte una idea de cómo funciona.
Crea: a continuación, crearás tres modificaciones siguiendo los desafíos del tutorial.
Explora: por último, puedes explorar por tu cuenta, desmontar todo el código documentado para ver cómo funciona y luego crear tu propio juego para estas fiestas.
Jugar
Desde UEFN, carga la plantilla. La encontrarás con las otras plantillas de LEGO. Empieza a jugar.
En el juego, para seguir la misión, acércate a Sir Pawlar: te explicará lo que debes hacer
Sigue las instrucciones del juego.
En algún momento, el tutorial te pedirá que finalices el juego. Pulsa la tecla Esc y, a continuación, Finalizar partida.
Espera 2 minutos.
Cuando hayan transcurrido los 2 minutos, pulsa de nuevo Esc y luego Iniciar.
Esto puede parecer un poco extraño, pero demuestra algo muy importante. En este juego, ¡siguen pasando cosas mientras no estás jugando! La fábrica sigue produciendo y el bosque de bastones de caramelo continúa creciendo.
Se trata de mecánicas clave que pueden animar a los jugadores a volver a tu juego para cosechar o recoger cultivos que han crecido o los recursos que se han producido a lo largo del tiempo.
Cuando vuelvas al juego, podrás ver lo que se produjo mientras no estabas jugando:
Puedes hacerlo en el archivo factory_manager.verse, que mide cuánto tiempo ha pasado durante la ausencia del jugador utilizando datos persistentes y el dispositivo reloj de tiempo real. A continuación, calcula cuánto produciría la fábrica durante ese tiempo.
Después de producir la segunda compilación de la fábrica, aparecerá un mensaje para que vuelvas a UEFN.
¡Has finalizado el primer tutorial! Es hora de pasar a los desafíos creativos.
Crear
¡Ahora empieza lo bueno! Tienes tres desafíos esperándote.
Localiza el primero, a Freshman Flapjack. Este te está esperando en uno de los tres cuadrados amarillos.
Desafío nivel principiante: modifica el tiempo que tardan en rebrotar los bastones de caramelo
El primer desafío es bastante sencillo. Te mostrará cuánto puedes cambiar el juego con solo ajustar algunos valores, en este caso, el tiempo que tardan en rebrotar los bastones de caramelo.
Junto a Freshman Flapjack, verás el dispositivo bastón de caramelo de Verse.
Selecciónalo y asegúrate de que también tienes seleccionado el panel Detalles.
Ajusta el parámetro
CandyCaneRegrowthTime; experimenta y comprueba cómo afecta a la jugabilidad.
Desafío nivel 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 sensación 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. Los precios del primer lote son para las cintas de la fábrica. Hay cuatro cintas en la fábrica, por lo que la tabla de precios contiene cuatro columnas. Cada fila de la tabla es el precio por mejorar una cinta 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 los consejos de Blubberchops y reduce el precio de mejora de las cintas. También puedes experimentar aumentando el precio para que el ritmo del juego sea más lento.
Cuando lo tengas todo listo, compila el código de Verse y aplica los cambios en Verse para probarlos.
Para obtener más información sobre lo que estás haciendo en este paso, consulta Cómo modificar y ejecutar tu primer programa en Verse.
Ten en cuenta que cada vez que apliques cambios a la sesión, se restablecerá el progreso de la fábrica.
Desafío nivel 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 datos persistentes adicionales para almacenar cuándo se abrió el regalo por última vez. También tendrás que corregir la lógica del dispositivo regalo diario de Verse.
Consulta Cómo utilizar datos persistentes para obtener más información sobre cómo trabajar con este tipo de datos en Verse.
Si necesitas un poco de ayuda con este desafío, echa un vistazo al dispositivo regalo diario a continuación.
Accede al 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. Cerciórate también de que el valor del campo esté definido 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 que acabas de añadir. Esta vez, busca los comentarios del profesor Flopkins cerca del final del archivo.
Completa las líneas que faltan para que las funciones tengan el comportamiento adecuado. Puedesusar otras funciones del archivo como inspiración.
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{}Una vez lista la nueva funcionalidad 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 pasos cruciales:
Almacenar la hora actual en que se abre el regalo, y
Comprobar si se ha superado 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."¡Ahora 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 utilizar 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 has superado los desafíos, es hora de explorar otros dispositivos utilizados en esta plantilla.
Dispositivo reloj de tiempo real
El dispositivo reloj de tiempo real te da la hora actual en tiempo universal coordinado (UTC). También anima las manecillas de un reloj.
Puedes utilizarlo para controlar los eventos que deberían producirse a una hora determinada cada día o para llevar la cuenta del tiempo transcurrido.
Viene con una función de prueba integrada que puede desfasar la hora actual. Consulta el archivo real_time_device.verse, los archivos date_and_time.verse y time_interval.verse.
Dispositivo campo de bastones de caramelo
El dispositivo campo de bastones de caramelo de Verse realiza un seguimiento de un campo de bastones de caramelo para recolectar. Proporciona recursos a la hora de recolectarlos y hace que vuelvan a crecer con el tiempo. Puedes utilizarlo para todo tipo de recursos que rebroten. Consulta el archivo candy_cane_field.verse.
Módulo de persistencia
Este módulo contiene todos los datos persistentes asociados a cada jugador. La clase principal es player_info en el archivo player_info.verse.
Este archivo también contiene todas las funciones para leer y manipular los datos. También deberías comprobar las otras clases del módulo: cada una define algunos de los datos almacenados para cada jugador. Puedes modificarlos 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 regalo diario
Este dispositivo genera un regalo diario, ¡o al menos lo haría si funcionara!
Aquí tienes una solución al desafío nivel experto para que puedas aprovechar al máximo el dispositivo regalo diario de Verse. Puedes utilizarlo para realizar todo tipo de eventos diarios y recompensas.
Empieza añadiendo los datos necesarios 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.Rellena 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.Observa ahora la clase
daily_giften el archivo daily_gift.verse. Primero, rellena 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 gestor de fábrica
El dispositivo gestor de fábrica de Verse inicializa y ejecuta la fábrica. Se encarga del cálculo de cuántos productos se han fabricado mientras el jugador no estaba.
Este cálculo puede resultar complejo, ya que el almacenamiento de la fábrica se comparte entre varias cintas de fábrica. En una configuración más sencilla, podrías calcular el número de productos fabricados calculando cuánto tiempo ha pasado desde la última producción y dividiéndolo luego por la velocidad de producción.