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 。
旋转组件
CFrame 存储 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 副本。
接收一个或多个 CFrame 对象,并将它们转换为对象到世界空间。
接收一个或多个 CFrame 对象,并将它们转换为从世界到对象空间的形式返回。
接收一个或多个 Vector3 对象,并将它们转换为对象到世界空间。
接收一个或多个 Vector3 对象,并将它们转换为从世界到对象空间的形式返回。
接收一个或多个 Vector3 对象,并将它们旋转到对象到世界空间。
接收一个或多个 Vector3 对象,并将它们旋转从世界到对象空间返回。
返回值 , , , , , , , , , , , , , , ‑ ‑ 代表了 和 ‑ 的 3×3旋转矩阵位置。
返回可用于生成 CFrame 的大约角度,使用可选的 Enum.RotationOrder 。
返回可用于生成 CFrame 的大约角度,使用 Enum.RotationOrder.XYZ 。
返回可用于生成 CFrame 的大约角度,使用 Enum.RotationOrder.YXZ 。
返回一个 CFrame 和另一个的方向之间的角度,以辐射为单位。
数学算式
构造工具
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 对象的方向。等于 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 .