Lua 如何在Roblox中调用其他脚本文件中的函数

Lua 如何在Roblox中调用其他脚本文件中的函数,lua,roblox,Lua,Roblox,我在包含函数的工作区中嵌入了一个脚本文件。我想从嵌入在工作区子对象中的脚本文件调用这些函数。我不想将这些函数复制并粘贴到多个脚本文件中。我认为如果可能的话,面向对象的方法将是最好的。您可以使函数全局化。在一个脚本中执行以下操作: _G.myFunction = function() print("Hello World") end repeat wait() until myFunction myFunction() _G.myFunction = function() print("Hel

我在包含函数的工作区中嵌入了一个脚本文件。我想从嵌入在工作区子对象中的脚本文件调用这些函数。我不想将这些函数复制并粘贴到多个脚本文件中。我认为如果可能的话,面向对象的方法将是最好的。

您可以使函数全局化。在一个脚本中执行以下操作:

_G.myFunction = function() print("Hello World") end
repeat wait() until myFunction myFunction()
_G.myFunction = function() print("Hello World") end
repeat wait() until myFunction myFunction()
在另一个脚本中,执行以下操作:

_G.myFunction = function() print("Hello World") end
repeat wait() until myFunction myFunction()
_G.myFunction = function() print("Hello World") end
repeat wait() until myFunction myFunction()
通过定义函数is _G,您必须等待脚本执行分配函数,然后您甚至可以在不指定_G的情况下调用函数


您可以将函数设置为全局函数。在里面 有一个脚本可以做到这一点:

_G.myFunction = function() print("Hello World") end
repeat wait() until myFunction myFunction()
_G.myFunction = function() print("Hello World") end
repeat wait() until myFunction myFunction()
在另一个脚本中,执行以下操作:

_G.myFunction = function() print("Hello World") end
repeat wait() until myFunction myFunction()
_G.myFunction = function() print("Hello World") end
repeat wait() until myFunction myFunction()
通过定义函数,您必须 等待脚本执行 分配函数,然后您可以 调用函数,即使没有 指定_G

这将不起作用,因为由于ROBLOX的更新,您现在必须在访问其中的项目时为其编制索引

正如我前面提到的,您也不能在ROBLOX中使用dofile()

回答这个问题:您需要在全局表-_G中的一个脚本中创建一个函数,方法是添加_G.MyFunction=function(parameters)end。在另一个脚本中,需要在_G表-_G.MyFunction()中访问它

ROBLOX脚本编写人员面临的一个常见问题是,在创建函数之前,您试图访问函数内部。解决这个问题的一个简单方法是添加一个等待,直到它被创建,正如Camoy的帖子所建议的:

repeat wait() until _G.MyFunction() 

最简单的方法是使用或共享

在一个剧本中

\u G.myFunction=函数(参数)

--blah

end

在另一个脚本中,您将使用此代码

重复等待()直到_G.myFunction~=nil

\u G.myFunction()


这也适用于全局表共享,而不是_G.

我知道之前已经说过,但只需使用普通的_G或共享来访问它

脚本一

_G.myFunction = function()
     print("Hello, myFunction!")
end
脚本二

repeat wait() until _G.myFunction()
_G.myFunction()
输出

你好,myFunction


替代_G的另一种方法是使用同样全局可用的表,shared。Shared的使用方式与_G相同,但必须在变量标识符之前指定“Shared”,这与_G不同,在_G中,您只能在没有_G()的情况下写入变量的名称。共享在以下上下文中使用:

shared["variablename"] = value
就像在全局堆栈中一样。 共享资源的使用示例:

脚本1

shared["rprint"] = function(array) for i,v in pairs(array) do print(i, v) end end
脚本2

repeat wait() until shared["rprint"]
shared.rprint({"Hello, ", "How", " are", " you?"})

这个脚本的输出将是“你好吗?”

我将使用BindableEvents或RemoteEvents。我认为这是一种比使用_G更好的方法。这将允许您将所有内容保持在本地。您可以使用Bindableevents和RemoteEvents来触发函数,并在脚本之间来回发送所需的数据。使用BindableEvents进行服务器/服务器通信,使用RemoteEvents进行服务器/客户端/服务器通信


您可以使用谢天谢地添加的模块脚本。您可以将函数放在那里,然后调用并在其他任何地方使用它们

投票结果为_G变量已从Roblox脚本API中删除。这个答案显示了现在用于在脚本之间“共享”值的表。很好。人们应该了解共享,因为当你别无选择时,这一点非常重要。维基说你仍然可以使用_G@JonLyles“不需要在前面写
\u G
就可以从中读取值。现在情况不再如此。”(来自维基)需要注意的是,这一点现在可能会引起兴趣;远程函数甚至允许您在服务器和客户端之间调用函数
,然后您可以调用该函数,即使不再指定_G