Roblox Lua运行脚本,当您按下键并且您有一定距离时

问题描述 投票:0回答:1

我正在尝试用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值)

而且当我玩游戏时,我在资源管理器中的角色看起来像这样:

Explorer

input lua roblox
1个回答
0
投票

经过许多小时的研究,我发现了一种解决方法,它不是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)

现在唯一的问题是获取玩家用户名。如果您对此有任何其他建议,请添加评论或答案。谢谢所有尝试提供帮助的人。


0
投票

将其替换为HumanoidRootPart。

local Player = game:GetService("Players").LocalPlayer
local character = Player.Character or Player.CharacterAdded:Wait()
local HumanoidRootPart = character:WaitForChild("HumanoidRootPart")

© www.soinside.com 2019 - 2024. All rights reserved.