这个脚本如何知道 'currentPlayer' 是谁?
How does this script know who 'currentPlayer' is?
我是 Roblox 开发的新手,但想尝试制作一款小行星游戏。我从为宇宙飞船创建座位开始,但我认识到一些我无法解释的行为,希望有人能提供一些说明。
这是我正在谈论的代码,只是一些非常基础的代码,因此我可以掌握一些初步想法:
--Services--
local Players = game:GetService("Players")
--Local Variables--
local seat = script.Parent -- Refers to the VehicleSeat object
local currentPlayer = nil -- Prevents errors in reference to nil?
local prompt = script.Parent.GetInPrompt -- Get the parent object's proximity prompt
--Proximity Prompt Trigger Code--
prompt.Triggered:Connect(function(currentPlayer) -- Bind the prompt trigger to function
local char = currentPlayer.Character -- Get the currentPlayer
seat:Sit(char.Humanoid) -- Make them sit
prompt.Enabled = false -- Disable the prompt so it isn't visible
print("Character is sitting") -- Print to console for debug
end)
--Get up function--
local function gettingUp(currentPlayer)
print("Attribute Change Fired - Getting Up") -- Print to console for debug
prompt.Enabled = true
end
-- Note that since Lua is an interpreted language any function must be defined before use--
seat.ChildRemoved:Connect(function()
gettingUp(currentPlayer)
end)
我看到我在顶部访问了“Players”服务,并将 currentPlayer 变量初始化为 nil。我不明白当 proximityPrompt 触发时 currentPlayer 如何从 nil 变为 player。
我认为它可能是 Roblox 中的 'reserved name',但我在网上找不到任何证据。
您的脚本混淆了局部变量和函数参数。
在脚本的顶部,您定义了局部变量 currentPlayer
。 ProximityPrompt.Triggered signal provides the instance of the Player 将其激活为函数参数。您还将该参数命名为 currentPlayer
。当在此函数的范围内时,函数参数隐藏局部变量,这意味着 currentPlayer
引用此函数参数,而不是您在脚本顶部定义的局部变量。
为避免这种混淆,最好将函数参数和局部变量命名为不同的东西。
如果您希望 currentPlayer
引用与 ProximityPrompt 交互的玩家,请尝试将函数参数分配给局部变量:
prompt.Triggered:Connect(function(player)
currentPlayer = player
local char = currentPlayer.Character
seat:Sit(char.Humanoid)
prompt.Enabled = false
print("Character is sitting")
end)
这将允许您以后的函数保留对 Player 对象的引用。
我是 Roblox 开发的新手,但想尝试制作一款小行星游戏。我从为宇宙飞船创建座位开始,但我认识到一些我无法解释的行为,希望有人能提供一些说明。
这是我正在谈论的代码,只是一些非常基础的代码,因此我可以掌握一些初步想法:
--Services--
local Players = game:GetService("Players")
--Local Variables--
local seat = script.Parent -- Refers to the VehicleSeat object
local currentPlayer = nil -- Prevents errors in reference to nil?
local prompt = script.Parent.GetInPrompt -- Get the parent object's proximity prompt
--Proximity Prompt Trigger Code--
prompt.Triggered:Connect(function(currentPlayer) -- Bind the prompt trigger to function
local char = currentPlayer.Character -- Get the currentPlayer
seat:Sit(char.Humanoid) -- Make them sit
prompt.Enabled = false -- Disable the prompt so it isn't visible
print("Character is sitting") -- Print to console for debug
end)
--Get up function--
local function gettingUp(currentPlayer)
print("Attribute Change Fired - Getting Up") -- Print to console for debug
prompt.Enabled = true
end
-- Note that since Lua is an interpreted language any function must be defined before use--
seat.ChildRemoved:Connect(function()
gettingUp(currentPlayer)
end)
我看到我在顶部访问了“Players”服务,并将 currentPlayer 变量初始化为 nil。我不明白当 proximityPrompt 触发时 currentPlayer 如何从 nil 变为 player。
我认为它可能是 Roblox 中的 'reserved name',但我在网上找不到任何证据。
您的脚本混淆了局部变量和函数参数。
在脚本的顶部,您定义了局部变量 currentPlayer
。 ProximityPrompt.Triggered signal provides the instance of the Player 将其激活为函数参数。您还将该参数命名为 currentPlayer
。当在此函数的范围内时,函数参数隐藏局部变量,这意味着 currentPlayer
引用此函数参数,而不是您在脚本顶部定义的局部变量。
为避免这种混淆,最好将函数参数和局部变量命名为不同的东西。
如果您希望 currentPlayer
引用与 ProximityPrompt 交互的玩家,请尝试将函数参数分配给局部变量:
prompt.Triggered:Connect(function(player)
currentPlayer = player
local char = currentPlayer.Character
seat:Sit(char.Humanoid)
prompt.Enabled = false
print("Character is sitting")
end)
这将允许您以后的函数保留对 Player 对象的引用。