始める
中級者向けチュートリアル

ユーザーのカメラを制御する

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

ユーザーの世界の視点は Camera オブジェクトによって表されます。カメラの挙動は、さまざまな方法で体験に合わせて変更できます。たとえば、カメラはモンスターが通り過ぎるときに揺れたり、サイドスクロール形式のユーザーキャラクターの横に固定されたりします。

一人称カメラを作成する

一人称カメラは、カメラがキャラクターの頭と一緒にロックされているビューで、より現実的です。これは、ユーザーを世界に没入させることを目的としたシューティングゲームやストーリー体験で一般的です。

一人称カメラ
クラシックロブロックスカメラ

スタジオにおいて、StarterPlayer オブジェクトには、ユーザーのカメラに影響を与えるいくつかのプロパティがあります。 CameraMode プロパティは、カメラの挙動を決定します。

  1. StarterPlayer を選択します。

    alt

  2. CameraMode を LockFirstPerson に変更します。これにより、ユーザーのカメラが頭から離れないようになります。

    alt

  3. プレイテストをして、一人称カメラが動作しているのを確認します。

サイドスクロールカメラを作成する

サイドスクロールビューは、カメラがキャラクターの横に固定されるため、世界に二次元的な感覚を与えます。

alt

カメラをスクリプトで制御する

  1. StarterPlayer を展開し、StarterPlayerScripts に LocalScript を追加して、CameraManager と名付けます。

    alt

  2. スクリプトの最上部に、以下のコードサンプルをコピー&ペーストして Players サービス を取得し、その後に新しい変数でローカルユーザーを取得します。


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. updateCamera という関数を作成します。これはカメラの新しい位置を取得して設定するために必要なロジックを保持します。


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    end
  4. 関数内で、ユーザーのキャラクターモデルを取得し、それが存在するかどうかを if 文を用いて確認します。


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    end
    end

カメラを指す

すべてのキャラクターモデルには HumanoidRootPart という名前のパートが含まれており、これを使用してキャラクターの位置を取得できます。これにより、カメラが向く位置を設定します。

  1. FindFirstChild を使用して HumanoidRootPart を取得し、if 文を用いてそれが存在するか確認します。


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    end
    end
    end
  2. HumanoidRootPart の位置は実際にはユーザーの頭の下に 2 スタッドあります。これを修正するため、ルートの位置に 2 スタッド の高さを持つ新しい Vector3 を追加します。


    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    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)
    end
    end
    end

カメラの位置を設定する

カメラにも位置が必要です。ユーザーの視点に 2D サイドスクロールのルックを与えるために、カメラはキャラクターの横を直接見る必要があります。カメラの位置の Z 軸 にだけ深さを足すことで、ユーザーの横にカメラを配置します。


local player = Players.LocalPlayer
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)
end
end
end

CurrentCamera を更新する

カメラの位置の変数とカメラのターゲットの変数が準備できたので、カメラの位置を更新します。ユーザーのカメラには Workspace の CurrentCamera プロパティを介してアクセスできます。カメラには、その位置を決定する CFrame プロパティがあります。

CFrame.lookAt() を使用してカメラを更新できます。これは、2つの位置を取り、最初の位置に配置された CFrame を作成し、2番目の位置を向くものです。 cameraPosition に配置され、 rootPosition を向く CFrame を作成するために CFrame.lookAt() を使用します。


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() は、これらの3つのパラメーターを受け入れることによって、毎フレーム関数を実行するのを簡単にします:

  • name - このバインディングの名前は一意であるべきで、他の同名の関数と衝突しません。
  • priority - 数値が大きいほど優先度が高くなります。この関数は Roblox のデフォルトのカメラ更新の に実行されるべきなので、優先度は内部カメラの RenderPriority よりも 1 レベル高く設定されます。
  • function - レンダーステップにバインドする関数。
  1. RunService:BindToRenderStep() を使用して updateCamera 関数をレンダーステップにバインドします。


    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)
  2. コードをプレイテストします。A および D キーを使用して、キャラクターを左右に動かします。

等角カメラを作成する

ユーザーの位置を取得し、カメラの位置を毎フレーム更新する基本構造は、等角カメラ などの他の多くのカメラスタイルに適応できます。等角カメラは、ユーザーキャラクターに対してわずかに下向きの固定角度で指す 3D ビューです。

alt

位置と視点を変更する

  1. 前の例のコードを使用して、すべての 3 次元に同じ量を追加するように cameraPosition を修正します。

    alt


    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 = rootPosition + Vector3.new(CAMERA_DEPTH, CAMERA_DEPTH, CAMERA_DEPTH)
    camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
    end
    end
    end
    RunService:BindToRenderStep("IsometricCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. カメラの FieldOfView プロパティを変更すると、ズームインおよびズームアウトをシミュレートでき、ビューが平坦に見えることがあります。ズームインするために値を 20 に設定し、ユーザーからのカメラの距離を増加させて補うことを試みてください。


    local Players = game:GetService("Players")
    local RunService = game:GetService("RunService")
    local player = Players.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 64
    local HEIGHT_OFFSET = 2
    camera.FieldOfView = 20
    local function updateCamera()

カメラの動作を変更することで、あなたの体験に新しい見た目をもたらすことができます。cameraPosition を変更して、同じスクリプトでトップダウンカメラを実現できるか見てみましょう。設定を調整して、気に入った結果を得ることを試みてください!

©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。