Roblox Studio: NPC Humanoid, 禁止攀爬

我非常新手使用 Roblox Studio,正在尝试实现一些基本功能。我正在生成一些 NPC,并且希望防止它们攀爬梯子。阅读文档后,似乎我应该能够使用 Humanoid:SetStateEnabled(Enum.HumanoidStateType.Climbing, false) 来实现这一点。我将该代码插入到我创建 NPC 之后,如下所示:

local function spawnEnemy()
    local enemy = ServerStorage.Enemies.Zombie:Clone()
    enemy.Parent = workspace.Enemies

    print("Setting climbing to false")
    enemy.Humanoid:SetStateEnabled(Enum.HumanoidStateType.Climbing, false)
    print(enemy.Humanoid:GetStateEnabled(Enum.HumanoidStateType.Climbing))
    enemy.Humanoid.StateEnabledChanged:Connect(function()
        print("state changed")
    end)
end

游戏开始时的输出如下所示:

  设置攀爬为 false
  false

这正是我所期望的,并且请注意,它并不输出“状态更改”,因此我知道代码的其他部分没有干涉。

但是,这实际上并没有防止 NPC 攀爬,事实上,如果我立即在控制台中键入以下命令(在 Roblox Studio 底部显示“运行命令”):

print(workspace.Enemies.Zombie.Humanoid:GetStateEnabled(Enum.HumanoidStateType.Climbing))

输出结果是 true

为什么这个变量没有“粘住”?我需要将此代码放在其他地方吗?

点赞
用户1296374
用户1296374

SetStateEnabled 似乎无法传递到客户端。你的 Run-a-command 命令在客户端的工作区执行,而那里它仍然为 true。

如果你将同样的代码放在服务器上(比如将以下内容添加到工作区脚本中):

spawn(function()
    while (true) do
        print(workspace.Enemies.Zombie.Humanoid:GetStateEnabled(Enum.HumanoidStateType.Climbing))
        wait(0.5)
    end
end)

…那么你会发现在服务器上该属性实际上是 false。

更新:

要在客户端设置它,你可以在你的 Enemies 文件夹上添加一个处理程序,它将始终为所有的僵尸设置基础状态:

workspace.Enemies.ChildAdded:Connect(function(child)
    if (child.Name == "Zombie") then
        child:WaitForChild("Humanoid"):SetStateEnabled(Enum.HumanoidStateType.Climbing, false)
    end
end)

只需将其放在 StarterPlayerScripts 中的 LocalScript 中即可。

2020-04-26 03:51:04