Простите нубский вопрос, я новичок в Roblox LUA.
Я пытаюсь заставить гуманоида двигаться вперед и назад (например, когда офицер охраняет периметр, двигаясь туда-сюда), но с этим сценарием может быть что-то не так, потому что он движется только вперед.
local toggle = true
local RunService = game:GetService("RunService")
local humanoid = game.Players.LocalPlayer.Character:WaitForChild("Humanoid")
RunService:BindToRenderStep("Move", Enum.RenderPriority.Character.Value + 1, function()
while toggle do
humanoid:Move(Vector3.new(0, 0, -1), true)
wait(1)
humanoid:Move(Vector3.new(0, 0, 1), true)
wait(1)
end
end)
И потом, когда я переключаю = false, это не останавливается.
Я не могу использовать нажатие клавиши, так как это противоречит цели того, что я собираюсь сделать.
Спасибо за любую помощь.
Структура этого кода не имеет особого смысла. Вы создаете цикл внутри функции, которая запускается каждый кадр. В каждом отдельном кадре вы создаете новый цикл... Всего через 10 секунд у вас может быть 300 циклов, пытающихся переместить гуманоида одновременно.
Поскольку циклы постоянно перезаписывают друг друга, последний из них имеет приоритет ... Вероятно, поэтому он работает только в одном направлении.
Я предполагаю, что вы хотите, чтобы персонаж двигался к (0,0,-1) в течение секунды, затем к (0,0,1) еще одну секунду, а затем, если переключатель включен, снова бежать.
Вместо этого вы должны не создавать цикл внутри BindToRenderStep, а задавать движение каждый кадр в соответствии с тем, куда должен двигаться персонаж, и запускать этот цикл снаружи один раз:
local toggle = true
local RunService = game:GetService("RunService")
local humanoid = game.Players.LocalPlayer.Character:WaitForChild("Humanoid")
movement = nil
RunService:BindToRenderStep("Move", Enum.RenderPriority.Character.Value + 1, function()
if movement then
humanoid:Move(movement, true)
end
end)
while toggle do
movement = Vector3.new(0, 0, -1)
task.wait(1)
movement = Vector3.new(0, 0, 1)
task.wait(1)
end
movement = nil
Имейте в виду, что этот код имеет некоторые особенности:
while toggle do
. Это зависит от того, где вы хотите переключить переключатель, как вы справитесь с этим.script.Parent:WaitForChild("Humanoid")
(хотя это также зависит от личных предпочтений).true
аргумента :Move()
https://create.roblox.com/docs/reference/engine/classes/Humanoid#Move. Игрок по-прежнему сможет перемещать камеру, чтобы изменить направление движения.@PaulCrevase О, я понимаю, почему он не изменил направления, я забыл добавить movement = Vector3.new(0,0,1)
в цикл, когда создаю второй вектор. Я исправил ответ, но рад слышать, что это сработало
Спасибо @Aimarekin. Когда я устанавливаю переключатель = false, он не останавливается. У вас есть идея, как его развязать? Я попробовал UnbindToRenderStep, но это не сработало.
Аймарекин, скрипт не работал, сначала двигался только вперёд. но, черт возьми, сценарий и четкое логическое объяснение, которое вы предоставили, помогли мне еще больше понять движение персонажа. Поместив 'movement =' в каждый вектор, я смог заставить гуманоида двигаться в любом направлении. Спасибо большое за то, что делитесь своими знаниями, мой добрый человек!