Roblox中的克隆部分不是全局的

问题描述 投票:0回答:1

我想做的事情:我想有一棵树,每隔几秒钟苹果就会从那棵树上掉下来。玩家可以“捡起”那个苹果。如果游戏中有更多玩家,则赢得最多苹果的玩家将获胜。

我有:我有一棵树,苹果掉下来了。到这里为止,它仍然完美。玩家可以拿起一个苹果-如果他用脚触摸苹果,则苹果将被破坏并获得1分。还可以。

怎么了:如果有更多玩家加入游戏,则看起来每个玩家都可以看到自己的(本地)苹果。因此,如果Player1拿起一个苹果,苹果将被销毁-但仅对他:(所有其他玩家都可以看到该苹果还在,而他们也可以捡起它。如果我与2个玩家一起测试游戏,在服务器窗口中,即使所有玩家都捡起了苹果,我仍然可以看到它还在,所以服务器显然拥有它自己的实例。

但是我只想一个全球苹果。

应用程序是这样的:

我在工作区中有一个苹果。每隔几秒钟,我就会将其克隆到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脚本与此:

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是否有可能将local touchObject发送到此函数中?

我不知道该怎么做。谢谢大家。

lua roblox
1个回答
0
投票

确定,问题已解决。

问题是Touched事件在本地播放器的零件(脚,腿)上触发。这已将苹果的本地实例发送到Touched Event Handler。

现在我删除了此:

character.LeftFoot.Touched:Connect( PickUpApple )

[而不是用玩家脚触发Touched,我将其移至Apple部分,现在我触发了该Apple部分的Touched事件。

apple.Touched:Connect(PickUpApple)

并且有效。当Apple的零件发送到Touched Event Handler播放器的脚时,这很好-我不需要销毁它-现在可以销毁Apple。

我不得不说我也将整个function PickUpApple()移到了苹果部件中,所以我可以直接访问苹果部件本身。

© www.soinside.com 2019 - 2024. All rights reserved.