Roblox Studio: NP C Humanoid, отключение лазания - PullRequest
0 голосов
/ 26 апреля 2020

Я очень новичок в студии Roblox и пытаюсь заставить работать базовую c функциональность. Я порождаю некоторых неигровых персонажей и хотел бы помешать им подниматься по лестнице. После прочтения документации кажется, что я смогу сделать это, используя Humanoid:SetStateEnabled(Enum.HumanoidStateType.Climbing, false). Я вставляю этот код сразу после создания NP C следующим образом:

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

Это как раз то, что я ожидал, а также заметил, что он не выдает «состояние изменено», так что я знаю, что никакая другая часть кода не мешает.

Однако это не мешает NP C подниматься, и на самом деле, если я сразу наберу в консоли (где в нижней части Roblox Studio написано «Выполнить команду») эта команда:

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

Вывод будет true.

Почему переменная не «прилипает»? Нужно ли размещать этот код где-нибудь еще?

1 Ответ

1 голос
/ 26 апреля 2020

SetStateEnabled, похоже, не копируется для клиента. Ваша команда Run-a-command выполняется для рабочей области клиента, и там она по-прежнему верна.

Если вы поставите то же самое на сервере (скажем, добавьте следующее в сценарий рабочей области):

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

... вы увидите, что на сервере это свойство фактически ложно.

Обновление:

, чтобы установить его на клиенте, вы можете просто подключить обработчик в папке «Враги», который всегда устанавливает состояние лазания гуманоида для всех ваших зомби:

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

просто поместите это выше в LocalScript в StarterPlayerScripts.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...