Roblox中,摧毁的部分未被全局摧毁
我想做什么: 我想让一个树上每隔几秒钟掉下一颗苹果。玩家可以“捡起”这个苹果。如果有更多的玩家在游戏中,就会赢得捡起最多苹果的玩家。
我所拥有的: 我有一颗树,苹果正在掉下来。到目前为止这个游戏的运作非常完美。玩家可以捡起苹果 - 如果他用脚碰到苹果,苹果就会被摧毁,玩家得到1分。还好。
问题所在: 如果有更多的玩家加入游戏,看起来每个玩家都可以看到他自己的(本地)苹果。因此,如果Player1捡起一个苹果,那么这个苹果就会被摧毁 - 但是只有他自己看不见了:(所有其他玩家仍然可以看到这个苹果并捡起它。如果我用两个玩家测试游戏,在服务器窗口中,我可以看到那个苹果还在,即使所有玩家都捡起了它。所以服务端显然有它自己的实例。
但是我只想要一个全局的苹果。
应用程序如下:
在Workspace中有一个苹果。几秒钟后,我在AppleTree模型下的脚本中克隆它(不是本地脚本,而是脚本):
function GrowNewApple()
local newApplePos = GetRandomPlace()
local appleTemplate = workspace.apples.prototype
local newApple = appleTemplate:Clone()
newApple.Parent = appleTemplate.Parent
newApple.Name = "apple"
newApple.Position = newApplePos
end
在StarterPlayer / StarterPlayerScripts中,我有一个本地脚本,其中包含以下内容:
local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:wait()
character:WaitForChild("LeftFoot")
character.LeftFoot.Touched:Connect( PickUpApple )
最后,我的PickUpApple函数如下:
function PickUpApple( touchObject )
if touchObject:IsDescendantOf(workspace.apples) then
touchObject:Destroy()
end
end
有什么想法吗?
这是因为PickUpApple()是从LocalScript调用的吗?这个LocalScript是否可能会将local touchObject 发送到这个函数中?
我不知道该怎么做。谢谢你们。
从本地脚本中删除苹果只会删除客户端中的苹果,为了防止这种情况,请将苹果删除的任务交由服务器脚本处理,您有两种选择:
将脚本变为服务器脚本并确保其与服务器兼容。
创建一个远程事件,在本地脚本检测到本地玩家触摸苹果时触发该事件,并确保远程事件连接到一个函数,该函数删除苹果并给玩家增加一个积分,应该设置为一个服务器脚本。操作步骤如下:
在“ReplicatedStorage”中创建一个“RemoteEvent”(确保它是“RemoteEvent”,而不是“RemoteFunction!”),并将其重命名为“PickupApple”。
修改本地脚本如下:
local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:wait()
local event = game.ReplicatedStorage:WaitForChild("PickupApple")
local apples = workspace:WaitForChild("apples") -- 使用 WaitForChild() 函数以防止请求对象在加载前引起错误
character:WaitForChild("LeftFoot")
character.LeftFoot.Touched:Connect(function(touchObject)
if touchObject:IsDescendantOf(apples) then
event:FireServer(touchObject)
end
end)
- 在“ServerScriptService”中创建一个脚本(不是“LocalScript”),并添加以下内容:
game.ReplicatedStorage.PickupApple.OnServerEvent:Connect(function(player, item)
if item:IsDescendantOf(workspace.apples) then
item:Destroy()
-- 在此处添加任何额外的代码,如增加积分等
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 代码?

问题已解决。
问题是
Touched事件在本地玩家的部件(脚和腿)上被触发。这导致了苹果实例被发送到Touched事件处理程序中。现在我移除了这个:
并将
Touched事件从玩家的脚转移到了苹果部分,现在我在那个苹果部分上触发Touched事件。现在它可以工作了。虽然苹果部分会将其发送到 Touched 事件处理程序中的玩家脚,但这没关系 - 我不需要摧毁它 - 现在我可以摧毁苹果了。
我必须说,我还将整个
function PickUpApple()移到了苹果部分中,这样我就可以直接访问苹果本身。