所以我最近制作了一个Roblox脚本(在lua中),当按钮被按下时,它将改变我想要改变的对象(一盏灯)的颜色,它会弹出一个带有"代码1"代码2"等的gui,每个"代码"都会改变灯将做的事情。现在,对于我的问题,我只做了一个灯,这个灯工作得很好,但是我想要这个灯到处都是,每个灯都必须能被脚本改变。所以我有一个灯,但我想做几十个灯,并把它们放在设施的任何地方,有没有办法为每个灯做一个变量,否则我将不得不做太多的变量和线。如果你需要剧本的一部分,光线或双方的位置,告诉我。谢谢。
当我在许多不同的地方需要一个特定的复杂模型时,我有时采用的一般方法:
比起复制和粘贴模型,我只是在我想要模型的地方创建简单的占位符部分。所有这些部分我都放在一个文件夹里。然后我有一个脚本,在启动将取代所有这些占位符部分与克隆的模型,我想在他们的地方。下面是一个例子:- 在游戏中每个你想要灯光的地方放置一个部分。 创建文件夹"MyLights">
- 为部件赋予唯一有意义的名称,因为您可以稍后通过这些名称访问它们。 创建文件夹"Assets"在ServerStorage。
- 创建一个你想要的光的模型,当你完成建模后把它放到Assets文件夹中(确保为模型设置一个主要部分)。
现在在MyLights文件夹中创建以下脚本:
local lightsFolder = script.Parent
for i,v in pairs(lightsFolder:GetChildren()) do
if v:IsA('Part') then
local asset = game.ServerStorage.Assets.Light:clone()
asset:SetPrimaryPartCFrame(v.CFrame)
asset.Name = v.Name
asset.Parent = lightsFolder
v:destroy()
end
end
因此,在启动时,您的灯将放置在这些部件所在的位置。你现在只需要在一个地方修改灯光的外观和行为。如果不希望它们看起来都一样,可以在占位符中定义属性,并编写脚本将其应用于克隆操作。我给你举个例子:
假设你想让主要部分是红色的,但只在其中一个灯。选择占位符部分,在属性编辑器中转到Attributes部分并单击"添加属性"。在"添加属性"对话框中输入"颜色"。如Name和color3;作为"类型",然后单击"确定"。属性"Color"已添加。为它选择一个红色
现在,在c:destroy()行之前,将以下行添加到上述脚本中:
local color = v:GetAttribute("Color")
if color ~= nil then
asset.PrimaryPart.Color = color
end
您将看到您在占位符属性中设置的颜色仅应用于放置在其位置的模型。
所有这些都是保持你的程序DRY的精神。