因此,我想为ROBLOX牢记一些游戏创意的最低限度VP,其中大多数是RTS / City Building游戏。我已经尝试过多次以正确安装相机,但我做不到。我无法让相机随WASD一起移动。有人可以帮忙吗?
我尝试将相机连接到零件上,并使播放器在地图上方的另一个不可见平台上不可见。他们都没有像《放逐》或《光环战争》(我希望摄影机的工作方式)这样的游戏中的摄影机工作方式一样
答案 0 :(得分:1)
Heyo!
如果您不熟悉编写照相机脚本,我建议您查看Roblox开发人员中心,以获得一些非常好的教程:https://developer.roblox.com/articles/Camera-manipulation
默认情况下,Roblox提供了一个非常复杂的相机脚本,该脚本会在玩家生成时跟随角色。在Studio中运行游戏时,您可以看到这些脚本,并查看Players > [YourPlayerName] > PlayerScripts > PlayerModule > CameraModule
下的解决方案资源管理器。在这里,您将看到Roblox已经为您编写的所有不同类型的摄像机。
但是,如果您想自己进行实验,则可以尝试制作这些脚本的副本,或者通过简单地在StarterPlayer > StarterPlayerScripts
中创建名为CameraScript
的新LocalScript来制作自己的脚本。
由于您正在制作《星际争霸》或《光晕战争》之类的RTS风格的游戏,因此我建议您制作一个简单的相机悬停在空中,以60度角指向地面,并使用WS键盘沿X轴移动输入,并使用AD键盘输入沿Z轴输入。
这是一个简单的示例,可帮助您入门:
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,则此脚本会出现一些问题,但足以使您入门。 祝你好运!