Roblox为什么无法在游戏中获取Players.LocalPlayer.Character

我一直在学习许多教程,它们都使用以下代码:

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文件夹的截图。

Explorer

提前感谢任何帮助。

点赞
用户12839543
用户12839543

当代码运行时,玩家角色尚未加载到游戏中,因此您需要添加等待。

local Player = game:GetService("Players").LocalPlayer
local character = Player.Character or Player.CharacterAdded:Wait()
local HumanoidRootPart = character:WaitForChild("HumanoidRootPart")
-- 设置速度
local Humanoid =  character:WaitForChild("Humanoid")
if Humanoid then
    Humanoid.WalkSpeed = 25
end
2020-03-16 02:06:49
用户2860267
用户2860267

我相信你存在一个时间问题。PlayerScripts在玩家加入游戏时执行,有可能你的角色还没有在脚本执行时加载出来。

将LocalScript移动到CharacterScripts中,这将使脚本在角色加载后执行。

我相信你存在一个时间问题。`PlayerScripts`在玩家加入游戏时执行,有可能你的角色还没有在脚本执行时加载出来。

将`LocalScript`移动到`CharacterScripts`中,这将使脚本在角色加载后执行。 
2020-03-16 02:42:38
用户19138244
用户19138244

(本地脚本部分)

如果它是一个本地脚本而不是脚本,你可以使用以下方法:

如果以上方法不起作用,你可以尝试在脚本的顶部添加 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
2022-05-17 16:21:18