Как заставить персонажа двигаться вверх / вниз с помощью клавиатуры?[Roblox / Луа] - PullRequest
0 голосов
/ 02 декабря 2018

Я новичок в написании сценариев Roblox (хотя в прошлом я много работал с разработчиками Unity). По сути, я пытаюсь позволить пользователю летать.Превратил гравитацию в 0 и написал ControlScript ниже.Я хочу, чтобы Space / Shift позволял людям подниматься / опускаться.По какой-то причине, это просто не меняет положение оси Y, хотя.Я возился с этим уже около 4 часов и не могу понять, в чем проблема.

Заранее спасибо за помощь!

-- Declare variables
local userInputService = game:GetService("UserInputService")
local runService = game:GetService("RunService")
local player = game.Players.LocalPlayer
local moveVector = Vector3.new(0,0,0)
-- Handle inputBegan event (when player first presses a key)
userInputService.InputBegan:connect(function(inputObject)
 if player.Character then
    if inputObject.KeyCode == Enum.KeyCode.W then
     moveVector = moveVector + Vector3.new(0,0,-1)
   end
   if inputObject.KeyCode == Enum.KeyCode.A then
     moveVector = moveVector + Vector3.new(-1,0,0)
   end
   if inputObject.KeyCode == Enum.KeyCode.S then
     moveVector = moveVector + Vector3.new(0,0,1)
   end
   if inputObject.KeyCode == Enum.KeyCode.D then
     moveVector = moveVector + Vector3.new(1,0,0)
   end
   if inputObject.KeyCode == Enum.KeyCode.Space then
     moveVector = moveVector + Vector3.new(0,-1,0)
   end
   if inputObject.KeyCode == Enum.KeyCode.LeftShift then
     moveVector = moveVector + Vector3.new(0,1,0)
   end
 end
end)
-- Handle inputEnded event (when player releases a key)
userInputService.InputEnded:connect(function(inputObject)
 if player.Character then
    if inputObject.KeyCode == Enum.KeyCode.W then
     moveVector = moveVector + Vector3.new(0,0,1)
   end
   if inputObject.KeyCode == Enum.KeyCode.A then
     moveVector = moveVector + Vector3.new(1,0,0)
   end
   if inputObject.KeyCode == Enum.KeyCode.S then
     moveVector = moveVector + Vector3.new(0,0,-1)
   end
   if inputObject.KeyCode == Enum.KeyCode.D then
     moveVector = moveVector + Vector3.new(-1,0,0)
   end
   if inputObject.KeyCode == Enum.KeyCode.Space then
     moveVector = moveVector + Vector3.new(0,1,0)
   end
   if inputObject.KeyCode == Enum.KeyCode.LeftShift then
     moveVector = moveVector + Vector3.new(0,-1,0)
   end
 end
end)
-- On renderstepped update the character's motion based on what keys
-- are currently being pressed
runService.RenderStepped:connect(function()
 if player.Character then
   player:Move(moveVector, true)
 end
end)

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Получил эту работу, используя скорость, согласно предложению Эвана Ринна.Вот контрольный код:

-- Declare variables
local userInputService = game:GetService("UserInputService")
local runService = game:GetService("RunService")
local player = game.Players.LocalPlayer
local MyBody

local children = workspace:GetChildren()

for i=1,#children do
   if children[i].Name == player.Name then
   MyBody = children[i].HumanoidRootPart
   end
end

local moveVector = Vector3.new(0,0,0)
local velocity = 0

-- Handle inputBegan event (when player first presses a key)
userInputService.InputBegan:connect(function(inputObject)
  if player.Character then
    if inputObject.KeyCode == Enum.KeyCode.W then
      moveVector = moveVector + Vector3.new(0,0,-1)
    end
    if inputObject.KeyCode == Enum.KeyCode.A then
      moveVector = moveVector + Vector3.new(-1,0,0)
    end
    if inputObject.KeyCode == Enum.KeyCode.S then
      moveVector = moveVector + Vector3.new(0,0,1)
    end
    if inputObject.KeyCode == Enum.KeyCode.D then
      moveVector = moveVector + Vector3.new(1,0,0)
    end
    if inputObject.KeyCode == Enum.KeyCode.Space then
      moveVector = moveVector + Vector3.new(0,-1,0)
      velocity = 10
    end
    if inputObject.KeyCode == Enum.KeyCode.LeftShift then
      moveVector = moveVector + Vector3.new(0,1,0)
      velocity = -10
    end
  end
end)

-- Handle inputEnded event (when player releases a key)
userInputService.InputEnded:connect(function(inputObject)
  if player.Character then
    if inputObject.KeyCode == Enum.KeyCode.W then
      moveVector = moveVector + Vector3.new(0,0,1)
    end
    if inputObject.KeyCode == Enum.KeyCode.A then
      moveVector = moveVector + Vector3.new(1,0,0)
    end
    if inputObject.KeyCode == Enum.KeyCode.S then
      moveVector = moveVector + Vector3.new(0,0,-1)
    end
    if inputObject.KeyCode == Enum.KeyCode.D then
      moveVector = moveVector + Vector3.new(-1,0,0)
    end
    if inputObject.KeyCode == Enum.KeyCode.Space then
      moveVector = moveVector + Vector3.new(0,1,0)
      velocity = 0
    end
    if inputObject.KeyCode == Enum.KeyCode.LeftShift then
      moveVector = moveVector + Vector3.new(0,-1,0)
      velocity = 0
    end
  end
end)

-- On renderstepped update the character's motion based on what keys
-- are currently being pressed
runService.RenderStepped:connect(function()
  if player.Character then
    player:Move(moveVector, true)
    MyBody.Velocity = Vector3.new(MyBody.Velocity.X,velocity,MyBody.Velocity.Z)
  end
end)
0 голосов
/ 02 декабря 2018

Карта клавиатуры и мыши полезна, если вы не уверены, какая кнопка соответствует заданному действию.Для просмотра этой карты:

  1. Нажмите кнопку меню, расположенную в верхнем левом углу экрана.

  2. На этом экране вы можете сделатьнесколько настроек мыши.Пока разработчик не установил режим камеры для игры, вы можете переключаться между двумя различными режимами и включать / выключать Shift Lock.Кроме того, вы можете установить режим движения вашего аватара.Для получения дополнительной информации об этих настройках,

  3. Чтобы просмотреть элементы управления мышью и клавиатурой Roblox,

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