如何在触摸到任何同名物体时运行代码

所以我正在尝试在Roblox上开发一个小硬币收集游戏,而且我对脚本编写比较新手。基本上,从“(-254,2,-255)”(基板的一个角落)克隆一个小零件,到“(254,2,255)”(相反的角落)每隔0.25 - 1.5秒就会出现一个克隆体。 这有效,但我正在尝试循环遍历名为coin的workspace中的每个对象,并在触摸到一个对象时运行代码(现在我只是尝试销毁对象,但我可能只会更新Coins leaderstat)。 它不会给我任何错误,它只是不起作用。 我也在网上搜索了很多,但找不到任何东西。

ServerScriptStorage中的代码(生成立方体并已经起作用,但出于帮助而显示):

local runservice = game:GetService(“RunService”)
local interval = math.random0.25, 1.5local coin = game.ServerStorage.coin
local counter = 0
local x = math.random-254254local z = math.random-255255)

runservice.Heartbeat:Connect(functionstepcounter = counter + step
    if counter> = interval then
        counter = counter-interval
        local copy = coinClone()
        copy.Parent = workspace
        copy.Position = Vector3.newx,2,zx = math.random(-254,254)
        z = math.random(-255,255)
        interval = math.random(0.25,1.5)
    end
end

桌面上负责触摸的脚本:

for _,v in pairs(workspace:GetChildren())do
    if v.Name ==“coin”then
        print(“foo”)
    end
end

希望这足以帮助!

点赞
用户7572496
用户7572496

由于你是新手,在 roblox 中进行脚本编写,让我给你提供一些好的实践经验,这将对你有很大帮助。

首先,在这种情况下,你不需要使用 Heartbeat,相反,你可以简单地使用 while 循环或递归函数和简单的 wait()。

另外,最好创建一个“Coins”文件夹放在工作空间中,以便不检查其他对象。

local waitTime = math.random(25,150)/100 --0.25 和 1.5 之间的随机时间
while true do  --永久循环
    wait(waitTime)   --等待所需的时间
    local coin = game.ServerStorage.coin:Clone() --克隆硬币
    coin.Parent = workspace.Coins --Coins 文件夹中
    coin.Position = Vector3.new(math.random(0,10),2,math.random(0,10)) --你必须使用你自己的位置
    coin.Touched:Connect(function(hitPart) --这里是接触函数
        local plr = game.Players:FindFirstChild(hitPart.Parent.Name) --检查 hitPart 是否属于玩家
        if plr then
            plr.leaderstats.Coins.Value =  plr.leaderstats.Coins.Value + 1--在你自己的价值中增加硬币值
            coin:Destroy()--销毁硬币
        end
    end)
    waitTime = math.random(25,150)/100 --设置下一个要等待的随机值
end

你提到了要循环 workspace 中的每个硬币,这就是我建议创建一个单独文件夹的原因。

因此,我在 StarterPlayerScripts 中创建了一个局部脚本,其中包含以下代码:

local RunService = game:GetService("RunService") --service
RunService.RenderStepped:Connect(function() --每个游戏帧的函数
    for i,v in pairs(workspace.Coins:GetChildren()) do --循环每个硬币
        v.Orientation = Vector3.new(v.Orientation.X,v.Orientation.Y+5,v.Orientation.Z) --仅在 Y 上增加方向,以旋转它们
    end
end)

我在局部脚本上这样做,因为这只是一个视觉效果,很快发送那么多函数到服务器端从未是个好主意。

这是我为你制作的游戏: https://www.roblox.com/games/5842250223/Help-for-TextBasedYoutube 你可以编辑这个场景。

换句话说回答“如何在触碰到具有相同名称的任何对象时运行代码?” 你需要在创建对象时为对象设置函数。

编辑:也不建议在短时间内向服务器发送太多请求,建议每隔 2 到 3 秒或更长时间创建一个硬币。

2020-10-18 00:37:23