A CFrame 、 short for フレームをコーディネートするフレーム 、はデータタイプを使用して 3D オブジェクトを回転および位置付けるために使用されます。As オブジェクトプロ
ゲーム内の CFrame アプリの例は、次のとおりです:
- プロジェクトに使用する遠隔ターゲットポイントを見つけるために、例えばプレイヤーのレーザーブラスターでターゲットされている敵の位置を見つけます。
- プレイヤーがカメラと対話する際に、特定の NPC に焦点を合わせるようにカメラを動かす。
- プレイヤーの頭の直接上にステータスインジケータを配置して、麻痺、ブースト、毒液などを表示します。
CFrame の基本
CFrame の位置付け
デフォルトの位置にある空の CFrame を作成するには、CFrame.new() を使
local redBlock = workspace.RedBlock-- 新しい CFrame を作成local newCFrame = CFrame.new(-2, 2, 4)-- 赤いブロックの CFrame を新しい CFrame で上書きredBlock.CFrame = newCFrame
あるいは、新しい Vector3 位置を CFrame.new() に提供し、同じ結果を達成できます:
local redBlock = workspace.RedBlock-- 新しい CFrame を作成local newVector3 = Vector3.new(-2, 2, 4)local newCFrame = CFrame.new(newVector3)-- 赤いブロックの CFrame を新しい CFrame で上書きredBlock.CFrame = newCFrame
CFrame を回転
Datatype.CFrame を作成するには、CFrame.Angles() コンストラクターを使用して、必要な軸の回転角をラジアンで提供します。Datatype.
local redBlock = workspace.RedBlock-- 新しい回転 CFrame を作成local newCFrame = CFrame.Angles(0, math.rad(45), 0)-- 赤いブロックの CFrame を新しい CFrame で上書きredBlock.CFrame = newCFrame
ポイントに向かって顔を向ける
Datatype.CFrame.new() を使用して、世界の特定の場所に CFrame の前面を指定できます。次の例では、redBlock パーツの位置は (0, 3, 0) であり、白いサークルでマークされた前面を指しています。1>blueCube</
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCube-- 両方の開始位置とターゲット位置の両方に Vector3 を作成local startPosition = Vector3.new(0, 3, 0)local targetPosition = blueCube.Position-- 赤いブロックを「開始ポジション」に置き、前面を「ターゲットポジション」に指向させますredBlock.CFrame = CFrame.new(startPosition, targetPosition)
CFrame のオフセットを設定する
オブジェクトの現在の位置から特定のスタッド数でオフセットするには、Vector3 をオブジェクトの位置から新しい CFrame
local redBlock = workspace.RedBlockredBlock.CFrame = CFrame.new(redBlock.Position) + Vector3.new(0, 1.25, 0)
同じテクニックを使用して、オブジェクトの位置から別のオブジェクトの位置をオフセットできます。次の例では、Vector3 は、ブロックの位置ではなく、青いキューブの位置で新しい CFrame を作成します。
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCuberedBlock.CFrame = CFrame.new(blueCube.Position) + Vector3.new(0, 2, 0)
ダイナミック CFrame オリエンテーション
Datatype.CFrame.new() と CFrame.Angles() のビルダーは、世界の特定の方向にオブジェクトを再ポジションするか、または世界の固定の位置と回転角度を基準にして回転させますが、固定の世界の位置と回転角度は、Datatype.CFrame.new() の構造には使用できません。たとえば:
- 世界中のどこにいても、プレイヤーの目の前にあるプレイングトレジャーを直接配置すること。
- 魔法のジニーをプレイヤーの右肩の直上に出現させる。
これらの場合、CFrame メソッドを使用して、構造者ではなくメソッドを使用してください。
相対位置
The CFrame:ToWorldSpace() 関数は、オブジェクトの CFrame を変換します — 自分のローカルオリエントを尊重するように — 新しい 世界 オリエントにオフセットします。これは、部品を自分自身または他のオブジェクトにオフセットするために最適
次の例では、redBlock パーツのオフセットは、青いキューブの (矢印が通っている矢印) の y軸に対して 2 スタッド相当のオフセットを持ち、 not オフセットはグローバル y軸に対して直接矢印を持つ 。
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCubelocal offsetCFrame = CFrame.new(0, 2, 0)redBlock.CFrame = blueCube.CFrame:ToWorldSpace(offsetCFrame)
相対ローテーション
Datatype.CFrame:ToWorldSpace() を使用して、オブジェクトを自分自身の相対に回転することもできます。次の例では、redBlock パーツは、y軸の 70 度、z 軸の 20 度を回転します。
local redBlock = workspace.RedBlocklocal rotatedCFrame = CFrame.Angles(0, math.rad(70), math.rad(20))redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
ポイントに向かって特定の表面に直面する
オブジェクトのフロントを別のオブジェクトにするには、Vector3 ポイントを Datatype. CFrame.new() の 2つ目のパラメーターとして提供し、相対回転を使用して、オブジェクトのフロントを任意の Datatype. Vector3 ポイントに
- 白いサークルでマークされた 前面 表面を指して、 マーク します。
- Datatype.CFrame を回転して、黒い円でマークされた 上 表面を作成します。
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCube-- ターゲットの位置のベクトル3を作成local targetPosition = blueCube.Position-- 赤いブロックの前面を「ターゲットポジション」に指向するredBlock.CFrame = CFrame.new(redBlock.Position, targetPosition)-- 赤いブロックの正面表面 (白い円) は、青いキューブに向かっています-- 赤いブロックの CFrame を自分の位置に回転して、上面(正面ではない)にターゲットを向けるlocal rotatedCFrame = CFrame.Angles(math.rad(-90), 0, 0)redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)-- Now the redBlock's top surface (black circle) is pointing towards the blueCube (as seen in After below)
ポイントの間にある両方のポイントを見つける
Datatype.CFrame を 2つのポイント間に配置するには、 line性接続 または CFrame を使用します。次の例では、1> redBlock1> パーツが 4> green
local redBlock = workspace.RedBlocklocal greenCube = workspace.GreenCubelocal cyanCube = workspace.CyanCuberedBlock.CFrame = greenCube.CFrame:Lerp(cyanCube.CFrame, 0.7)