

The event fired immediately for me when testing and I considered it the better approach as it provides both the loading screen gui and teleport data in a single operation rather than two individual operations (more performant). This is because these functions can be called immediately without having to wait for this event to fire. When fetching teleportData and the customLoadingScreen you are advised to use TeleportService:GetLocalPlayerTeleportData() and TeleportService:GetArrivingTeleportGui() instead. TeleportService:SetTeleportGui(ReplicatedFirst:WaitForChild("LoadingGui")) Local ReplicatedFirst = game:GetService("ReplicatedFirst") In StarterPlayerScripts LocalScript local TeleportService = game:GetService("TeleportService") Only other thing you need is to set the teleport gui on the Client: guiToAddToPlayer is only needed for the start place, any other place would always use loadingGui. I created two guis - one for entering the experience ( EnterGui), and one for teleporting from another place within the experience ( LoadingGui). Wait some time (can do gui animations here) Set local player's gui to guiToAddToPlayer Local playerGui = Players.LocalPlayer:WaitForChild("PlayerGui") Local Players = game:GetService("Players") player entered place from other place within experience

GuiToAddToPlayer = ReplicatedFirst.EnterGui Local loadingGui = TeleportService:GetArrivingTeleportGui() Local TeleportService = game:GetService("TeleportService") In ReplicatedFirst LocalScript local ReplicatedFirst = game:GetService("ReplicatedFirst") It’s actually recommended to use TeleportService:GetLocalPlayerTeleportData() and TeleportService:GetArrivingTeleportGui() instead of LocalPlayerArrivedFromTeleport (see TeleportService | Roblox Creator Documentation) I realized the real problem I’m trying to solve is keeping a black screen on throughout teleporting, then I can always fade the black screen out and in before and after teleporting respectively. Task.spawn(OnLocalPlayerArrivedFromTeleport, LoadingScreenGui) LoadingScreenGui = Instance.new("ScreenGui") Local LoadingScreenGui = TeleportService:GetArrivingTeleportGui() TeleportService.LocalPlayerArrivedFromTeleport:Connect(OnLocalPlayerArrivedFromTeleport) LocalPlayer.OnTeleport:Connect(OnPlayerTeleport) Local Tween = TweenService:Create(LoadingScreenFrame, TweenInfo.new(5), ) -Fade out tween. Local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") LoadingScreenFrame.Parent = LoadingScreenGui LoadingScreenFrame.Size = UDim2.new(1, 0, 1, 0) LoadingScreenFrame.BackgroundColor3 = Color3.new(0, 0, 0) LoadingScreenFrame.Name = "LoadingScreenFrame" Local LoadingScreenFrame = Instance.new("Frame") LoadingScreenGui.Name = "LoadingScreenGui"

Local LoadingScreenGui = Instance.new("ScreenGui") Local Players = Game:GetService("Players") ReplicatedFirst:RemoveDefaultLoadingScreen() Local ReplicatedFirst = Game:GetService("ReplicatedFirst") Local TweenService = Game:GetService("TweenService")
