CFrame

แสดงที่เลิกใช้งานแล้ว

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

พิมพ์CFrame สั้นสำหรับ กรอบความสัมพันธ์ อธิบายตำแหน่งและทิศทาง 3Dประกอบด้วยส่วนประกอบ ตําแหน่ง และส่วนประกอบ การหมุน และรวมถึงการดำเนินการคณิตศาสตร์ที่จำเป็นสําหรับการทํางานกับข้อมูล 3D บน Roblox


-- สร้าง CFrame ในตําแหน่งที่กำหนดและหมุน Euler
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 ค่าตำแหน่งแมทริคนี้ใช้ภายในเมื่อทำการคำนวณที่เกี่ยวข้องกับการหมุนโดยใช้ radians เป็นหน่วย (สำหรับการแปลงจากหนึ่งไปยังอีกใช้ math.rad() หรือ math.deg() )สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่เครื่องยนต์ Roblox ดําเนินการการหมุน, ดู Enum.RotationOrder

ตารางด้านล่างแสดงส่วนประกอบของแมทริคการหมุนของวัตถุ CFrame และความสัมพันธ์กับคุณสมบัติเวกเตอร์ที่มีอยู่เช่น LookVector และ RightVectorแม้ว่าส่วนประกอบแต่ละส่วนของ矩阵การหมุนจะไม่มีประโยชน์เอง แต่คุณสมบัติเวกเตอร์ที่ได้จากพวกเขามีประโยชน์มากขึ้น


<th>เวกเตอร์ Y, 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 สิ่งที่ XVector, RightVector
ไม่เหมือนคนอื่น ๆ LookVector แทนที่ส่วนประกอบของคอลัมน์ที่ถูกปฏิเสธThe LookVector มีประโยชน์เพราะหลาย Instances เช่น Camera และ Attachments ใช้เวกเตอร์นั้นเป็นทิศทางที่อินสแตนซ์ชี้ไป

สรุป

คอนสตรัคเตอร์

คุณสมบัติ

  • ตัวตน CFrame โดยไม่มีการแปลหรือการหมุน

  • ตำแหน่ง 3D ของ CFrame

  • สำเนาของ CFrame โดยไม่มีการแปล

  • พิกัด X ของตำแหน่ง

  • พิกัด Y ของตำแหน่ง

  • พิกัด Z ของตำแหน่ง

  • ส่วนทิศทางข้างหน้าของการจัดตำแหน่งของวัตถุ CFrame ในทิศทางเดียวกับรูปแบบที่ถูกปฏิเสธของ ZVector

  • ส่วนทิศทางขวาของการจัดตำแหน่งของวัตถุ CFrame

  • ส่วนทิศทางขึ้นของทิศทางของวัตถุ CFrame

  • เทียบเท่ากับ RightVector .

  • เทียบเท่ากับ UpVector .

  • ส่วน Z ของทิศทางของวัตถุ CFrame ที่มีอยู่ เทียบเท่ากับคอลัมน์ที่สามของแมทริคการหมุน

วิธีการ

การดำเนินการทางคณิตศาสตร์

คอนสตรัคเตอร์

new

สร้างตัวตระหน่งว่างเปล่า CFrame

new

ส่งคืน CFrame โดยไม่มีการหมุนด้วยตำแหน่งของ Vector3 ที่ให้ไว้

พารามิเตอร์

pos: Vector3

new

คืนค่าใหม่ CFrame ที่ตั้งอยู่ที่ pos และหันไปทาง lookAt โดยสมมติว่า (0, 1, 0) ถือว่าเป็น "ขึ้น" ในพื้นที่โลก

ตัวบ่งชี้นี้เกินไปได้ถูกแทนที่โดย CFrame.lookAt() ซึ่งบรรลุเป้าหมายที่คล้ายกัน ยังคงเหลือเพื่อความสอดคล้องกับรุ่นก่อนหน้า

ในมุมแบนสูง (ประมาณ 82 องศา) คุณอาจประสบกับความไม่เสถียรทางตัวเลขหากนี่เป็นปัญหาหรือหากคุณต้องการเวกเตอร์ "ขึ้น" ที่แตกต่างกันให้ใช้ CFrame.fromMatrix() เพื่อสร้าง CFrame ได้อย่างแม่นยํามากขึ้นนอกจากนี้หาก lookAt อยู่โดยตรงเหนือ pos (มุมเอียง 90 องศา) เวกเตอร์ "ขึ้น" จะสลับไปที่แกน X

พารามิเตอร์

pos: Vector3
lookAt: Vector3

new

ส่งคืน CFrame ที่มีตำแหน่งประกอบด้วยส่วนที่ให้ไว้ x , y และ z ส่วนประกอบ

พารามิเตอร์

new

ส่งคืน CFrame จากตําแหน่ง ( x , y , z ) และควอเตอร์น ( qX , qY , qZ , qW ).ควอเตอร์นคาดว่าจะมีความยาวของหน่วยเพื่อแทนที่การหมุนที่ถูกต้องหากไม่ใช่กรณีนี้ควอเตอร์นจะถูกปรับให้เป็นมาตรฐาน

พารามิเตอร์

new

สร้าง CFrame จากตําแหน่ง ( x , y , z ) ด้วยการจัดเรียงที่ระบุโดยแมทริกซ์การหมุน

[[R00 R01 R02] [R10 R11 R12] [R20 R21 R22]]

พารามิเตอร์

R00: number
R01: number
R02: number
R10: number
R11: number
R12: number
R20: number
R21: number
R22: number

lookAt

คืนค่าใหม่ CFrame ด้วยตำแหน่งของ at และหันไปทาง lookAt โดยสามารถระบุทิศทางขึ้น ( up ) ด้วยค่าเริ่มต้นของ (0, 1, 0)

พารามิเตอร์

lookAt: Vector3
ค่าเริ่มต้น: Vector3.yAxis

lookAlong

คืนค่าใหม่ CFrame ด้วยตำแหน่งของ at และหันไปตาม direction ตัวเลือกที่ระบุทิศทางขึ้น ( up ) โดยมีค่าเริ่มต้นของ (0, 1, 0)

คอนสตรักเตอร์นี้เทียบเท่ากับ CFrame.lookAt(at, at + direction)

พารามิเตอร์

direction: Vector3
ค่าเริ่มต้น: Vector3.yAxis

fromRotationBetweenVectors

ส่งคืน CFrame ที่แทนที่ทิศทางที่จำเป็นในการหมุนจาก Vector3 ครั้งแรกไปยังครั้งที่สองด้วยตำแหน่งที่ตั้งเป็นศูนย์

พารามิเตอร์

from: Vector3

เวกเตอร์ที่แทนทิศทาง "จาก"

เวกเตอร์ที่แทนทิศทาง "ไป"

fromEulerAngles

ส่งคืนการหมุน CFrame จากมุม rx , ry และ rz ในรัศมีการหมุนจะถูกใช้ในตัวเลือก Enum.RotationOrder ด้วยค่าเริ่มต้นของ XYZ เทียบเท่ากับ:


CFrame.fromEulerAngles(rx, 0, 0) * -- X
CFrame.fromEulerAngles(0, ry, 0) * -- Y
CFrame.fromEulerAngles(0, 0, rz) -- Z

พารามิเตอร์

rx: number
ry: number
rz: number
ค่าเริ่มต้น: Enum.RotationOrder.XYZ

fromEulerAnglesXYZ

ส่งคืนการหมุน CFrame จากมุม rx , ry และ rz ในรัศมีโดยใช้ Enum.RotationOrder.XYZ เทียบเท่ากับ:


CFrame.fromEulerAngles(rx, 0, 0) * -- X
CFrame.fromEulerAngles(0, ry, 0) * -- Y
CFrame.fromEulerAngles(0, 0, rz) -- Z

พารามิเตอร์

rx: number
ry: number
rz: number

fromEulerAnglesYXZ

ส่งคืนการหมุน CFrame จากมุม rx , ry และ rz ในรัศมีโดยใช้ Enum.RotationOrder.YXZ เทียบเท่ากับ:


CFrame.fromEulerAngles(0, ry, 0) * -- Y
CFrame.fromEulerAngles(rx, 0, 0) * -- X
CFrame.fromEulerAngles(0, 0, rz) -- Z

พารามิเตอร์

rx: number
ry: number
rz: number

Angles

เทียบเท่ากับ fromEulerAnglesXYZ() .

พารามิเตอร์

rx: number
ry: number
rz: number

fromOrientation

เทียบเท่ากับ fromEulerAnglesYXZ() .

พารามิเตอร์

rx: number
ry: number
rz: number

fromAxisAngle

ส่งคืนการหมุน CFrame จากหน่วย Vector3 และการหมุนในรัศมี

พารามิเตอร์

fromMatrix

คืน CFrame จากการแปลและคอลัมน์ของแมทริคการหมุนหาก vZ ถูกเอาออก คอลัมน์ที่สามจะถูกคำนวณเป็น vX:Cross(vY).Unit

พารามิเตอร์

pos: Vector3

ตำแหน่ง 3D ของ CFrame

เทียบเท่ากับ RightVector .

เทียบเท่ากับ UpVector .

เทียบเท่ากับ - LookVector .

คุณสมบัติ

identity

ตัวตน CFrame โดยไม่มีการแปลหรือการหมุนคุณสมบัตินี้เป็นคงที่ คงที่ และต้องเข้าถึงได้ทั่วโลกต่างจากการเข้าถึงผ่านวัตถุเดี่ยว CFrame

Position

ตำแหน่ง 3D ของ CFrame

Rotation

สำเนาของ CFrame โดยไม่มีการแปล

พิกัด X ของตำแหน่ง

พิกัด Y ของตำแหน่ง

พิกัด Z ของตำแหน่ง

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 ให้กับตัวเองผลิตวัตถุ CFrame ย้ายไปข้างหน้าในทิศทางที่มันกำลังเผชิญโดย 1 หน่วย

RightVector

ส่วนทิศทางขวาของการจัดตำแหน่งของวัตถุ CFrame ในทิศทางที่ถูกต้อง เทียบเท่ากับ XVector หรือคอลัมน์แรกของแมตริกซ์การหมุน


local cf = CFrame.new(0, 0, 0)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()
print(cf.RightVector) --> (1, 0, 0)
print(cf.XVector) --> (1, 0, 0)
print(R00, R10, R20) --> (1 0 0)

UpVector

ส่วนทิศทางขึ้นของการจัดตำแหน่งของวัตถุ CFrame ในทิศทางที่ตรงกัน เทียบเท่ากับ YVector หรือคอลัมนที่สองของแมตรการหมุน


local cf = CFrame.new(0, 0, 0)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()
print(cf.UpVector) --> (0, 1, 0)
print(cf.YVector) --> (0, 1, 0)
print(R01, R11, R21) --> (0 1 0)

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)

YVector

ส่วน Y ของทิศทางของวัตถุ CFrame ที่มีอยู่ เทียบเท่ากับ UpVector หรือคอลัมนที่สองของแมทริคการหมุน


local cf = CFrame.new(0, 0, 0)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()
print(cf.YVector) --> (0, 1, 0)
print(cf.UpVector) --> (0, 1, 0)
print(R01, R11, R21) --> (0 1 0)

ZVector

ส่วน Z ของทิศทางของวัตถุ CFrame ที่มีอยู่ เทียบเท่ากับการปฏิเสธ 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)

วิธีการ

Inverse

ส่งคืนสิ่งที่ตรงกันข้ามของ CFrame

ส่งค่ากลับ

Lerp

คืนค่า CFrame ที่สลับกันระหว่างตัวเองและ goal โดยเศษ alpha

พารามิเตอร์

goal: CFrame
alpha: number

ส่งค่ากลับ

Orthonormalize

ส่งคืนคัดลอกออร์โธนอมของ CFrameคุณสมบัติ BasePart.CFrame จะใช้การโอธินอมอัตโนมัติโดยอัตโนมัติ แต่ API อื่นๆ ที่ใช้ CFrames ไม่ได้ ดังนั้นวิธีนี้จึงจำเป็นในบางครั้งเมื่ออัปเดตอย่างค่อยเป็นค่อยไปของ CFrame และใช้ร่วมกับพวกเขา

ส่งค่ากลับ

ToWorldSpace

รับหนึ่งหรือมากกว่า CFrame วัตถุและส่งคืนพวกเขาถูกเปลี่ยนจากวัตถุเป็นพื้นที่โลก เทียบเท่ากับ:

CFrame * cf

พารามิเตอร์

ส่งค่ากลับ

ToObjectSpace

ได้รับหนึ่งหรือมากกว่า CFrame วัตถุและส่งคืนพวกเขาถูกเปลี่ยนจากโลกเป็นพื้นที่วัตถุ เทียบเท่ากับ:

CFrame:Inverse() * cf

พารามิเตอร์

ส่งค่ากลับ

PointToWorldSpace

รับหนึ่งหรือมากกว่า Vector3 วัตถุและส่งคืนพวกเขาถูกเปลี่ยนจากวัตถุเป็นพื้นที่โลก เทียบเท่ากับ:

CFrame * v3

พารามิเตอร์

ส่งค่ากลับ

PointToObjectSpace

ได้รับหนึ่งหรือมากกว่า Vector3 วัตถุและส่งคืนพวกเขาถูกเปลี่ยนจากโลกเป็นพื้นที่วัตถุ เทียบเท่ากับ:

CFrame:Inverse() * v3

พารามิเตอร์

ส่งค่ากลับ

VectorToWorldSpace

รับหนึ่งหรือมากกว่า Vector3 วัตถุและส่งคืนพวกเขาหมุนจากวัตถุสู่พื้นที่โลก เทียบเท่ากับ:

(CFrame - CFrame.Position) * v3

พารามิเตอร์

ส่งค่ากลับ

VectorToObjectSpace

รับหนึ่งหรือมากกว่า Vector3 วัตถุและส่งคืนพวกเขาหมุนจากโลกไปยังพื้นที่วัตถุ เทียบเท่ากับ:

(CFrame:Inverse() - CFrame:Inverse().Position) * v3

พารามิเตอร์

ส่งค่ากลับ

GetComponents

คืนค่า x , y , z , R00 , R01 , R02 , R10 , R11 , R12 , R20 , R21 และ R22 ซึ่ง x``y``z แทนตำแหน่งของ CFrame และ R00R22 แทนตำแหน่งของ 3×3 เมทริกซ์การหมุน

ส่งค่ากลับ

ToEulerAngles

ส่งคืนมุมโดยประมาณที่สามารถใช้เพื่อสร้าง CFrame โดยใช้ตัวเลือก Enum.RotationOrderหากคุณไม่ให้ order วิธีจะใช้ Enum.RotationOrder.XYZ

พารามิเตอร์

ค่าเริ่มต้น: Enum.RotationOrder.XYZ

ส่งค่ากลับ

ToEulerAnglesXYZ

ส่งคืนมุมโดยประมาณที่สามารถใช้เพื่อสร้าง CFrame โดยใช้ Enum.RotationOrder.XYZ

ส่งค่ากลับ

ToEulerAnglesYXZ

ส่งคืนมุมโดยประมาณที่สามารถใช้เพื่อสร้าง CFrame โดยใช้ Enum.RotationOrder.YXZ

ส่งค่ากลับ

ToOrientation

เทียบเท่ากับ CFrame:ToEulerAnglesYXZ() .

ส่งค่ากลับ

ToAxisAngle

คืน tuple ของ Vector3 และจํานวนที่แทนที่การหมุนของ CFrame ในการแสดงผลในแกน-มุม

ส่งค่ากลับ

components

เทียบเท่ากับ CFrame:GetComponents() .

ส่งค่ากลับ

FuzzyEq

คืน true หากอีก CFrame อยู่ใกล้กับสิ่งนี้ CFrame ในตำแหน่งและการหมุนเพียงพอค่า epsilon ถูกใช้เพื่อควบคุมความอดทนสำหรับความคล้ายคลึงนี้; ค่านี้เป็นตัวเลือกและควรเป็นค่าบวกเล็กน้อยหากมีให้ความคล้ายคลึงกันสำหรับตำแหน่งเป็นส่วนประกอบในขณะที่การหมุนใช้การประมาณค่าอย่างรวดเร็วของความแตกต่างของมุม

พารามิเตอร์

other: CFrame
epsilon: number
ค่าเริ่มต้น: 0.00001 (1e-5)

ส่งค่ากลับ

การดำเนินการทางคณิตศาสตร์


ผลิตใหม่ CFrame ที่แทนที่การจัดเรียงของสอง CFrames


ผลิต Vector3 แปลงจากวัตถุเป็นพิกัดโลก


ผลิต CFrame แปลในพื้นที่โลกโดย Vector3


ผลิต CFrame แปลในพื้นที่โลกโดยลบ Vector3