Cフレーム

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

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.RedBlock
local 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.RedBlock
redBlock.CFrame = CFrame.new(redBlock.Position) + Vector3.new(0, 1.25, 0)
前へ
後ろ

同じテクニックを使用して、オブジェクトの位置から別のオブジェクトの位置をオフセットできます。次の例では、Vector3 は、ブロックの位置ではなく、青いキューブの位置で新しい CFrame を作成します。


local redBlock = workspace.RedBlock
local blueCube = workspace.BlueCube
redBlock.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.RedBlock
local blueCube = workspace.BlueCube
local offsetCFrame = CFrame.new(0, 2, 0)
redBlock.CFrame = blueCube.CFrame:ToWorldSpace(offsetCFrame)
前へ
後ろ

相対ローテーション

Datatype.CFrame:ToWorldSpace() を使用して、オブジェクトを自分自身の相対に回転することもできます。次の例では、redBlock パーツは、y軸の 70 度、z 軸の 20 度を回転します。


local redBlock = workspace.RedBlock
local rotatedCFrame = CFrame.Angles(0, math.rad(70), math.rad(20))
redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
前へ
後ろ

ポイントに向かって特定の表面に直面する

オブジェクトのフロントを別のオブジェクトにするには、Vector3 ポイントを Datatype. CFrame.new() の 2つ目のパラメーターとして提供し、相対回転を使用して、オブジェクトのフロントを任意の Datatype. Vector3 ポイントに

  1. 白いサークルでマークされた 前面 表面を指して、 マーク します。
  2. Datatype.CFrame を回転して、黒い円でマークされた 表面を作成します。

local redBlock = workspace.RedBlock
local 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.RedBlock
local greenCube = workspace.GreenCube
local cyanCube = workspace.CyanCube
redBlock.CFrame = greenCube.CFrame:Lerp(cyanCube.CFrame, 0.7)
前へ
後ろ