问题描述
所以我试图从列表中选择一个名称,并将播放器的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.DisplayName
是game["Workspace"]["name"]["Humanoid"]["DisplayName"]
的语法糖。如果Workspace
字段是一个表,则尝试访问name
字段;如果name
字段是一个表,则尝试访问Humanoid
字段。如果尚未创建Humanoid
字段,则返回nil
,并且["DisplayName"]
尝试索引nil
,从而导致错误。
给出如下表:
t = {}
您可以使用t.something = something
在一个更深的层次上创建新字段,但不能以这种方式创建嵌套表字段,例如t.something.else = something_else
,因为第一个字段something
尚不存在。