如何在触摸到任何同名物体时运行代码
2020-10-20 14:30:32
收藏:0
阅读:118
评论:1
所以我正在尝试在Roblox上开发一个小硬币收集游戏,而且我对脚本编写比较新手。基本上,从“(-254,2,-255)”(基板的一个角落)克隆一个小零件,到“(254,2,255)”(相反的角落)每隔0.25 - 1.5秒就会出现一个克隆体。 这有效,但我正在尝试循环遍历名为coin的workspace中的每个对象,并在触摸到一个对象时运行代码(现在我只是尝试销毁对象,但我可能只会更新Coins leaderstat)。 它不会给我任何错误,它只是不起作用。 我也在网上搜索了很多,但找不到任何东西。
ServerScriptStorage中的代码(生成立方体并已经起作用,但出于帮助而显示):
local runservice = game:GetService(“RunService”)
local interval = math.random(0.25, 1.5)
local coin = game.ServerStorage.coin
local counter = 0
local x = math.random(-254,254)
local z = math.random(-255,255)
runservice.Heartbeat:Connect(function(step)
counter = counter + step
if counter> = interval then
counter = counter-interval
local copy = coin:Clone()
copy.Parent = workspace
copy.Position = Vector3.new(x,2,z)
x = 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
希望这足以帮助!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

由于你是新手,在 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 秒或更长时间创建一个硬币。