lua - 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
。
为什么变量不“粘”?我需要将此代码放在其他地方吗?
解决方案
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 中。
推荐阅读
- sql - 查询转换
- c++ - Qt Sqlite 更新返回 false
- c# - 使用 LINQ ANY 并且出现 > 1
- python - 在 FLASK 中 200 成功代码之前出现 302 重定向错误
- acumatica - 在客户 ID 字段中使用客户名称搜索
- adobe-analytics - 在 Adobe Analytics 中附加 100 多个产品
- gitignore - 子目录中的 .gitignore 被忽略
- sql - SQL in VBA right join with no data from first table
- android - Recyclerview 仅在我回到片段但片段第一次启动时显示数据
- c# - 从 Windows 控制台应用程序启动 Xamarin 应用程序