您如何在 ROBLOX Studio 中制作 RTS 相机/城市建设者相机?
How do you go about making an RTS camera / city builder camera in ROBLOX Studio?
所以我想为 ROBLOX 做一些 Minimum VPs 的一些游戏想法,其中大多数是 RTS / City Building 游戏。我曾多次尝试让相机正确,但我就是做不到。我无法使用 WASD 移动相机。有人可以帮忙吗?
我尝试将相机连接到一个部件,并让玩家在地图上方的另一个不可见平台上不可见。 None 他们中的摄像头在 Banished 或 Halo Wars 等游戏中的工作方式(我希望摄像头的工作方式)
嘿嘿!
如果您是编写相机脚本的新手,我建议您查看 Roblox 开发者中心以获得一些非常好的教程:https://developer.roblox.com/articles/Camera-manipulation
默认情况下,Roblox 提供了一个非常复杂的相机脚本,它会在玩家重生时跟随角色。在 Studio 中 运行 游戏时,您可以看到这些脚本,并查看 Players > [YourPlayerName] > PlayerScripts > PlayerModule > CameraModule
下的解决方案资源管理器。在这里您将看到 Roblox 已经为您编写的所有不同的相机类型。
但如果您想自己试验,可以尝试制作这些脚本的副本,或者通过简单地在 StarterPlayer > StarterPlayerScripts
中创建一个名为 CameraScript
的新 LocalScript 来制作您自己的脚本。
由于您制作的是像星际争霸或光晕战争这样的 RTS 风格游戏,我建议制作一个简单的摄像机悬停在空中,以大约 60 度角指向地面,并沿 X 轴移动WS键盘输入,Z轴沿AD键盘输入。
这是一个帮助您入门的简单示例:
- 确保未选中复选框
Players.CharacterAutoLoads
。
- 在
StarterPlayerScripts
中创建一个名为 CameraScript
的 LocalScript
- 将以下脚本粘贴到
CameraScript
。
local cam = game.Workspace.CurrentCamera
-- place the camera high in the air, looking down at the ground
local startingPos = Vector3.new(0, 30, 0)
local downwardLookAngle = CFrame.Angles(-math.rad(60), 0, 0)
cam.CFrame = CFrame.new(startingPos) * downwardLookAngle
-- create a function that moves the camera around
local moveDir = Vector3.new(0, 0, 0) -- we'll use this vector to control our movement
local moveSpeed = 0.5
spawn(function()
while true do
-- animate the camera movement
local c = game.Workspace.CurrentCamera.CFrame
game.Workspace.CurrentCamera.CFrame = CFrame.new(c.Position) * CFrame.new(moveDir) * downwardLookAngle
wait(0.01)
end
end)
-- create a function to handle keyboard inputs
local function onKeyPress(actionName, userInputState, inputObject)
-- when a key is pressed, modify our moveDir vector so our camera moves
-- W key input
if actionName == "moveCameraForward" then
if userInputState == Enum.UserInputState.Begin then
moveDir = Vector3.new(moveDir.X, moveDir.Y, -moveSpeed)
elseif userInputState == Enum.UserInputState.End then
moveDir = Vector3.new(moveDir.X, moveDir.Y, 0)
end
-- A key input
elseif actionName == "moveCameraLeft" then
if userInputState == Enum.UserInputState.Begin then
moveDir = Vector3.new(-moveSpeed, moveDir.Y, moveDir.Z)
elseif userInputState == Enum.UserInputState.End then
moveDir = Vector3.new(0, moveDir.Y, moveDir.Z)
end
-- S key input
elseif actionName == "moveCameraBackward" then
if userInputState == Enum.UserInputState.Begin then
moveDir = Vector3.new(moveDir.X, moveDir.Y, moveSpeed)
elseif userInputState == Enum.UserInputState.End then
moveDir = Vector3.new(moveDir.X, moveDir.Y, 0)
end
-- D key input
elseif actionName == "moveCameraRight" then
if userInputState == Enum.UserInputState.Begin then
moveDir = Vector3.new(moveSpeed, moveDir.Y, moveDir.Z)
elseif userInputState == Enum.UserInputState.End then
moveDir = Vector3.new(0, moveDir.Y, moveDir.Z)
end
end
end
-- listen for keyboard input that moves the camera
game.ContextActionService:BindAction("moveCameraForward", onKeyPress, false, Enum.KeyCode.W)
game.ContextActionService:BindAction("moveCameraLeft", onKeyPress, false, Enum.KeyCode.A)
game.ContextActionService:BindAction("moveCameraBackward", onKeyPress, false, Enum.KeyCode.S)
game.ContextActionService:BindAction("moveCameraRight", onKeyPress, false, Enum.KeyCode.D)
如果您最终同时按下 W + S 或 A + D,此脚本会出现一些问题,但它应该足以让您入门。
祝你好运!
所以我想为 ROBLOX 做一些 Minimum VPs 的一些游戏想法,其中大多数是 RTS / City Building 游戏。我曾多次尝试让相机正确,但我就是做不到。我无法使用 WASD 移动相机。有人可以帮忙吗?
我尝试将相机连接到一个部件,并让玩家在地图上方的另一个不可见平台上不可见。 None 他们中的摄像头在 Banished 或 Halo Wars 等游戏中的工作方式(我希望摄像头的工作方式)
嘿嘿!
如果您是编写相机脚本的新手,我建议您查看 Roblox 开发者中心以获得一些非常好的教程:https://developer.roblox.com/articles/Camera-manipulation
默认情况下,Roblox 提供了一个非常复杂的相机脚本,它会在玩家重生时跟随角色。在 Studio 中 运行 游戏时,您可以看到这些脚本,并查看 Players > [YourPlayerName] > PlayerScripts > PlayerModule > CameraModule
下的解决方案资源管理器。在这里您将看到 Roblox 已经为您编写的所有不同的相机类型。
但如果您想自己试验,可以尝试制作这些脚本的副本,或者通过简单地在 StarterPlayer > StarterPlayerScripts
中创建一个名为 CameraScript
的新 LocalScript 来制作您自己的脚本。
由于您制作的是像星际争霸或光晕战争这样的 RTS 风格游戏,我建议制作一个简单的摄像机悬停在空中,以大约 60 度角指向地面,并沿 X 轴移动WS键盘输入,Z轴沿AD键盘输入。
这是一个帮助您入门的简单示例:
- 确保未选中复选框
Players.CharacterAutoLoads
。 - 在
StarterPlayerScripts
中创建一个名为CameraScript
的 LocalScript
- 将以下脚本粘贴到
CameraScript
。
local cam = game.Workspace.CurrentCamera
-- place the camera high in the air, looking down at the ground
local startingPos = Vector3.new(0, 30, 0)
local downwardLookAngle = CFrame.Angles(-math.rad(60), 0, 0)
cam.CFrame = CFrame.new(startingPos) * downwardLookAngle
-- create a function that moves the camera around
local moveDir = Vector3.new(0, 0, 0) -- we'll use this vector to control our movement
local moveSpeed = 0.5
spawn(function()
while true do
-- animate the camera movement
local c = game.Workspace.CurrentCamera.CFrame
game.Workspace.CurrentCamera.CFrame = CFrame.new(c.Position) * CFrame.new(moveDir) * downwardLookAngle
wait(0.01)
end
end)
-- create a function to handle keyboard inputs
local function onKeyPress(actionName, userInputState, inputObject)
-- when a key is pressed, modify our moveDir vector so our camera moves
-- W key input
if actionName == "moveCameraForward" then
if userInputState == Enum.UserInputState.Begin then
moveDir = Vector3.new(moveDir.X, moveDir.Y, -moveSpeed)
elseif userInputState == Enum.UserInputState.End then
moveDir = Vector3.new(moveDir.X, moveDir.Y, 0)
end
-- A key input
elseif actionName == "moveCameraLeft" then
if userInputState == Enum.UserInputState.Begin then
moveDir = Vector3.new(-moveSpeed, moveDir.Y, moveDir.Z)
elseif userInputState == Enum.UserInputState.End then
moveDir = Vector3.new(0, moveDir.Y, moveDir.Z)
end
-- S key input
elseif actionName == "moveCameraBackward" then
if userInputState == Enum.UserInputState.Begin then
moveDir = Vector3.new(moveDir.X, moveDir.Y, moveSpeed)
elseif userInputState == Enum.UserInputState.End then
moveDir = Vector3.new(moveDir.X, moveDir.Y, 0)
end
-- D key input
elseif actionName == "moveCameraRight" then
if userInputState == Enum.UserInputState.Begin then
moveDir = Vector3.new(moveSpeed, moveDir.Y, moveDir.Z)
elseif userInputState == Enum.UserInputState.End then
moveDir = Vector3.new(0, moveDir.Y, moveDir.Z)
end
end
end
-- listen for keyboard input that moves the camera
game.ContextActionService:BindAction("moveCameraForward", onKeyPress, false, Enum.KeyCode.W)
game.ContextActionService:BindAction("moveCameraLeft", onKeyPress, false, Enum.KeyCode.A)
game.ContextActionService:BindAction("moveCameraBackward", onKeyPress, false, Enum.KeyCode.S)
game.ContextActionService:BindAction("moveCameraRight", onKeyPress, false, Enum.KeyCode.D)
如果您最终同时按下 W + S 或 A + D,此脚本会出现一些问题,但它应该足以让您入门。 祝你好运!