2016-02-28 124 views
-2

我试图制作一个GUI,如roblox教程here脚本未运行

它在我在工作室测试时有效,但不是当我点击play game时加入我的角色。

local player = game.Players.LocalPlayer 
local unitFrame = script.Parent 

unitFrame.Avatar.Image = "http://www.roblox.com/Thumbs/Avatar.ashx?x=100&y=100&username="..player.Name 
unitFrame.PlayerName.Text = player.Name 

local healthBar = unitFrame.HealthBarContainer.HealthBar 
player.CharacterAdded:connect(function(character) 
    local humanoid = character:WaitForChild('Humanoid') 
    humanoid.HealthChanged:connect(function(health) 
     local healthPercentage = health/character.Humanoid.MaxHealth 
     healthBar.Size = UDim2.new(healthPercentage, 0, 1, 0) 
    end) 
end) 


local StarterGui = game:GetService('StarterGui') 
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Health, false) 

回答

0

确保脚本是localscript。在studio中测试时,脚本经常在工作室中工作,但不在服务器中工作。

要查看问题所在,请加入您的游戏,然后单击F9作为命令提示符,并告诉我它以红色表示,然后我们可以看到问题所在。

+0

是的,它是一个本地脚本。我已经按f9,并在服务器日志中说,内容失败,因为HTTP 404(HTTP/1.1 301永久移动) - 谢谢 – AskingEverythingForCode

0

启用HttpEnabled。 ROBLOX无法通过HTTP连接到其服务器以获取您的角色。

输入到这个命令吧:

game:GetService("HttpService").HttpEnabled = true 
0

不幸的是,它看起来像我做该教程时所做的监督。如果您查看本地日志(而不是服务器日志,因为此代码在LocalScript中运行),您将看到问题在第5行:unitFrame.PlayerName.Text = player.Name。日志抱怨说它不认为PlayerName是unitFrame的成员或子节点。

此问题来自复制滞后。当玩家第一次加入游戏时,所有内容都从StarterGui复制到他们的PlayerGui中。但是,这并不是立即发生,也不是一次全部发生。这个LocalScript完全可以复制并在其他GUI元素复制之前开始执行。

在这种情况下,正确的解决方案是使用WaitForChild。这个函数产生直到子对象实际存在。你应该使用这两种访问阿凡达ImageLabel和PlayerName为textLabel像这样的时候:

unitFrame:WaitForChild("Avatar").Image = "http://www.roblox.com/Thumbs/Avatar.ashx?x=100&y=100&username=" .. player.Name 
unitFrame:WaitForChild("PlayerName").Text = player.Name 

请记住,你没有这个,你访问一个GUI内的孩子都必须这样做。但是在初始化处理GUI的LocalScripts时建议这样做,以便GUI元素有时间加载。

作为一个方面说明,我会确保今天教程更新了正确的代码。我为错误表示歉意。