StarterGui元素设置为不可见时仍然出现

这是我在Studio中放置所有元素的位置 我正在尝试使用PlayerAdded使一个屏幕GUI消失并使另一个出现。但是这会让两个GUI都出现。我还试图使玩家在加入游戏时不会生成,但这也不起作用。

game.Player.CharacterAutoLoads = false

local Players = game:GetService("Players")

Players.PlayerAdded:Connect(function(player)
    game.StarterGui.StartScreenFrame.Visible = true
    game.StarterGui.PlayGui.Visible = false
end)
点赞
用户2860267
用户2860267

请查看 StarterGui 的文档

Player 的角色重生时,他们的 PlayerGui 的内容会被清空。然后 StarterGui 的子组件(以及它们的子孙)会被复制到 PlayerGui 中。

StarterGui 中的内容充当模板。实际显示在玩家屏幕上的标签都在 PlayerGui 中。你的代码修改的是模板,而不是克隆到 PlayerGui 中的元素。

通常,要解决你的问题,你只需要将 UI 元素的路径正确。但是,现在有一个复杂的因素,你已经指定了 game.Players.CharacterAutoLoads = false。这意味着 StarterGui 中的内容在玩家的角色生成之前不会被克隆到 PlayerGui 中。

因此,我建议你做以下几件事:

  • 将你的 UI 元素移入 ReplicatedStorage,这将防止当你最终让你的角色生成到世界中时 UI 元素重复。
  • 手动将这些元素复制到每个玩家的 UI 中。这将使 UI 元素出现。
  • 配置克隆的元素。这样你就可以自己编写 UI 行为了。

然后像这样更新你的脚本:

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

-- get a reference to the UI templates
local startScreen = ReplicatedStorage.StartScreenFrame
local playScreen = ReplicatedStorage.PlayGui

-- disable character's auto loading
Players.CharacterAutoLoads = false

-- listen for when players first join the game
Players.PlayerAdded:Connect(function(player)
    -- add the UI Elements to the PlayerGui
    local startGui = startScreen:Clone()
    startGui.Visible = true
    startGui.Parent = player.PlayerGui

    local playGui = playScreen:Clone()
    playGui.Visible = false -- enable this later
    playGui.Parent = player.PlayerGui
end)

请注意,因为你手动将 UI 元素放置到 PlayerGui 中,所以当玩家死亡和重生时,他们的 PlayerGui 将被清除。你可以通过在每个 ScreenGui 上设置 ResetOnSpawn 为 false 来避免这种情况。

2021-05-28 20:59:56