ユーザーのカメラをコントロールする

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

ユーザーの世界のビューは、Cameraで表現されます。カメラの動作を変更して、あなたのエクスペリエンスに合わせて変更できます。たとえば、カメラはモンスターが歩いているイベントに反応したり、Camera、などです。

1人称カメラを作成する

1人称カメラは、キャラクターの頭をカメラがロックしたビューで、リアルライフにもっと正確です。これは、シューターやストーリーエクスペリエンスでゴールを感じさせるために、目標がユーザーを世界に没入させることでよくあります。

ファーストパーソンカメラ
クラシック Roblox カメラ

Studio では、StarterPlayer オブジェクトには、ユーザーのカメラに影響を与える複数のプロパティが含まれています。 カメラモード プロパティは、カメラの動作を決定します。

  1. Select StarterPlayer

  2. カメラモードを ロックファーストパーソン に変更します。これにより、ユーザーのカメラが頭から離れないようになります。

  3. プレイテストして、最初の人々のカメラがアクションを起操作するかどうかを見ます。

サイドスクローリングカメラを作成する

サイドスクロールビューは、キャラクターの側面に対してカメラを固定された位置に保ち、世界に 2 次元の感覚を与えます。

カメラをスクリプト化する

  1. StarterPlayer を拡張し、StarterPlayerScripts に ローカルスクリプト として名前付けられた CameraManager を追加します。

  2. スクリプトのトップに、次のコードサンプルをコピーして貼り付け、 PlayerService を取得し、新しい変数でローカルユーザーを取得します。


    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 を使用してヒューマノイドルートパートを取得し、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. ヒューマノイドルートパーツの位置は、実際にユーザーの頭の 2 スタッド以下にあります。これを修正するには、新しい Vector3 を追加し、ルートの位置に 2 スタッド を追加します。


    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 サイドスクロールの外観を与えるには、カメラは直接キャラクターの側面を見る必要があります。カメラの位置を Datatype.Vector3 によって深さを追加して、ユーザーの側面にカメラを配置することで、ユーザービューを 2D サイドスクロールでき


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

カメラを更新

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

Datatype.CFrame.lookAt() を使用してカメラを更新できます。これは 2つの位置を取り、CFrame.lookAt() を指している第1位置にあります。cameraPosition を作成するためには、1> カメラポジション1> と、4>


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 のデフォルトカメラ更アップデート後に実行する必要があります。優先度は、内部カメラのレンダリング優先度より 1 レベル高く設定されます。
  • function - レンダリングステップにバインドされる関数。
  1. Class.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. プレイテストする。 AD キーを使用して、キャラクターを横から横へ移動させます。

幾何学カメラを作成する

ユーザーの位置を取得し、カメラの位置を毎フレームで更新する基本的な構造は、多くの他のカメラスタイルに適応できます。たとえば、 はメタリックカメラ 。メタリックカメラは、ユーザーキャラクターに向かってわずかに角度を下げている固定角度の 3D ビューを表示します。

ポジションとビューを変更する

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


    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 を変更して、同じスクリプトでトップダウンカメラを達成できるかどうかをチェックしてください。設定を調整して結果を得てください!