当播放器与接近提示交互时,它会检查播放器是不是有工具,如果没有,则执行功能 -ROBLOX STUDIO
Posted
技术标签:
【中文标题】当播放器与接近提示交互时,它会检查播放器是不是有工具,如果没有,则执行功能 -ROBLOX STUDIO【英文标题】:When player interacts with proximity prompt it checks if the player has a tool, if not then it does a function -ROBLOX STUDIO当播放器与接近提示交互时,它会检查播放器是否有工具,如果没有,则执行功能 -ROBLOX STUDIO 【发布时间】:2021-05-29 15:34:09 【问题描述】:我正在制作一个在玩家与接近提示交互时显示的 gui,但是,我希望脚本检查玩家的库存中是否有该工具。如果它有工具,那么什么都不做(不要' t 显示 gui),如果它没有该工具,则触发一个事件。我试过了,但这个错误一直出现 Workspace.Part.Script:6: attempt to index nil with 'Backpack' 这是脚本:
debounce = true
script.Parent.ProximityPrompt.Triggered:Connect(function(player)
if debounce then
debounce = false
local noob = game.Players:GetPlayerFromCharacter(player.Parent)
local Tool = noob.Backpack:FindFirstChild("Gunball")
if Tool == nil then
game.ReplicatedStorage.RemoteEvent:FireClient(player)
debounce = true
end
end
end)
这是 gui 脚本(本地),即使我真的不认为这很有用..:
game.ReplicatedStorage.RemoteEvent.OnClientEvent:Connect(function()
script.Parent.Visible = true
end)
【问题讨论】:
【参考方案1】:Workspace.Part.Script:6: 尝试使用“Backpack”索引 nil
local Tool = noob.Backpack:FindFirstChild("Gunball")
这里noob
是nil
。
所以在local noob = game.Players:GetPlayerFromCharacter(player.Parent)
game.Players:GetPlayerFromCharacter(player.Parent)
返回nil
。
根据Roblox documentation
此函数返回与给定关联的播放器 Player.Character,如果找不到,则返回 nil。它相当于 以下函数:
local function getPlayerFromCharacter(character) for _, player in pairs(game:GetService("Players"):GetPlayers()) do if player.Character == character then return player end end end
所以看来player
、player.Parent
的Parent
不是与任何玩家关联的Character
。
为什么像Character
这样的玩家属性应该是玩家的父级?我不是 Roblox 专家,但这对我来说似乎没有任何意义。
如果你想检查触发 ProximitPrompt 的玩家是否有一些物品,为什么不使用player
?我的意思是触发它的玩家。所以检查它的背包,而不是一些父角色的东西。
【讨论】:
好文章。我想我可以理解他们是如何以这个错误告终的。很多传统的object.touched events 处理玩家角色的某些部分,这就是为什么你会看到这个 part.parent > character > getPlayerFromCharacter 歌舞。很高兴这个事件直接给你播放器对象。 谢谢!我对脚本很陌生,我不太了解,你的回答真的很有帮助以上是关于当播放器与接近提示交互时,它会检查播放器是不是有工具,如果没有,则执行功能 -ROBLOX STUDIO的主要内容,如果未能解决你的问题,请参考以下文章