RobloxStudioでカメラを制御する|Robloxゲーム作成メモ

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です。

タイトルとURLをコピーしました