我是个新手,正在尝试使用一些基本的功能。我正在生成一些NPCs,我想阻止他们爬梯子。在阅读了文档之后,我似乎可以通过使用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的底部显示"Run a command“)中键入以下命令:
print(workspace.Enemies.Zombie.Humanoid:GetStateEnabled(Enum.HumanoidStateType.Climbing))
输出为true。
为什么变量不能“坚持”呢?我需要把这段代码放在别的地方吗?
发布于 2020-04-26 11:51:04
SetStateEnabled似乎不会复制到客户端。您的Run-a-command命令针对客户端的工作区执行,并且在那里仍然有效。
如果您将其放在服务器上(例如,将以下内容添加到工作区脚本中):
spawn(function()
while (true) do
print(workspace.Enemies.Zombie.Humanoid:GetStateEnabled(Enum.HumanoidStateType.Climbing))
wait(0.5)
end
end)...您将在服务器上看到,该属性实际上是false。
更新:
要在客户端设置它,你可以在你的敌人文件夹上挂上一个处理程序,它将总是为你所有的僵尸设置人形的爬升状态:
workspace.Enemies.ChildAdded:Connect(function(child)
if (child.Name == "Zombie") then
child:WaitForChild("Humanoid"):SetStateEnabled(Enum.HumanoidStateType.Climbing, false)
end
end)只需将上面的代码放入StarterPlayerScripts的LocalScript中即可。
https://stackoverflow.com/questions/61434631
复制相似问题