【问题标题】:How would I get a character to move up/down with keyboard? [Roblox/Lua]我如何让一个角色用键盘向上/向下移动? [罗布洛克斯/Lua]
【发布时间】:2018-12-03 03:22:15
【问题描述】:

我是 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)

【问题讨论】:

  • 这可能是由于网络权限。您可能需要使用事件与服务器通信,然后处理服务器上的移动。编辑:Player:Move 可能不适用于 Y 轴,因此您可能想要添加速度。
  • 谢谢,这成功了:) 在下面发布了最终脚本

标签: lua roblox


【解决方案1】:

如果您不确定哪个按钮对应于给定的操作,则键盘和鼠标映射很有用。要查看此地图:

  1. 点击位于屏幕左上角的菜单按钮。

  2. 您可以在此屏幕上进行一些鼠标调整。只要开发者没有为游戏设置相机模式,您就可以在两种不同的模式之间切换并打开/关闭Shift Lock。此外,您可以设置头像的移动模式。有关这些设置的更多信息,

  3. 要查看 Roblox 鼠标和键盘控件,

【讨论】:

    【解决方案2】:

    按照 Evan Wrynn 的建议,使用速度来完成这项工作。这是 ControlScript:

    -- 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)
    

    【讨论】:

      猜你喜欢
      • 2019-11-12
      • 2018-07-31
      • 2022-01-05
      • 1970-01-01
      • 2022-01-23
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      相关资源
      最近更新 更多