RobloxStudioでカメラ制御を簡単に作成するメモになります。プレイヤーの横にカメラを固定して2Dっぽい感じにしたり、トップダウン(上から見た感じ)にしていきます。
はじめに
下記で、チュートリアル的にRobloxStudioでゲーム作成を行いました。今回は、スクリプトでカメラの制御をしていきます。
製作開始
「StarterPlayer」配下の「StarterPlayerSripts」の配下に「LocalScript」を追加します。

スクリプトの中身を下記に変更します。
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition =
Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
end
end
end
RunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
実行すると下記のようにカメラがプレイヤーの横に固定されます。

スクリプトの詳細、公式リファレンスは下記になります。
現状だとプレイヤーが手前、奥に進むことが出来るので、左右だけ移動できるように制御します。スクリプトを下記に変更します。「UnbindAction」でキー制御を行っています。
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local ContextActionService = game:GetService("ContextActionService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
ContextActionService:UnbindAction("moveForwardAction")
ContextActionService:UnbindAction("moveBackwardAction")
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition =
Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
end
end
end
RunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
トップダウン
上からプレイヤーを見下ろすトップダウンは下記スクリプトになります。
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local HEIGHT_OFFSET = 20
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
camera.CFrame = CFrame.lookAt(rootPosition, root.Position)
end
end
end
RunService:BindToRenderStep("TopdownCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
実行して下記のようになればOKです。

