CFrame資料輸入,簡稱 協調框架 ,用於描述3D位置和方向。它由 位置 組件和 旋轉 組件組成,包括在 Roblox 上處理 3D 數據所需的算術操作。
-- 在特定位置創建 CFrame 並使用歐几里旋轉local cf = CFrame.new(0, 5, 0) * CFrame.fromEulerAngles(math.rad(45), 0, 0)
有關介紹 CFrame 數據輸入的信息,請參閱 CFrames 。
位置元件
位置元件可用為 Vector3 。此外,一個 CFrame 物件的組件也可以在 X、Y 和 Z 屬性中像一個 Vector3 一樣使用。
旋轉元件
商店 3D 旋轉資料在 3×3 旋轉矩陣中。這些值由 CFrame:GetComponents() 函數在 x、y 和 z 位置值之後返回。當執行涉及旋轉的計算時,會使用此矩陣來內部計算,使用 弧度 作為單位 (要轉換為另一個單位,請使用 math.rad() 或 math.deg() )。有關 Roblox 引擎如何執行旋轉的更多資訊,請參閱 Enum.RotationOrder 。
下表代表 CFrame 對物件的旋轉矩陣和與可用向量特性,例如 LookVector 和 RightVector 的關係。雖然旋轉矩陣的個別組件很少單獨有用,但從它們派生的向量屬性卻非常有用。
<th>YVector、UpVector</th><th>ZVector、-LookVector <sup>†</sup></th></tr></thead><tbody><tr><td>R00</td><td>R01</td><td>R02</td></tr><tr><td>R10</td><td>R11</td><td>R12</td></tr><tr><td>R20</td><td>R21</td><td>R22</td></tr></tbody>
XVector、RightVector |
---|
概要
建構子
- new()
返回空白身份 CFrame 。
返回包含提供的 CFrame 、 x 和 y 組件的位置的 z 。
返回位置( 、 、 、 、 、 、 )和四元數( 、 、 、 )。
返回位置(x,y,z)的CFrame從旋轉矩陣指定的方向,以指定的方向返回。
- fromRotationBetweenVectors(from : Vector3,to : Vector3)
- fromEulerAngles(rx : number,ry : number,rz : number,order : Enum.RotationOrder)
返回旋轉的 CFrame 從角度 rx , ry 和 rz 在弧度上。旋轉在可選的 Enum.RotationOrder 中應用,默認值為 XYZ 。
- fromEulerAnglesXYZ(rx : number,ry : number,rz : number)
返回旋轉的 CFrame 從角度 rx , ry 和 rz 在圓度上使用 Enum.RotationOrder.XYZ 。
- fromEulerAnglesYXZ(rx : number,ry : number,rz : number)
返回旋轉的 CFrame 從角度 rx , ry 和 rz 在圓度上使用 Enum.RotationOrder.YXZ 。
等於 fromEulerAnglesXYZ() 。
- fromOrientation(rx : number,ry : number,rz : number)
等於 fromEulerAnglesYXZ() 。
- fromAxisAngle(v : Vector3,r : number)
- fromMatrix(pos : Vector3,vX : Vector3,vY : Vector3,vZ : Vector3)
從翻譯和旋轉矩陣的列中返回 CFrame 和旋轉矩陣的列。
屬性
方法
返回 CFrame 的反向。
返回一個 CFrame 在自身和 goal 之間被分數 alpha 插入的值。
返回 CFrame 的正常化副本。
接收一個或多個 CFrame 對象,並將它們轉換為對象到世界空間。
接收一個或多個 CFrame 對象,並將它們轉換為世界到對象空間。
接收一個或多個 Vector3 對象,並將它們轉換為對象到世界空間。
接收一個或多個 Vector3 對象,並將它們轉換為世界到對象空間。
接收一個或多個 Vector3 對象,並將它們旋轉到對象到世界空間。
接收一個或多個 Vector3 對象,並將它們從世界轉換為對象空間。
返回值 x , y , z , R00 , R01 , R02 , R10 , R11 , R12 , R20 , R21 , 和 R22 , 其中 x y z 代表了 CFrame 和 R00 ‑ R22 代表了它的 3×3旋轉矩陣。
返回可用於生成 CFrame 的近似角度,使用可選擇的 Enum.RotationOrder 。
返回大約的角度,可以用來生成 CFrame 使用 Enum.RotationOrder.XYZ 產生。
返回大約的角度,可以用來生成 CFrame 使用 Enum.RotationOrder.YXZ 產生。
數學算式
建構子
new
返回新的 CFrame 位置在 pos 並面向 lookAt ,假設 (0, 1, 0) 在世界空間中被視為"上升"。
這個過載建造者已被 CFrame.lookAt() 取代,達到相同的目標。它仍然是為了保留相容性。
在高傾斜角度(約 82 度)時,您可能會遇到數值不穩定。如果這是問題,或者如果您需要不同的「上」向量力,請使用 CFrame.fromMatrix() 來更準確地構建 CFrame 。此外,如果 lookAt 直接位於 pos (傾斜角度為 90 度)上方,「上」向量將切換到 X 軸。
fromEulerAngles
返回旋轉的 CFrame 從角度 rx , ry 和 rz 在弧度上。旋轉在可選的 Enum.RotationOrder 中應用,默認值為 XYZ,等於:
CFrame.fromEulerAngles(rx, 0, 0) * -- XCFrame.fromEulerAngles(0, ry, 0) * -- YCFrame.fromEulerAngles(0, 0, rz) -- Z
參數
fromEulerAnglesXYZ
返回旋轉的 CFrame 從角度 rx , ry 和 rz 在圓度上使用 Enum.RotationOrder.XYZ , 相當於:
CFrame.fromEulerAngles(rx, 0, 0) * -- XCFrame.fromEulerAngles(0, ry, 0) * -- YCFrame.fromEulerAngles(0, 0, rz) -- Z
fromEulerAnglesYXZ
返回旋轉的 CFrame 從角度 rx , ry 和 rz 在圓度上使用 Enum.RotationOrder.YXZ , 相當於:
CFrame.fromEulerAngles(0, ry, 0) * -- YCFrame.fromEulerAngles(rx, 0, 0) * -- XCFrame.fromEulerAngles(0, 0, rz) -- Z
fromMatrix
從翻譯和旋轉矩陣的列中返回 CFrame 和旋轉矩陣的列。如果 vZ 被排除,第三列將計算為 vX:Cross(vY).Unit 。
參數
等於 RightVector 。
等於 - LookVector 。
屬性
LookVector
CFrame 對物件的前向方向組件,相當於否定的 ZVector 或旋轉矩陣的第三列。
local cf = CFrame.new(0, 0, 0)local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()print(cf.LookVector) --> (-0, -0, -1)print(-cf.ZVector) --> (-0, -0, -1)print(-R02, -R12, -R22) --> (-0 -0 -1)
將 CFrame 對物件的 LookVector 添加到自己身上會產生一個移動到任何方向的 1 單位前進的 CFrame 。
XVector
X 是 CFrame 對物件的方向的 X 部分。等於 RightVector 或旋轉矩陣的第一行。
local cf = CFrame.new(0, 0, 0)local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()print(cf.XVector) --> (1, 0, 0)print(cf.RightVector) --> (1, 0, 0)print(R00, R10, R20) --> (1 0 0)
ZVector
CFrame 對物件的Z方向。等於否定的LookVector 或旋轉矩陣的第三列。
local cf = CFrame.new(0, 0, 0)local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()print(cf.ZVector) --> (0, 0, 1)print(-cf.LookVector) --> (0, 0, 1)print(R02, R12, R22) --> (0 0 1)
方法
ToEulerAngles
返回可用於生成 CFrame 的近似角度,使用可選擇的 Enum.RotationOrder 。如果你沒有提供 order , 方法使用 Enum.RotationOrder.XYZ .