首页 > 解决方案 > Roblox Studio:NPC Humanoid,禁止攀爬

问题描述

我对 Roblox 工作室非常陌生,并试图让一些基本功能正常工作。我正在生成一些 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

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

  Setting climbing to false
  false

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

但是,这实际上并不能阻止 NPC 攀爬,事实上,如果我立即输入控制台(在 roblox studio 底部显示“运行命令”),此命令:

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

输出是true

为什么变量不“粘”?我需要将此代码放在其他地方吗?

标签: luaroblox

解决方案


SetStateEnabled 似乎没有复制到客户端。您的 Run-a-command 命令针对客户端的工作区执行,它仍然是正确的。

如果您将相同的内容放在服务器上(例如将以下内容添加到工作区脚本中):

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

...您会在服务器上看到,该属性实际上是错误的。

更新:

要在客户端上设置它,您只需在 Enemies 文件夹上连接一个处理程序,它将始终为所有僵尸设置 Humanoid 的攀爬状态:

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

只需将上面的内容放入 StarterPlayerScripts 中的 LocalScript 中。


推荐阅读