Las plataformas que aparecen y desaparecen periódicamente son un elemento básico para los modos de juego de plataformas como las carreras de obstáculos. Los jugadores tienen que cronometrar sus saltos para llegar a la siguiente plataforma. Si fallan, se caerán y tendrán que volver a empezar.
Este ejemplo muestra cómo crear una plataforma que desaparece utilizando Scene Graph y un componente creado con Verse. Compara esto con la implementación del dispositivo creado con Verse del mismo concepto en Plataforma que desaparece en bucle.
Cómo hacer que las plataformas desaparezcan
Sigue estos pasos para crear una plataforma que desaparece utilizando Scene Graph:
Añade una entidad a tu escena llamada DisappearingPlatform. Consulta Cómo trabajar con entidades y componentes para obtener más información sobre cómo agregar entidades y componentes a la escena.
Agrega el mesh_component a tu entidad de plataforma que desaparece y establece la malla en cube.
Crea un nuevo componente de Verse llamado
disappear_on_loop_component, añade el componente a tu entidad de plataforma que desaparece y guarda la entidad. Para aprender a crear tu propio componente, consulta Cómo crear tu propio componente con Verse.Abre tu
disappear_on_loop_componenten VS Code para editarlo en los próximos pasos.Añade una propiedad
floateditable al componente llamadoDuration. Esto determina el tiempo que debe mostrarse la plataforma antes de ocultarse y durante cuánto tiempo lo hace antes de reaparecer.Verseusing { /Verse.org } using { /Verse.org/Native } using { /Verse.org/Simulation } using { /Verse.org/SceneGraph } # Loops between hiding and showing the entity by enabling and disabling # its static mesh and collision components. disappear_on_loop_component := class(component):Para ocultar una plataforma, puedes hacer que su malla estática sea invisible desactivando la colisión para que un jugador no pueda aterrizar en ella. Agrega una nueva función que se extiende desde
la EntidadllamadaHide()a tu clasedisappear_on_loop_component. Dentro de esta función,realiza una llamada a función GetComponents[]con el tipo que estás buscando, en este casomesh_component,que devuelve la malla estática de la Entidad. Luego llama aDisable()en la malla estática.Verse# If the entity has a mesh or collision component, disable them. (Entity:entity).Hide():void= if: StaticMesh := Entity.GetComponent[mesh_component] then: StaticMesh.Disable()Agrega otra función de extensión de
entidadllamadaShow()a tu clasedisappear_on_loop_component. La implementación es la misma queHide(), pero, en este caso, se llamará aEnable()en los componentes de malla estática.Verse# If the entity has a mesh or collision component, enable them. (Entity:entity).Show():void= if: StaticMesh := Entity.GetComponent[mesh_component] then: StaticMesh.Enable()Por último, en
OnSimulate(), utiliza unaexpresión de buclepara ocultar y mostrar en bucle la plataforma, llamando aSleep()cada vez. Tu clase completadesaparecer_on_loop_componentdebería verse de la siguiente manera:.Verseusing { /Verse.org } using { /Verse.org/Native } using { /Verse.org/Simulation } using { /Verse.org/SceneGraph } # Loops between hiding and showing the entity by enabling and disabling # its static mesh and collision components. disappear_on_loop_component := class<final_super>(component):Guarda y compila tu código.
En el esquematizador de UEFN, promociona tu entidad DisappearingPlatform a un prefabricado llamado changing_platform_prefab. Como es un prefabricado, puedes crear más instancias de tu plataforma que desaparece además de actualizar el aspecto y la implementación base de todos ellos si lo necesitas hacer más adelante. Para saber cómo promocionar entidades a un prefabricado, consulta Prefabricados e instancias prefabricadas.
Secuencia de comandos completa
Aquí está el código completa utilizada en esta sección:
disappear_on_loop_component.verse
using { /Verse.org }
using { /Verse.org/Native }
using { /Verse.org/Simulation }
using { /Verse.org/SceneGraph }
# Loops between hiding and showing the entity by enabling and disabling
# its static mesh and collision components.
disappear_on_loop_component := class<final_super>(component):