game.Players.ChildAdded:connect(function(player) player.CharacterAdded:connect(function(char) local plyrGuiH = Instance.new("BillboardGui") plyrGuiH.Name = "HealthOverlay" plyrGuiH.Parent = char.Head plyrGuiH.Adornee = char.Head plyrGuiH.Size = UDim2.new (1,0,1,0,0,0) plyrGuiH.StudsOffset = Vector3.new (0,1.2,0) --plyrGuiH.PlayerToHideFrom = player local frame = Instance.new("Frame") frame.Parent = plyrGuiH frame.Size = UDim2.new (0,180,0,10) frame.BackgroundColor3 = Color3.fromRGB (9, 33, 49) local overlay = Instance.new("Frame") overlay.Parent = frame overlay.Name = "Overlay" overlay.BackgroundColor3 = Color3.fromRGB (255, 24, 58) overlay.Size = UDim2.new (0,180,0,10) game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Health, false) local players = game.Players.LocalPlayer repeat wait() until players.Character local Humanoid = players.Character:WaitForChild("Humanoid") local HealthMath = Humanoid.Health / (Humanoid.MaxHealth) script.Parent = overlay script.Parent:TweenSize(UDim2.new(HealthMath, 0, 1, 0), "Out", "Sine", .5) Humanoid.HealthChanged:connect(function() local HealthMath = Humanoid.Health / (Humanoid.MaxHealth) script.Parent:TweenSize(UDim2.new(HealthMath, 0, 1, 0), "Out", "Sine", .5) end) end) end)
When enter the game, the billboard is there , but after reset the character it is gone.
You were setting the script's parent to the gui object, so when the player resets, the script is destroyed, severing the connections of the listeners in it.
I also recommend you use a serverscript and put it in ServerScriptService instead.
(Also if you need help centering the GUI and locking it's size, let me know)
game.Players.PlayerAdded:connect(function(player) player.CharacterAdded:connect(function(char) local plyrGuiH = Instance.new("BillboardGui") plyrGuiH.Name = "HealthOverlay" plyrGuiH.Parent = char.Head plyrGuiH.Adornee = char.Head plyrGuiH.Size = UDim2.new (1,0,1,0,0,0) plyrGuiH.StudsOffset = Vector3.new (0,1.2,0) --plyrGuiH.PlayerToHideFrom = player local frame = Instance.new("Frame") frame.Parent = plyrGuiH frame.Size = UDim2.new (0,180,0,10) frame.BackgroundColor3 = Color3.fromRGB (9, 33, 49) local overlay = Instance.new("Frame") overlay.Parent = frame overlay.Name = "Overlay" overlay.BackgroundColor3 = Color3.fromRGB (255, 24, 58) overlay.Size = UDim2.new (0,180,0,10) game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Health, false) local Humanoid = player.Character:WaitForChild("Humanoid") local HealthMath = Humanoid.Health / (Humanoid.MaxHealth) wait() overlay:TweenSize(UDim2.new(HealthMath, 0, 1, 0), "Out", "Sine", .5) Humanoid.HealthChanged:connect(function() local HealthMath = Humanoid.Health / (Humanoid.MaxHealth) overlay:TweenSize(UDim2.new(HealthMath, 0, 1, 0), "Out", "Sine", .5) end) end) end)
Just go to the ScreenGui, click it, and make the ResetOnSpawn property false. I used to have the same problem.