Camera
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
カメラオブジェクトは、3D 世界のビューを定義します。実行中のエクスペリエンスでは、各クライアントにはそれぞれのローカル Class.Workspace の中にあるカメラオブジェクトがあり、Workspace プロパティを通じてアクセスできます。
最も重要なカメラプロパティは次のとおりです:
Camera.CFrame は、カメラの位置と向きを表します。
Camera.CameraType は、エクスペリエンスのカメラスクリプトによって読み取られ、カメラがどのフレームを更新するかを決定します。
Camera.CameraSubject は、エクスペリエンスのカメラスクリプトによって読み取られ、カメラがフォローするオブジェクトを決定します。
Camera.FieldOfView 、これは、観測可能な世界の可視性の範囲を表します。
Camera.Focus は、カメラが見ているポイントを表します。このプロパティは、特定のビジュアルが詳細になり、フォーカスポイントに近づくたびに更新されるため、このプロパティを設定することは重要です。
カメラの動作を調整、カスタマイズする方法については、カメラのカスタマイズ を参照してください。
概要
プロパティ
Class.Camera の Camera 、3D 世界での位置と方向を定義します。
カメラスクリプトによって読み込まれる Enum.CameraType を指定します。
カメラのダイアゴナルフィールドオブビューの角度を設定します。
カメラの垂直フィールドオブビューの角度を設定します。
ビューポートサイズ変更の下で Camera の FOV 値を決定します。
Roblox のグラフィックシステムによって優先される 3D 空間を設定します。
VR デバイスを使用してプレイヤーの頭の動きを自動で追跡するかどうかを切り替えます。
VR を使用すると、ユーザーの世界の見通しのスケールが設定されます。
最長のビューポート軸にカメラの視界の角度を設定します。
カメラの近くのクリッププレーンのオフセットの Z をスタッドで説明します。
プレイヤーが VR デバイスを使用しているときに、Camera.CFrame プロパティからスピンとロールを適用するかどうかを切り替えます。
Roblox クライアントのデバイスセーフエリアのサイズ。
方法
Class.BasePart|BaseParts を返す Camera.CFrame とキャストポイントの間のビューラインを隠す配列を返す。
Class.Camera がレンダリングされている実際の Camera を返し、適用されたロールと VR デバイスの影響を計算します。
Class.Camera を使用して Camera:SetRoll() で 現在のロール、または回転をカメラの Z 軸の周りに適用した 1> ラジアンズ1> を返します。
画面の位置 (in ピクセル) から、Ray がカメラの方向に沿って設定された深度から、Camera を作成します。GUI のオンセット。
カメラの Z 軸の周りに適用される現在の回転を設定します。
ビューポート (ピクセル単位) の位置から、Ray の方向に沿って、Camera のユニットを作成します。CoreUISafeInsets のインセットは、カメラの方向に沿って、2>Enums.ScreenInsets|CoreUISafeInsets2> によって計算されません。
Datatype.Vector3 のスクリーン位置と深度、およびこの位置が画面の境界内かどうかを返します。worldPoint およびこの位置が画面の境界内にあるかどうかに対応します。GUI のインセットに対応します。
Datatype.Vector3 の画面位置と深度、worldPoint のこのポイントが画面の境界内にあるかどうか、およびこのポイントが画面の境界内にあるかどうかを返します。この GUI のインセットはカウントされません。
イベント
Class.Camera が Camera:Interpolate() を使用してインターポリングを完了したときに発動します。
プロパティ
CFrame
このプロパティは、CFrame のCameraで、ポジションと向きを 3D 世界で定義します。頭の回転など、一部の変換はこのプロパティに反映されないので、Class.Camera:GetRenderCFrame()|GetRenderC
このプロパティを設定することでカメラを動かすことができます。ただし、デフォルトのカメラスクリプトも設定されているので、次のいずれかを行う必要があります:
カメラを Camera.CameraType に設定して、デフォルトのカメラスクリプトがカメラの Enum.CameraType.Scriptable を更新しないようにします。このメソッドは、ほとんどの場合に最適です。
デフォルトのカメラスクリプトをオルタネティブに完全に置き換えます。このアプローチは、デフォルトのカメラ機能が必要ない場合にのみ推奨されます。
Class.Camera を配置およびオリエントする最も直感的な方法は、CFrame.lookAt() コンストラクターを使用することです。次の例では、Camera は 1>Datatype.Vector3.new(0
local camera = workspace.CurrentCameracamera.CameraType = Enum.CameraType.Scriptablelocal pos = Vector3.new(0, 10, 0)local lookAtPos = Vector3.new(10, 0, 0)workspace.CurrentCamera.CFrame = CFrame.lookAt(pos, lookAtPos)
カメラを上記のように配置することができますが、CFrame から別のDatatype.CFrame にスムーズに移動するためにアニメートしたい場合があります。この場合、Datatype.CFrame を使用して、2> Datatype.CFrame2> から5> Datatype.CFrame5> まで、および8> Datatype.CFrame8> から1> Datatype.CFrame1> まで、
Class.RunService:BindToRenderStep() と CFrame:Lerp() メソッドで、カメラの位置/オリエンテーションを設定します。
カメラの位置/方向をアニメートする Tween を作成し、プレイします:
local Players = game:GetService("Players")local TweenService = game:GetService("TweenService")local camera = workspace.CurrentCameracamera.CameraType = Enum.CameraType.Scriptablelocal player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal pos = camera.CFrame * Vector3.new(0, 20, 0)local lookAtPos = character.PrimaryPart.Positionlocal targetCFrame = CFrame.lookAt(pos, lookAtPos)local tween = TweenService:Create(camera, TweenInfo.new(2), {CFrame = targetCFrame})tween:Play()
CameraSubject
CameraSubject は、さまざまな Instances を受け入れます。デフォルトのカメラスクリプトは、利用可能な設定に応答して異なります:
デフォルトでは、カメラスクリプトはローカルキャラクターの Humanoid に従います。これには、人形の現在の状態と Humanoid.CameraOffset が含まれます。
Class.BasePart に設定されると、カメラスクリプトはその位置をフォローし、垂直オフセットがある場合は VehicleSeats です。
カメラサブジェクト は nil に設定できません。これを試行すると、以前の値に戻ります。
カメラサブジェクト をデフォルトの値に戻すには、ローカルキャラクターの Humanoid に設定してください:
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
local function resetCameraSubject()
if workspace.CurrentCamera and localPlayer.Character then
local humanoid = localPlayer.Character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
workspace.CurrentCamera.CameraSubject = humanoid
end
end
end
CameraType
デフォルトの Roblox カメラスクリプトには、いくつかの内蔵動作があります。このプロパティを設定すると、さまざまな Enum.CameraType 動作の間で切り替わります。一部のカメラタイプでは、正しく動作するために Camera.CameraSubject が有効でなければなりません。
デフォルトのカメラスクリプトは、カメラタイプがEnum.CameraType.Scriptable に設定されている場合、カメラの動きや更新はありません。 For more information on positioning and orienting the camera manually, see Camera.CFrame .
For all CameraType settings except Enum.CameraType.Scriptable , the 1> Class.Camera.Focus1> is set to.
DiagonalFieldOfView
カメラが視野のどの隅にからでも眺めることができる度数を設定します。FieldOfView を参照して、フィールドオブビューの説明を参照してください。
注意 DiagonalFieldOfView は、Camera のレンダリングによって表示されるビューフィールドを表しますが、一部のデバイスのビューポートに隠れている可能性のあるオープンスクリーンエリアには、Class. Camera.ViewportSize|ViewportSize に参照してください。
FieldOfView
フィールドオブビュー プロパティは、カメラが垂直方向に何度の度を見ることができるかを設定します。このプロパティは 1 から 120 度の間にクランプされ、デフォルトは 70 です。非常に低いまたは非常に高いフィールドオブビューは、プレイヤーに混乱させる可能性があるため、お勧めしません。
ユニフォームスケーリングは強制されているため、縦と横のビューフィールドは常に画面のアセプト比率によって関連しています。
FieldOfView (FOV) の提案された使用法には、次のようなものが含まれます:
- FOV を減らして、単に拡大を感じるために、例えばビンオーラーを使用するときに使用します。
- プレイヤーが「ダッシュ」するときにFOVを上昇させて、コントロールの欠如の印象を与えます。
注意 FieldOfView は、Camera のレンダリングによって表示されるビューポートを表します。一部のデバイスでは、Class.Camera. ViewportSize|ViewportSize によってフルスクリーンエリアが隠される場合があります。詳細は、1> Class.Camera. ViewportSize|ViewportSize1>
FieldOfViewMode
カメラのフィールドオブビュー (FOV) は、ViewportSize の変更を反映する必要があります。 FieldOfViewMode の値は、保持コンセント値 を決定します。
たとえば、このプロパティが Enum.FieldOfViewMode.Vertical に設定されると、ビューポートのサイズが変更されると、横の FOV が更新されますが、縦の FOV は常にコンセントを保持します。このプロパティが Enum.FieldOfViewMode.Diagonal に設定されると、横の FOV と縦の FOV
Focus
エンジンが実行するグラフィックオペレーション、例えば照明の更新、は時間または計算コストがかかる場合があります。カメラの フォーカス プロパティは、エンジンがこれらのオペレーションを実行する領域を優先するようにカメラに伝えます。たとえば、 PointLights
デフォルトの Roblox カメラスクリプトは、フォー
フォーカス はカメラの位置やオリエンテーションに影響しません。これについては、Camera.CFrame を参照してください。
HeadLocked
カメラが VR デバイスを使用してプレイヤーの頭の動きを自動で追跡するかどうかを切り替えます。true (デフォルト) では、エンジンは Camera.CFrame とユーザーの頭の Enum.UserCFrame を組み合わせて、
local UserInputService = game:GetService("UserInputService")local camera = workspace.CurrentCameralocal headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScale-- これはカメラ:GetRenderCFrame() と同等になりますlocal renderCFrame = camera.CFrame * headCFrame
次の理由で、 このプロパティを無効にしないでください ことをお勧めします:
- 同等のヘッドトラッキングソリューションが追加されない場合、プレイヤーはモーション不快症を経験する可能性があります。
- Roblox エンジンは、 HeadLocked が true の場合、ラテンシーの最適化を実行します。
参照してください
- VRService:GetUserCFrame() は、頭の CFrame を取得するために使用できます。
- VRService:RecenterUserHeadCFrame() は、VR デバイスの現在の位置と方向に頭を近づけるために使用されます。
HeadScale
ヘッドスケール は、VR を使用するときにユーザーの世界の視点のスケールです。
VR の 1 スタッドのサイズは、0.3 meters / HeadScale で、これは、ユーザーの VR デバイスを使用しているとき、ユーザーの視点から世界が小さく見えることを意味します。たとえば、1つの高さのパーツは、 HeadScale の 0.5に相当する
このプロパティは自動的に VRService.AutomaticScaling によって制御されています。玩プレイヤーの視点をアバターのサイズに沿わせるために。如果HeadScaleを自分で制御するか、カスタムキャラクターを使用する意図です。VRService.AutomaticScaling を
このプロパティは、Humanoid.HeadScale という、NumberValue を持つ Class.Humanoid を制御するためのスケールを含める必要がありません。
MaxAxisFieldOfView
MaxAxisFieldOfView プロパティは、カメラが最長のビューポートの軸にどれだけの度を見ることができるかを設定します。
最長軸が垂直軸の場合、このプロパティは Class.Camera.FieldOfView|FieldOfView プロパティと同様の動作を示します。これは、デバイスがポートレートオリエンテーションにある場合が多いです。ランドスケープオリエンテーションの場合、最長軸は横長の軸です。この場合、プロパテ
NearPlaneZ
The NearPlaneZ プロパティは、カメラの近くにあるクリッププレーンがどれくらい遠くにあるかをスタッドで説明します。 The 近くのクリッププレーンは、カメラの Camera.CFrame の前にあるジオメトリ
VRTiltAndRollEnabled
このプロパティは、Camera.CFrame プロパティから VR デバイスを使用している間、Class.Camera.CFrame プロパティに適用するかどうかを切り替えます。
モーション sickness を防止するために、地平線はレベルで保持される必要があります。 VR デバイスを使用してプレイヤーのビューを傾けてスクロールすると、プレイヤーの物理スペースとバーチャルスペースの間の接続が切断される可能性があります。プレイヤーが明らかな下向き方向を変更すると、バランスを失うか、吐き気を経験する可能
これらの理由で、このプロパティを無効にすることは一般的に推奨されますが、これらのエフェクトのためにエクスペリエンスを広くテストした場合を除きます。特に、スクロールとロールを有効にしている場合、プレイヤーが常に安定した参照フレームを持つことを確認する必要があります。たとえ、スクロールとロールを有効にしている場合で
ViewportSize
ViewportSize は、現在の画面のデバイスの安全エリアのサイズを返します。このエリアは、Roblox トップバーエリアを含む正方形ですが、デバイスのスナップまたはスクリーンカットアウトは含まれていません。ViewportSize
上記の通り、ViewportSize は、カットアウトまたはスナップのあるディスプレイのサイズに等しくあり
最後に、ViewportSize は、カメラがレンダリングするために使用するビューポートサイズではありません。また、Camera.FieldOfView および Camera.DiagonalFieldOfView プロパティは、
カメラのアップデート
Class.Camera は、Class.Workspace. CurrentCamera によって現在参照されているのみで、ViewportSize は、1> Class.RunService.PreRender|
方法
GetPartsObscuringTarget
このメソッドは、BaseParts がカメラの Camera.CFrame と Vector3 の位置の間のラインを隠すアレイを返します。2>CastPoints2> 配列に含まれる
castPoints パラメータは、Vector3 ポジションのアレイとして渡されます。注意、返されるアレイの BaseParts は、任意の順序であり、追加のレイキャストデータは提供されません。ヒットポジション、ヒ
local camera = workspace.CurrentCameralocal castPoints = {Vector3.new(0, 10, 0),Vector3.new(0, 15, 0)}local ignoreList = {}local partsObscuringTarget = camera:GetPartsObscuringTarget(castPoints, ignoreList)
Class.Terrain がキャストポイントを隠すと、BaseParts は、隠す前の Terrain と隠す後の 1>Class.BasePart1> の間のキャストポイントを隠しません。
パラメータ
Datatype.Vector3 ポイントのキャストポイントの位置のアレイ。
Class.Instance|Instances 以外の子孫を含む、無視するべき配列。
戻り値
Class.BasePart|BaseParts 配列、Camera.CFrame と castPoints の間の視線を隠す。
コードサンプル
local Workspace = game:GetService("Workspace")
local camera = Workspace.CurrentCamera
local function XRay(castPoints, ignoreList)
ignoreList = ignoreList or {}
local parts = camera:GetPartsObscuringTarget(castPoints, ignoreList)
for _, part in parts do
part.LocalTransparencyModifier = 0.75
for _, child in pairs(part:GetChildren()) do
if child:IsA("Decal") or child:IsA("Texture") then
child.LocalTransparencyModifier = 0.75
end
end
end
end
XRay({ Vector3.new() })
GetRenderCFrame
この関数は、CFrame のレンダリング中の実際の Camera を返し、VR ヘッドトランスフォームは 2> Class.Camera.CFrame2> プロパティに適用されないので、最善のプラ
たとえば、VR を使用すると、Camera は次の CFrame に実際にレンダリングされます:
local UserInputService = game:GetService("UserInputService")local camera = workspace.CurrentCameralocal headCFrame = UserInputService:GetUserCFrame(Enum.UserCFrame.Head)headCFrame = headCFrame.Rotation + headCFrame.Position * camera.HeadScalerenderCFrame = camera.CFrame * headCFrame
カメラのレンダリング CFrame は、Camera.HeadLocked プロパティが true の場合にのみ頭を計算します。
戻り値
GetRoll
この関数は、Camera に Camera:SetRoll() を使用して適用された現在のロールをラジアンで返します。ロールはカメラの Z 軸の回転で定義されます。
この関数は、Camera:SetRoll() 関数を使用してのみロールを返します。ロールを手動でカメラの Camera.CFrame に適用した場合は、ロールのロールアップはカウントされません。Camera のロールを取得するには、次のスナップショットを使用できます:
local function getActualRoll()
local camera = workspace.CurrentCamera
local trueUp = Vector3.new(0, 1, 0)
local cameraUp = camera:GetRenderCFrame().upVector
return math.acos(trueUp:Dot(cameraUp))
end
戻り値
Class.Camera:SetRoll() によって適用される現在のロール。
コードサンプル
local currentRoll = math.deg(workspace.CurrentCamera:GetRoll()) -- Gets the current roll of the camera in degrees.
if currentRoll ~= 20 then
workspace.CurrentCamera:SetRoll(math.rad(20)) -- If the camera isn't at 20 degrees roll, the roll is set to 20 degrees.
end
ScreenPointToRay
この関数は、画面の 2D 位置から Ray を作成します (定義されたピクセル)、GUI の挿入をカウントします。 Ray は、世界の Vector3 の 2D 位置からの 2>Class.Camera2> の
この関数は、GUIのインセットを承認するために、GUIエレメントのオフセットを適用します。これにより、画面の位置がトップバーの下の左上隅に開始することがあります。たとえ同じ機能でも、ギュイのオフセットを計算しない場合は、Camera:ViewportPointToRay() を使用してください。
作成された Ray はユニットレイで、長さは 1 スタッドしかありません。長いレイを作成するには、フォロー中のコードを実行できます:
local camera = workspace.CurrentCameralocal length = 500local unitRay = camera:ScreenPointToRay(100, 100)local extendedRay = Ray.new(unitRay.Origin, unitRay.Direction * length)
この関数は、現在のワークスペースカメラのみに作動します。他のカメラ、例えば、ViewportFrame を作成するなど、は、(1, 1) の初期ビューポートサイズを持ち、Workspace.CurrentCamera にのみ更新され
パラメータ
戻り値
SetRoll
この機能は過時になっており、最高の実践としてはもう考えられません。
この関数は、Camera の現在のロール、in radians、を設定します。ロールは、Camera.CFrame の後に適用され、カメラの Z 軸の回転を表示します。
たとえば、次のコードは Camera を逆コードにします:
workspace.CurrentCamera:SetRoll(math.pi) -- math.pi radians = 180 degrees
SetRoll は、Camera.CFrame プロパティを使用して適用されたすべてのロールに影響しません。Camera.CFrame プロパティを使用してロールを適用すると、CFrame プロパティに反映されませんが、1> Class.Camera:GetRenderCFrame
この関数は、デフォルトのカメラスクリプトが使用されているかどうかにかかわらず、Camera.CameraType が 「スクリプト可能」 に設定されている場合にのみ使用できます。Camera.CameraType が他の 2>Class.Camera.CameraType2> と一緒に使用されている場合は、出力で警告が表示されます
この関数を使用して適用されたすべてのロールは、Camera.CameraType が スクリプト可能 から変更されたときに失われます。
この関数を使用してロールセットを取得するには、Camera:GetRoll() を使用します。
この関数は古いため、Camera にロールを適用する代わりに、Camera.CFrame プロパティを使用してください。たとえば:
local currentCFrame = workspace.CurrentCamera.CFramelocal rollCFrame = CFrame.Angles(0, 0, roll)workspace.CurrentCamera.CFrame = currentCFrame * rollCFrame
パラメータ
Class.Camera に適用するロール角度、in radians。
戻り値
ViewportPointToRay
この関数は、デバイスの安全ビューポートコーディングの 2D 位置から Ray を作成します、その結果はピクセルによって定義された深度 (in studs) からの Vector3 の Camera に等しいです。
以下の例に示すように、 (0, 0) は、Roblox トップバーの左上隅にあります。これは、入力 2D 位置が En册.ScreenInsets|CoreUISafeInsets のセットには影響しませんが、CoreUISafeInsets の
UI インスタンスは、異なるコーディネートシステムを使用します (GuiObject.AbsolutePosition は、この関数が使用する CoreUISafeInsets ビューポートコーディネートシステムを使用しています)。コア UI コ
また、この関数は Class.Workspace. CurrentCamera カメラのみに作動します。他のカメラ、例えば、 ViewportFrame を作成するカメラの場合、最初のビューポートサイズは (1, 1)</
この関数は、ViewportSize プロパティと一緒に使用して、画面の中央からレイを作成するために使用できます:
local Workspace = game:GetService("Workspace")local camera = Workspace.CurrentCameralocal viewportPoint = camera.ViewportSize / 2local unitRay = camera:ViewportPointToRay(viewportPoint.X, viewportPoint.Y, 0)
作成された Ray はユニットレイで、長さは 1 スタッドしかありません。長いレイを作成するには、フォロー中のコードを実行できます:
local Workspace = game:GetService("Workspace")local camera = Workspace.CurrentCameralocal length = 500local unitRay = camera:ScreenPointToRay(100, 100)local extendedRay = Ray.new(unitRay.Origin, unitRay.Direction * length)
パラメータ
戻り値
WorldToScreenPoint
この関数は、Vector3 の画面位置と深度、およびこの位置が画面の境界内かどうかを返します。
この関数は、トップバーの空きスペースなど、現在の GUI を考慮します。これにより、返される 2D 位置は、GUI ポジションと同じように使用でき、GUI 要素を配置することができます。For an otherwise identical function that ignores the GUI inset, see Camera:WorldToViewportPoint() .
local camera = workspace.CurrentCameralocal worldPoint = Vector3.new(0, 10, 0)local vector, onScreen = camera:WorldToScreenPoint(worldPoint)local screenPoint = Vector2.new(vector.X, vector.Y)local depth = vector.Z
この関数は、worldPoint が画面の範囲内にあるかどうかを示すボーキャストを実行しません。true または BaseParts の隠すかどうかにかかわらず、2>true2> は、ポイントが 5>Class.BasePart|BaseParts5> または 8>Class.Terrain</
パラメータ
戻り値
WorldToViewportPoint
この関数は、Vector3 の画面位置と深度、およびこの位置が画面の境界内かどうかを返します。
この関数は、トップバーの空き位置など、現在の GUI インセットを考慮しません。これは、2D 位置を表示ポートの左上隅から取得することを意味し、ScreenGui.IgnoreGuiInset を使用していない場合、この位置は GUI 要素を配置するのに適していません。
For an otherwise identical function that accounts for the GUI inset, see Camera:WorldToScreenPoint() .
local camera = workspace.CurrentCameralocal worldPoint = Vector3.new(0, 10, 0)local vector, onScreen = camera:WorldToViewportPoint(worldPoint)local viewportPoint = Vector2.new(vector.X, vector.Y)local depth = vector.Z
この関数は、worldPoint が画面の範囲内にあるかどうかを示すボーキャストを実行しません。true または BaseParts の隠すかどうかにかかわらず、2>true2> は、ポイントが 5>Class.BasePart|BaseParts5> または 8>Class.Terrain</
パラメータ
戻り値
イベント
InterpolationFinished
このイベントは、Camera が Camera:Interpolate() 関数を使用してインターポリрова完了したときに発生します。
このイベントは、Camera:Interpolate() が再び呼び出されたため、減速しません。
代わりに、TweenService をアニメートするために Camera を使用することをお勧めします。