Roblox Studio-工作区我的roblox ign名称:8:尝试使用“ DisplayName”索引零

问题描述

所以我试图从列表中选择一个名称,并将播放器的displayName设置为该名称。 这是starterCharacterScripts中的LocalScript。

local player = game.Players.LocalPlayer

print("Getting name of player ".. player.Name)
local Names = {<my names dont worry about em>}
local ChosenName = Names[math.random(1,#Names)]
print("Got name: " .. ChosenName)
local name = player.Name
game.Workspace.name.Humanoid.displayName = Names[math.random(1,#Names)]```

解决方法

为什么最后一行没有使用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尚不存在。