Entorno
UI Labs crea un entorno virtual para cada historia, lo que reemplaza la función require
, el global script
y la tabla _G
.
Esto es necesario para permitir el aislamiento (sandboxing) y evitar el almacenamiento en caché de las funciones require
. Además, UI Labs inyecta valores y funciones adicionales que pueden ser útiles dentro del entorno.
Dado que la historia se ejecuta dentro del mismo entorno, puedes usar cualquiera de estas utilidades desde cualquier parte de la historia. El Paquete de Utilidades proporcionará una forma de acceder a estas variables.
Environment.IsStory
Environment.IsStory( ):boolean
Devuelve true
si la historia actual se está ejecutando dentro de UI Labs
Environment.Unmount
Environment.Unmount( )
Desmonta la historia. Esto es útil cuando la historia no se debe continuar ejecutando.
Por defecto, es una función vacía en entornos fuera de las historias
Environment.Reload
Environment.Reload( )
Recarga la historia. Puedes usar esto si quieres forzar una recarga cuando algo externo haya cambiado, o como una alternativa a Environment.Unmount
.
DANGER
Tiene el potencial de causar un bucle infinito.
Por defecto, es una función vacía en entornos fuera de las historias
Environment.CreateSnapshot
Environment.CreateSnapshot(name?:string)
Hace lo mismo que el botón Guardar Versiones / Create Snapshot. Es útil para clonar la interfaz automáticamente. Se puede proporcionar un argumento adicional name
para el ScreenGui
creado.
Por defecto, es una función vacía en entornos fuera de las historias
Environment.SetStoryHolder
Environment.SetStoryHolder(target?:Instance)
Cambia lo que selecciona el botón Ver en el Explorador / View On Explorer cuando se hace clic. Es útil cuando la historia no usa el Frame de destino proporcionado (por ejemplo, usando React Portals), o cuando la historia no es una interfaz de usuario.
Llamar a esta función sin un valor restablecerá el contenedor de la historia al Frame de destino.
Por defecto, es una función vacía en entornos fuera de las historias
Environment.GetJanitor
Environment.GetJanitor( ):Janitor
Proporciona un objeto de tipo Janitor que se destruye cuando la historia se desmonta. Esto es útil para limpiar recursos sin necesidad de acceder manualmente a las funciones de limpieza.
Regresa nil
en entornos fuera de las historias
Environment.InputListener
Environment.InputListener:InputSignals
Te proporciona un input listener. Esto es útil porque UserInputService
no funcionará dentro de Plugin Widgets.
El tipo del listener es:
type InputSignals = {
InputBegan: UserInputService.InputBegan;
InputChanged: UserInputService.InputChanged;
InputEnded: UserInputService.InputEnded;
MouseMoved: Signal<(mousePos: Vector2)>;
}
Regresa nil
en entornos fuera de las historias
Environment.UserInput
Environment.UserInput:UserInputService
Es igual a Environment.InputListener
, pero la diferencia es que este usa el tipo de UserInputService
y lo utiliza por defecto. Además, recurrirá a UserInputService
para cualquier método que falte.
Regresa UserInputService
en entornos fuera de las historias
Environment.EnvironmentUID
Environment.EnvironmentUID:string
Regresa el GUID del entorno. Este cambia cada vez que la historia es recargada.
Regresa nil
en entornos fuera de las historias
Environment.PreviewUID
Environment.PreviewUID:string
Regresa el GUID de la previsualizacion. Cambia cada vez que la historia se monta, pero permanece igual cuando es recargada.
Regresa nil
en entornos fuera de las historias
Environment.OriginalG
Environment.OriginalG:_G
Contiene la tabla original _G
. Puede ser usado para salir del entorno aislado.
Regresa la tabla _G
en entornos fuera de las historias
Environment.Plugin
Environment.Plugin:Plugin
Regresa la variable global plugin
. Esto es útil para poder acceder a la API de plugin.
Regresa nil
en entornos fuera de las historias
Environment.PluginWidget
Environment.PluginWidget:DockWidgetPluginGui
Regresa donde el plugin está montado. Esto es útil porque los Sounds
solo pueden ser reproducidos dentro de un DockWidgetPluginGui
en el Edit Mode (Modo de Edición).
ADVERTENCIA
Solo debes ubicar instancias directamente dentro del widget del plugin. Manipular elementos del plugin de UI Labs puede romper el plugin.
Regresa nil
en entornos fuera de las historias
Resumen
local UILabs = require(ReplicatedStorage.UILabs)
local Environment = UILabs.Environment
print(Environment.IsStory())
---- [[ Variables ]] ----
print(Environment.EnvironmentUID)
print(Environment.PreviewUID)
print(Environment.OriginalG)
print(Environment.PluginWidget)
---- [[ Funciones ]] ----
Environment.Reload()
Environment.Unmount()
Environment.CreateSnapshot("MySnapshot")
Environment.SetStoryHolder(game.Workspace.Baseplate)
---- [[ Janitor ]] ----
local janitor = Environment.GetJanitor()
janitor:Add(Instance.new("Part"))
janitor:Add(function()
print("Cleanup")
end)
---- [[ InputListener ]] ----
local inputListener = Environment.InputListener
inputListener.InputBegan:Connect(function(input, gameProcessed)
print(input.UserInputType)
end)
inputListener.InputEnded:Connect(function(input, gameProcessed)
print(input.UserInputType)
end)
inputListener.InputChanged:Connect(function(input, gameProcessed)
print(input.UserInputType)
end)
inputListener.MouseMoved:Connect(function(mousePos)
print(mousePos)
end)
import { Environment } from "@rbxts/ui-labs";
print(Environment.IsStory());
/* ------- Variables ------ */
print(Environment.EnvironmentUID);
print(Environment.PreviewUID);
print(Environment.OriginalG);
print(Environment.PluginWidget);
/* ------- Funciones ------ */
Environment.Reload();
Environment.Unmount();
Environment.CreateSnapshot("MySnapshot");
Environment.SetStoryHolder(game.Workspace.Baseplate);
/* ------- Janitor ------ */
const janitor = Environment.GetJanitor();
janitor.Add(new Instance("Part"));
janitor.Add(() => {
print("Cleanup");
});
/* ------- InputListener ------ */
const inputListener = Environment.InputListener;
inputListener.InputBegan.Connect((input, gameProcessed) => {
print(input.UserInputType);
});
inputListener.InputEnded.Connect((input, gameProcessed) => {
print(input.UserInputType);
});
inputListener.InputChanged.Connect((input, gameProcessed) => {
print(input.UserInputType);
});
inputListener.MouseMoved.Connect((mousePos) => {
print(mousePos);
});