Roblox 为什么我不能在游戏中获得 Players.LocalPlayer.Character

Roblox Why can't I get Players.LocalPlayer.Character in game

我一直在关注许多使用的教程:

game.Players.LocalPlayer.Character

但是每次我尝试 运行 时,我都会收到一条错误消息:

Players.icrann.PlayerScripts.Script:2: attempt to index field 'Character' (a nil value)

我正在尝试使用此代码找到 HumanoidRootPart,以便我可以检查玩家的位置。 game.Players.LocalPlayer.Character:WaitForChild("HumanoidRootPart")

并且还允许播放器 运行,即使我尝试使用工具箱中的脚本它仍然无法工作。 game.Players.LocalPlayer.Character:WaitForChild("Humanoid").WalkSpeed = 25

在每种情况下都会出现相同的错误。 我还在资源管理器中包含了 Players 文件夹的屏幕截图。

提前感谢您的帮助。

当您的代码运行时,玩家角色不会加载到游戏中。所以需要加wait。

local Player = game:GetService("Players").LocalPlayer
local character = Player.Character or Player.CharacterAdded:Wait()
local HumanoidRootPart = character:WaitForChild("HumanoidRootPart")
-- setting speed
local Humanoid =  character:WaitForChild("Humanoid")
if Humanoid then
Humanoid.WalkSpeed = 25
end

我认为您遇到了时间问题。 PlayerScripts 在玩家加入时执行,并且在脚本执行时您的角色可能尚未加载。

将 LocalScript 移动到 CharacterScripts,这将导致脚本在角色加载后触发。

(本地脚本部分)

如果它是 LocalScript 而不是您可以使用的脚本 如果上述方法不起作用,那么您可以尝试: repeat wait() until game:IsLoaded() and game:GetService("Players").LocalPlayer.Character 在脚本之上,因此它只会等待玩家的角色。

(服务器端脚本)

如果是脚本而不是本地脚本,您可以使用

for i, plr in pairs(game:GetService("Players"):GetPlayers()) do
if not plr:IsA("Player") then return end
  repeat wait(1) until game:IsLoaded() and plr.Character
end