UI sin código, configurada por atributos.
PrettyUI es una librería UI ligera para Roblox que maneja hover, animaciones de apertura/cierre, feedback de sonido, stacking de GUIs con blur y grupos de selección, configurada completamente a través de atributos de instancia en Studio, sin scripting individual por botón.
⚠️ PrettyUI está en una etapa experimental temprana. Se esperan bugs. Contribuir es tan fácil como abrir un issue o un pull request.
Características
- Configuración sin código: botones, sonidos y navegación se configuran íntegramente mediante atributos de instancia en Studio
- Registro automático: cualquier
ScreenGuicon el atributoPManagedGUI = truees detectado al cargar y también en tiempo de ejecución - Gestión de GUIs en stack: abrir un GUI lo apila; cerrarlo restaura el anterior, con un blur global suavizado
- PButton: animación de escala al hover, efecto de brillo en cursor, hooks de sonido y navegación entre GUIs por clic
- PSelectionGroup: grupos de botones con selección simple o múltiple e imágenes de selección animadas
- Módulos de eventos: adjunta
OnClicked,OnHover, etc. comoModuleScripts hijos directamente en el botón, sin handler central - Cleanup con Janitor: cada componente limpia sus propias conexiones y tweens de forma automática
Requisitos
PrettyUI depende de dos paquetes bajo ReplicatedStorage/Packages/:
| Paquete | Fuente |
|---|---|
| Promise | evaera/promise en Wally |
| Janitor | howmanysmall/janitor en Wally |
Instalación
- Copia la carpeta
PrettyenStarterPlayer/StarterPlayerScripts. - Asegúrate de que
JanitoryPromiseestén bajoReplicatedStorage/Packages/. - Llama a
:Init()y luego a:Start()desde tu bootstrap de cliente:
local Pretty = require(path.to.Pretty)
Pretty:Init()
Pretty:Start()
Pretty escanea PlayerGui al iniciar y observa nuevos ScreenGuis añadidos en tiempo de ejecución sin cableado adicional.
Estructura de GUI
Cada ScreenGui gestionado debe seguir esta jerarquía:
ScreenGui ← atributo: PManagedGUI = true
└── Canvas ← Frame (AnchorPoint 0.5, 0.5), animado al abrir/cerrar
└── Container ← Frame, aquí va el contenido real del UI
├── ImageButton ← se convierte en PButton automáticamente
├── ImageButton
└── CanvasGroup ← se convierte en PSelectionGroup (requiere PSelectionGroup = true)
├── ImageButton
└── ImageButton
Canvas se desliza entre (0.5, 0, 0.5, 0) (abierto) y (0.5, 0, 1.5, 0) (cerrado). El ScreenGui arranca deshabilitado, Pretty lo habilita tras resolver el toggle inicial.
Notas de diseño
La navegación entre GUIs, los grupos de selección y el comportamiento de cierre se configuran con atributos (POpensGUI, PClosesCurrentGUI, PAddsToStack, PSelectionGroup, etc.). La lógica de eventos vive en ModuleScripts hijos nombrados por evento (OnClicked, OnHover, OnSelect) manteniendo cada botón autocontenido y el código libre de handlers centrales.
Licenciada bajo la MIT License - Copyright (c) 2026 Mastedore.