Heyo!
Если вы новичок в написании сценариев камеры, я бы порекомендовал проверить Roblox Developer Hub для некоторых довольно хороших учебников: https://developer.roblox.com/articles/Camera-manipulation
По умолчанию Roblox предоставляетдовольно сложный сценарий камеры, который следует за персонажем, когда игрок появляется.Вы можете увидеть эти сценарии при запуске игры в Studio и заглянуть в Solution Explorer в Players > [YourPlayerName] > PlayerScripts > PlayerModule > CameraModule
.Здесь вы увидите все различные типы камер, которые Roblox уже разработал для вас.
Но если вы хотите поэкспериментировать самостоятельно, вы можете попробовать сделать копию этих сценариев или сделать свою собственную.просто создав новый LocalScript в StarterPlayer > StarterPlayerScripts
с именем CameraScript
.
Поскольку вы создаете игру в стиле RTS, такую как Starcraft или Halo Wars, я бы порекомендовал сделать простую камеру, зависшую в воздухе, указывающую на землю под углом 60 градусов и движущуюся вдоль оси Xс вводом с клавиатуры WS и вдоль оси Z с вводом с клавиатуры AD.
Вот простой пример, который поможет вам начать работу:
- Убедитесь, что флажок
Players.CharacterAutoLoads
снят. - Создание LocalScript в
StarterPlayerScripts
с именем CameraScript
- Вставьте следующий скрипт в
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 одновременно, но этого должно быть достаточно, чтобы начать работу.Удачи!