我正在尝试用Roblox编写脚本,以便如果您离20个螺柱并按E,将弹出一个NPC对话框。它正在LocalScript中运行。目前,当您按E时,它仅显示一条消息,但是不会显示该消息。
local HumanoidRootPart = game.Players.LocalPlayer:WaitForChild("HumanoidRootPart")
local UserInputService = game:GetService("UserInputService")
local part = game.workspace.TableBox.TableTop
UserInputService.InputBegan:connect(function(keyCode)
if keyCode.keyCode == Enum.KeyCode.E then
if (part.Position - HumanoidRootPart.Position).magnitude < 20 then
print("E has been pressed")
end
end
end)
我也在输出中得到此错误(橙色):
可能在'Players.icrann:WaitForChild(“ HumanoidRootPart”)'上产生无限的收益]
我希望local HumanoidRootPart = game.Players.LocalPlayer.Character:WaitForChild("HumanoidRootPart")
正常工作,但最终会出现错误:
Players.icrann.PlayerScripts.Script:1:尝试索引字段'Character'(nil值)
而且当我玩游戏时,我在资源管理器中的角色看起来像这样:
经过许多小时的研究,我发现了一种解决方法,它不是100%有效,但几乎可以使用。
local HumanoidRootPart = workspace.icrann:WaitForChild("HumanoidRootPart")
local UserInputService = game:GetService("UserInputService")
local part = workspace.TableBox.TableTop
UserInputService.InputBegan:connect(function(keyCode)
print(HumanoidRootPart.Position)
if keyCode.keyCode == Enum.KeyCode.E and (part.Position - HumanoidRootPart.Position).magnitude <= 20 then
print("E has been pressed")
end
end)
现在唯一的问题是获取玩家用户名。如果您对此有任何其他建议,请添加评论或答案。谢谢所有尝试提供帮助的人。
将其替换为HumanoidRootPart。
local Player = game:GetService("Players").LocalPlayer
local character = Player.Character or Player.CharacterAdded:Wait()
local HumanoidRootPart = character:WaitForChild("HumanoidRootPart")