Roblox muestra una pantalla de carga predeterminada cuando los usuarios se están conectando a un juego, pero puedes personalizar tu juego con una pantalla de carga personalizada que contenga contenido estático o animado.
Implementación
Para mostrar una pantalla de carga personalizada, puedes diseñar una instancia de ScreenGui directamente dentro de un LocalScript, o puedes hacer referencia a un objeto ScreenGui en la jerarquía de tu lugar. Ambas opciones utilizan ReplicatedFirst, ya que este servicio replica instancias a los clientes antes de que se replique cualquier otra cosa. Esto asegura que tu pantalla de carga sea lo primero que los usuarios vean cuando ingresen a tu juego.
Desde un script
Para diseñar y mostrar una pantalla de carga personalizada completamente desde un LocalScript:
- En ReplicatedFirst, crea un LocalScript.
- Pega el siguiente código de muestra para crear y personalizar un objeto ScreenGui. Puedes modificar el siguiente código con tus propios valores para crear tu diseño.
Pantalla de Carga Creada por Scriptlocal Players = game:GetService("Players")local ReplicatedFirst = game:GetService("ReplicatedFirst")local player = Players.LocalPlayerlocal playerGui = player:WaitForChild("PlayerGui")local loadingScreen = Instance.new("ScreenGui")loadingScreen.IgnoreGuiInset = trueloadingScreen.Parent = playerGui-- Reemplaza los valores de ScreenGui con los tuyoslocal textLabel = Instance.new("TextLabel")textLabel.Size = UDim2.new(1, 0, 1, 0)textLabel.BackgroundColor3 = Color3.fromRGB(0, 20, 40)textLabel.Font = Enum.Font.DenkOnetextLabel.TextColor3 = Color3.new(0.8, 0.8, 0.8)textLabel.Text = "Cargando"textLabel.TextSize = 32textLabel.Parent = loadingScreen-- Eliminar la pantalla de carga predeterminadaReplicatedFirst:RemoveDefaultLoadingScreen()task.wait(5) -- Forzar que la pantalla de carga personalizada aparezca durante un tiempo mínimoif not game:IsLoaded() thengame.Loaded:Wait()endloadingScreen:Destroy()
Desde una GUI existente
En lugar de crear una pantalla de carga ScreenGui completamente a través de un LocalScript, también puedes hacer referencia a una ScreenGui existente en la jerarquía de tu lugar. Asegúrate de que tu juego incluya la ScreenGui referenciada dentro de ReplicatedFirst y que la ScreenGui incluya elementos de UI como TextLabels y ImageLabels.
Para demostrar este proceso, el siguiente LocalScript hace referencia a una ScreenGui llamada LoadingScreen dentro de ReplicatedFirst, luego elimina la pantalla de carga predeterminada para que la única pantalla de carga que un jugador pueda ver sea tu propia pantalla de carga personalizada.
Referencia a Pantalla de Carga Existentelocal Players = game:GetService("Players")local ReplicatedFirst = game:GetService("ReplicatedFirst")local player = Players.LocalPlayerlocal playerGui = player:WaitForChild("PlayerGui")local loadingScreen = ReplicatedFirst:FindFirstChild("LoadingScreen")if loadingScreen thenloadingScreen.IgnoreGuiInset = trueloadingScreen.Parent = playerGui-- Eliminar la pantalla de carga predeterminadaReplicatedFirst:RemoveDefaultLoadingScreen()task.wait(5) -- Forzar que la pantalla aparezca durante un número mínimo de segundosif not game:IsLoaded() thengame.Loaded:Wait()endloadingScreen:Destroy()end
Agregar animaciones
Además de pantallas de carga estáticas personalizadas, puedes agregar animaciones para mejorar la pantalla de carga e indicar el progreso de carga. La forma más fácil de hacerlo es crear un elemento UI, como un TextLabel o ImageLabel, y luego animarlo usando TweenService. Por ejemplo, el siguiente código de muestra crea un nuevo ScreenGui con un ImageLabel hijo, elimina la pantalla de carga predeterminada, y luego TweenService hace que los elementos centrales se desvanezcan y roten hasta que el juego se cargue.
Pantalla de Carga Creada por Script (Animada)local Players = game:GetService("Players")local ReplicatedFirst = game:GetService("ReplicatedFirst")local TweenService = game:GetService("TweenService")local player = Players.LocalPlayerlocal playerGui = player:WaitForChild("PlayerGui")local loadingScreen = Instance.new("ScreenGui")loadingScreen.IgnoreGuiInset = trueloadingScreen.Parent = playerGuilocal textLabel = Instance.new("TextLabel")textLabel.Size = UDim2.new(1, 0, 1, 0)textLabel.BackgroundColor3 = Color3.fromRGB(0, 20, 40)textLabel.Font = Enum.Font.DenkOnetextLabel.TextColor3 = Color3.new(0.8, 0.8, 0.8)textLabel.Text = "Cargando"textLabel.TextSize = 32textLabel.TextTransparency = 1textLabel.Parent = loadingScreenlocal loadingRing = Instance.new("ImageLabel")loadingRing.Size = UDim2.new(0, 256, 0, 256)loadingRing.BackgroundTransparency = 1loadingRing.Image = "rbxassetid://4965945816"loadingRing.AnchorPoint = Vector2.new(0.5, 0.5)loadingRing.Position = UDim2.new(0.5, 0, 0.5, 0)loadingRing.ImageTransparency = 1loadingRing.Parent = loadingScreen-- Eliminar la pantalla de carga predeterminadaReplicatedFirst:RemoveDefaultLoadingScreen()-- Iniciar y comenzar las transiciones de desvanecimientolocal fadeTweenInfo = TweenInfo.new(1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out, 0, false, 2)local fadeTween1 = TweenService:Create(textLabel, fadeTweenInfo, {TextTransparency = 0})local fadeTween2 = TweenService:Create(loadingRing, fadeTweenInfo, {ImageTransparency = 0})fadeTween1:Play()fadeTween2:Play()-- Iniciar y comenzar la transición de rotaciónlocal tweenInfo = TweenInfo.new(4, Enum.EasingStyle.Linear, Enum.EasingDirection.In, -1)local tween = TweenService:Create(loadingRing, tweenInfo, {Rotation = 360})tween:Play()task.wait(5) -- Forzar que la pantalla aparezca durante un número mínimo de segundosif not game:IsLoaded() thengame.Loaded:Wait()endloadingScreen:Destroy()