🎥

【Roblox】カメラの位置をコントロールする

2024/05/14に公開

はじめに

こんにちは、まつさこ です。

Roblox Studio でエクスペリエンスを開発する際、カメラの位置をコントロールする方法を紹介します。カメラの位置をコントロールすることで、オープニングムービーのようなものを作成したり、ゲーム内の特定の場所を強調したりすることができます。

CameraType

Roblox Studio では、カメラの位置をコントロールするために CameraType というプロパティを利用します。CameraType には以下の値を設定することができます。

  • Enum.CameraType.Custom : デフォルト設定
  • Enum.CameraType.Fixed : 固定カメラ
  • Enum.CameraType.Follow : 特定のパーツを常に画面中央に見るように追跡して移動するカメラ
  • Enum.CameraType.Attach : 特定のパーツの回転やオフセット設定に追従するカメラ
  • Enum.CameraType.Track : 特定のパーツを追跡して移動するが、自動で回転はしないカメラ
  • Enum.CameraType.Watch : 特定のパーツを常に画面中央に見るように回転するカメラ
  • Enum.CameraType.Scriptable : スクリプトで制御されるカメラ

公式ドキュメントはこちら

今回はこの中でも Enum.CameraType.Scriptable を使って、スクリプトでカメラの位置を制御する方法を解説します。

カメラの位置を制御する

カメラの位置を制御するには、CameraTypeEnum.CameraType.Scriptable に設定し、スクリプトでカメラの位置を制御します。

以下のスクリプトは、カメラの位置をプレイヤーの位置に追従させる例です。

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer
local camera = game.Workspace.CurrentCamera

camera.CameraType = Enum.CameraType.Scriptable

local function updateCamera()
    if player.Character then
        local character = player.Character
        local rootPart = character:FindFirstChild("HumanoidRootPart")
        if rootPart then
            camera.CFrame = CFrame.new(rootPart.Position + Vector3.new(0, 5, -10), rootPart.Position)
        end
    end
end

RunService.RenderStepped:Connect(updateCamera)

このスクリプトでは、RunService.RenderStepped イベントを利用して、毎フレームごとにカメラの位置を更新しています。

動作させてみると、一見いつものカメラと変わらないように見えますが、 Enum.CameraType.Custom の場合と比べて、回転やズームなどの操作ができないことがわかります。

https://youtu.be/1MPsFJXj6HM

また、オープニングムービーのように、特定の場所を強調するためにカメラの位置を変更することもできます。以下のスクリプトは、TweenService を使ってカメラの位置を変更する例です。

local TweenService = game:GetService("TweenService")
local camera = game.Workspace.CurrentCamera

camera.CameraType = Enum.CameraType.Scriptable

local function moveCamera()
    local goal = {}
    goal.CFrame = CFrame.new(Vector3.new(0, 10, -10), Vector3.new(0, 0, 0))
    local tweenInfo = TweenInfo.new(5, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, -1, true)
    local tween = TweenService:Create(camera, tweenInfo, goal)
    tween:Play()
    tween.Completed:Wait()
    -- カメラをデフォルトに戻す
	camera.CameraType = Enum.CameraType.Custom
end

moveCamera()

このスクリプトを実行すると、カメラがゆっくりと指定した位置に移動します。TweenService を使うことで、カメラの移動をスムーズにすることができます。

https://youtu.be/_mkU7cqY32E

まとめ

今回は、Roblox Studio でカメラの位置を制御する方法を紹介しました。 Enum.CameraType.Scriptable を使って、スクリプトでカメラの位置を制御することができるので、ぜひ活用してみてください。

読んでくださりありがとうございました🤗

moze テックブログ

Discussion