Roblox Studio - 工作区.(我在roblox里的昵称).Name:8:尝试使用'DisplayName'索引空值

所以我正试图从列表中选择一个名称,并将玩家的DisplayName设置为该名称。 这是一个位于starterCharacterScripts中的LocalScript。

local player = game.Players.LocalPlayer

print("获取玩家名称 ".. player.Name)
local Names = {<我自己的名称不用担心>}
local ChosenName = Names[math.random(1, #Names)]
print("得到名称: " .. ChosenName)
local name = player.Name
game.Workspace.name.Humanoid.DisplayName = Names[math.random(1, #Names)]```
点赞
用户6879826
用户6879826

为什么在最后一行中没有使用 ChosenName,而是使用了 Names[math.random(1, #Names)]?这只是第二次随机选择名称,可能与打印出来的名称 “Got name:” 不匹配。

但是,问题在于,game.Workspace.name.Humanoid.DisplayName 引用的是什么表格?错误似乎表明没有 DisplayName 字段,因此我怀疑表格中还没有添加 Humanoid 字段。

> Names = {'Trillian', 'Ford', 'Arthur', 'Zaphod', 'Marvin'}
> ChosenName = Names[math.random(1, #Names)]

如果 OP 的代码处理的表格已有一个 name 字段,则:

> game.Workspace.name.Humanoid = { DisplayName = ChosenName }

将起作用。 如果该表尚未有 name 字段,则:

> game.Workspace.name = { Humanoid = { DisplayName = ChosenName }}

无论哪种方式,现在都应该有:

> game.Workspace.name.Humanoid.DisplayName
Marvin

除非 game 表尚未有 Workspace 字段。 这里的一般原则是,game.Workspace.name.Humanoid.DisplayNamegame ["Workspace"] ["name"] ["Humanoid"] ["DisplayName"] 的语法糖。 如果 Workspace 字段是一个表格,则尝试访问 name 字段;如果 name 字段是一个表格,则尝试访问 Humanoid 字段。 如果尚未创建 Humanoid 字段,则返回 nil,并且 ["DisplayName"] 尝试索引 nil,导致错误。

例如,对于一个如下所示的表:

t = {}

您可以使用 t.something = something 在单级创建新字段,但无法使用此方法创建嵌套的表字段,例如 t.something.else = something_else,因为第一个字段 something 尚不存在。

2020-08-23 15:36:44