Billboard GUI won't show up on player's head

Greetings, DevForum community!

So recently, a few groups/experiences, in my experiences as well that are using a custom nametag GUI by using a BillboardGUI. However, some players are experiencing issues where the Billboard GUI was glitched or doesn’t show at all.

Here are some photos:
At SizzleBurger by @SilverAuthority


(was reported by my friend, @varinted)
I couldn’t get any more proof, unfortunately.

However, this is the most recent update log from Frappe on Discord:

What I want to achieve

I need some assistance to fix this issue, as this issue is troublesome.

If you could help, that would be really appreciated!

Do you think you could provide the code that creates the guis?

Yes sure, here it is:

local TweenService = game:GetService("TweenService")
local MarketPlaceService = game:GetService("MarketplaceService")

local gamePassId = 10847450
local gamepassid2 = 11286393
local groupId = 7496720

game.Players.PlayerAdded:Connect(function(Player)
	Player.CharacterAdded:Connect(function(char)
		local clone = script.Overhead:Clone()
		clone.Parent = char.Head

		local nameLabel = clone.nameLabel
		wait(1)
		local prz = TweenService:Create(nameLabel, TweenInfo.new(1,Enum.EasingStyle.Quint,Enum.EasingDirection.Out,0,false,0), {Position = UDim2.new(0,0,0,0)})
		prz:Play()
		nameLabel.Text = Player.Name

		if MarketPlaceService:UserOwnsGamePassAsync(Player.UserId, gamePassId) then
			while true do
				local Color = Color3.new(math.random(), math.random(), math.random())
				nameLabel.TextStrokeTransparency = 0
				local ColorTween = TweenService:Create(nameLabel, TweenInfo.new(3), {TextStrokeColor3 = Color})
				ColorTween:Play()
				wait(2)
			end
		end
	end)
end)

This is for my experience, though.

maybe the head hasnt loaded in yet?

Not quite how CharacterAdded works I believe, character added fires before its parented not before its starting to load

BossSpax is probably right try waitforchild when you parent the gui and maybe same for the nameLabel

Literally the opposite of what I said

It was working, 100%, however, it’s no longer working and other groups and experiences are having this issue as well, it probably after the update that is related to the new Roblox’s head mesh issues.

Hey alrIines!

So I’m not sure if you’re getting the glitch that sometimes I have to deal with but for me, sometimes the CharacterAdded function doesn’t seem to want to play when someone first joins the game, you could just make a quick thing to run it a second time just in case it doesn’t show.

Here’s a script that I think might help

local TweenService = game:GetService("TweenService")
local MarketPlaceService = game:GetService("MarketplaceService")

local gamePassId = 10847450
local gamepassid2 = 11286393
local groupId = 7496720

local function CreateTag(Player)
	Player.Character:WaitForChild("Head")
	if Player.Character.Head:FindFirstChild("Overhead")  == nil then
		local clone = script.Overhead:Clone()
		clone.Parent = Player.Character.Head

		local nameLabel = clone.nameLabel
		wait(1)
		local prz = TweenService:Create(nameLabel, TweenInfo.new(1,Enum.EasingStyle.Quint,Enum.EasingDirection.Out,0,false,0), {Position = UDim2.new(0,0,0,0)})
		prz:Play()
		nameLabel.Text = Player.Name

		if MarketPlaceService:UserOwnsGamePassAsync(Player.UserId, gamePassId) then
			while true do
				local Color = Color3.new(math.random(), math.random(), math.random())
				InformationLabel.TextStrokeTransparency = 0
				local ColorTween = TweenService:Create(InformationLabel, TweenInfo.new(3), {TextStrokeColor3 = Color})
				ColorTween:Play()
			wait(2)
			end
		end
	end
end

game.Players.PlayerAdded:Connect(function(Player)
	Player.CharacterAdded:Connect(function(char)
		CreateTag(Player)
	end)

	game.Workspace:WaitForChild(Player.Name)
	CreateTag(Player)
end)
1 Like

I tried that and I still have the issue:
here is from my perspective
Screenshot 2021-06-02 at 22.23.20

and one of my staff’s perspective
Screenshot 2021-06-02 at 22.23.44

You aren’t setting the BillboardGui’s Adornee. You should always explicitly set it if you’re looking for a surefire method of having the BillboardGui render over the specified part. Developers should not be relying on the behaviour of BillboardGuis rendering on player heads by only parenting them.

1 Like

I actually have 2 tags which is for the rank tag and have Adornee set, here is the script

local Group = 7496720
local MarketPlaceService = game:GetService("MarketplaceService")
local tw = game:GetService('TweenService')
game.Players.PlayerAdded:Connect(function(Player)
	Player.CharacterAdded:Connect(function(Character)
		
		local RankUI = script.OverheadGui:Clone()
		local prz = tw:Create(RankUI.InformationLabel, TweenInfo.new(1,Enum.EasingStyle.Back,Enum.EasingDirection.Out,0,false,0), {Position = UDim2.new(0,0,0,0)})
		RankUI.Parent = Character
		RankUI.Adornee = Character.Head
		wait(1)
		prz:Play()
		RankUI.InformationLabel.Text = Player:GetRoleInGroup(Group)
		local pr = tw:Create(RankUI.InformationLabel, TweenInfo.new(1,Enum.EasingStyle.Back,Enum.EasingDirection.In,0,false,0), {Position = UDim2.new(1,0,0,0)})
		local pr2 = tw:Create(RankUI.InformationLabel, TweenInfo.new(1,Enum.EasingStyle.Quint,Enum.EasingDirection.Out,0,false,0), {Position = UDim2.new(0,0,0,0)})
		
	end)
end)	

But when I test it:
Screenshot 2021-06-02 at 22.27.20
The adornee is empty.

Do you have the feature that changes heads to MeshParts enabled? Another workaround for this can be to use the HumanoidRootPart as your adornee instead since that’s the only part in a rig that’s guaranteed not to change. As for this current code though I would opt for WaitForChild, don’t think the character is guaranteed to be 100% built when CharacterAdded fires as of right now meaning the Head could be missing when you try to index it.

No honestly, how do I turn that on?

It’s fine if you aren’t using it. I wagered that the engine rebuilt the Head if that feature was enabled much like how it rebuilds the rig to apply bundles. In any case, I would just try and go for a head Adornee.

local RankUI = script.OverheadGui:Clone()
RankUI.Adornee = Character:WaitForChild("Head")
RankUI.Parent = Character

Your console ever error when the Adornee doesn’t read anything?

That still doesn’t work, unfortunately.

Commit to debugging then, can’t just copy paste my code. I left an additional note asking if you ever saw any errors in the console with your original code.

Just for reference, I created my own nametag script in a couple of seconds and it’s giving me the exact results I’m expecting. That is, it adorns above my head and adornee isn’t nil.

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")

local function playerAdded(player)
	local function characterAdded(character)
		local new = ServerStorage.BillboardGui:Clone()
		new.Adornee = character:WaitForChild("Head")
		new.Parent = character
	end
	
	player.CharacterAdded:Connect(characterAdded)
	if player.Character then
		characterAdded(player.Character)
	end
end

Players.PlayerAdded:Connect(playerAdded)
for _, player in ipairs(Players:GetPlayers()) do
	playerAdded(player)
end

Frankly sounds like a case of poor code architecture, though your code looks fine as it is (minus the lack of initial state setting) and yet has a problem that shouldn’t be. I advise you to check your console or do some debugging when you run into similar such issues.

1 Like

I believe it will not work if you’re using this head

Because from multiple inspections and survey to another experiences, most (not all) of that head users are experiencing this bug.

Nope, just seems like a case of bad code architecture, the mesh of a Head would not affect the rendering of a BillboardGui. I put that same head on and it renders as intended.

Hm, that is weird. Could you try char or apply your Humanoid description to one of my staff, ch0c0lAte98 and see if that’s glitched?