Камера в Roblox Studio¶
Камера в Roblox Studio — это виртуальный наблюдатель, через который пользователь видит игровой мир. Управление камерой осуществляется встроенными скриптами на языке Lua, свойствами объектов и настройками рабочего пространства. В Roblox различают рабочую камеру редактора (для разработки) и игровую камеру (для игрока во время запуска игры).
¶Типы камер в Roblox
В движке Roblox доступно несколько способов представления мира:
- Рабочая камера (Workspace.CurrentCamera) — камера, используемая в редакторе и в игре по умолчанию. Управляется мышью и клавишами игрока.
- Камера от первого лица — режим, при котором объект игрока (Character) не отображается, а видимость ограничена обзором головы.
- Камера от третьего лица — стандартный режим, при котором игрок видит своего персонажа со спины.
- Пользовательская камера (Scriptable) — режим, при котором автоматическое управление отключается, и положение камеры задаётся скриптом вручную.
- Камеры-объекты (Camera instances) — отдельные объекты класса
Camera, которые можно создать и использовать для рендеринга на поверхности (например, для экранов, зеркал, камер наблюдения).
¶Настройка камеры в редакторе
При работе в Roblox Studio рабочая камера перемещается стандартными средствами:
- вращение — правая кнопка мыши;
- перемещение — клавиши WASD при зажатой правой кнопке;
- приближение — колесо мыши;
- фокус на объекте — клавиша F при выделении объекта в Explorer.
В меню View можно открыть панель Camera, чтобы переключать режимы просмотра (Perspective, Top, Front, Right и другие ортогональные проекции).
¶Управление камерой скриптом
Основной объект для работы с камерой — Workspace.CurrentCamera. Его свойства определяют положение, ориентацию и параметры отображения.
¶Основные свойства
| Свойство | Назначение |
|---|---|
CameraType | Тип камеры: Custom, Scriptable, Attach, Follow |
FieldOfView | Угол обзора в градусах (по умолчанию 70) |
CFrame | Позиция и ориентация камеры в мире |
NearPlaneZ | Расстояние до ближней плоскости отсечения |
ViewportSize | Размер области вывода в пикселях |
¶Пример: перевод камеры в режим Scriptable
``lua local camera = workspace.CurrentCamera camera.CameraType = Enum.CameraType.Scriptable ``
После установки CameraType в Scriptable стандартное управление мышью и клавишами отключается, и положение камеры задаётся через CFrame:
``lua camera.CFrame = CFrame.new(Vector3.new(0, 10, 20), Vector3.new(0, 0, 0)) ``
Первый аргумент — позиция камеры, второй — точка, на которую она направлена.
¶Возврат к стандартной камере
``lua camera.CameraType = Enum.CameraType.Custom ``
¶Камера от первого лица
Режим первого лица включается свойством игрока CameraMode:
``lua local player = game.Players.LocalPlayer player.CameraMode = Enum.CameraMode.LockFirstPerson ``
Для возврата к третьему лицу используется значение Enum.CameraMode.Classic. Настройка применяется на стороне клиента (LocalScript), так как камера является клиентским объектом.
¶Камеры-объекты для рендеринга на поверхностях
Для создания эффекта «видеокамеры» или экрана с видом из другой точки мира используется отдельный объект Camera, вывод которого отображается на поверхности (SurfaceGui + ViewportFrame или напрямую через Camera).
Пример создания камеры и вывода её изображения:
```lua local cam = Instance.new("Camera") cam.FieldOfView = 60 cam.CFrame = CFrame.new(0, 5, -10) cam.Parent = workspace
-- для вывода на экран используется ViewportFrame local viewport = Instance.new("ViewportFrame") viewport.CurrentCamera = cam ```
Такой подход применяется для камер наблюдения, зеркал, экранов и миникарт.
¶Плавное движение камеры
Для плавного перемещения камеры используется цикл RenderStepped в LocalScript:
```lua local RunService = game:GetService("RunService") local camera = workspace.CurrentCamera camera.CameraType = Enum.CameraType.Scriptable
local target = Vector3.new(0, 5, 15) local current = camera.CFrame.Position
RunService.RenderStepped:Connect(function(dt) current = current:Lerp(target, dt * 3) camera.CFrame = CFrame.new(current, Vector3.new(0, 0, 0)) end) ```
Метод Lerp (линейная интерполяция) обеспечивает плавный переход от текущего положения камеры к целевому.
¶Ограничения и особенности
- Свойства камеры изменяются только на стороне клиента. Серверный скрипт не имеет доступа к
CurrentCameraигрока. - При
CameraType.Scriptableстандартное управление отключается, и разработчик обязан самостоятельно обрабатывать ввод. FieldOfViewограничено допустимым диапазоном движка; чрезмерные значения могут вызывать искажения перспективы.- При смене персонажа (Respawn) камера сбрасывается в стандартное состояние, поэтому настройки первого лица и Scriptable-режима нужно применять повторно.
¶Применение
Настройка камеры широко используется в жанрах, где стандартного обзора недостаточно: гонки (вид от кормы с динамическим FOV), кинематографичные вступления (фиксированные ракурсы), головоломки (изометрия), симуляторы наблюдения (камеры слежения). В соревновательных играх изменение FieldOfView и ограничение обзора применяется для баланса.
¶Источники
- Документация Roblox Developer Hub: Camera, CameraType, ViewportFrame
- Roblox Creator Documentation: Scripting — Camera Control
- Roblox DevForum: обсуждения управления камерой и примеры скриптов
