CFrame
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
พิมพ์CFrame สั้นสำหรับ กรอบความสัมพันธ์ อธิบายตำแหน่งและทิศทาง 3Dประกอบด้วยส่วนประกอบ ตําแหน่ง และส่วนประกอบ การหมุน และรวมถึงการดำเนินการคณิตศาสตร์ที่จำเป็นสําหรับการทํางานกับข้อมูล 3D บน Roblox
-- สร้าง CFrame ในตําแหน่งที่กำหนดและหมุน Eulerlocal cf = CFrame.new(0, 5, 0) * CFrame.fromEulerAngles(math.rad(45), 0, 0)
ส่วนประกอบตำแหน่ง
ส่วนตําแหน่งมีให้ใช้เป็น 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 |
---|
สรุป
คอนสตรัคเตอร์
- new()
ส่งคืนไอดีว่างเปล่า CFrame
ส่งคืน CFrame โดยไม่มีการหมุนด้วยตำแหน่งของ Vector3 ที่ให้ไว้
ส่งคืน CFrame ที่มีตำแหน่งของครั้งแรก Vector3 และการจัดเรียงชี้ไปที่ครั้งที่สอง
ส่งคืน CFrame ที่มีตำแหน่งประกอบด้วยส่วนที่ให้ไว้ x , y และ z ส่วนประกอบ
ส่งคืน CFrame จากตําแหน่ง ( x , y , z ) และควอเตอร์น ( qX , qY , qZ , qW ).
ส่งคืน CFrame จากตําแหน่ง ( x , y , z ) พร้อมการจัดเรียงที่ระบุโดยแมทริคการหมุน
ส่งคืน CFrame ที่มีตำแหน่งของครั้งแรก Vector3 และการจัดเรียงชี้ไปที่ครั้งที่สอง
ส่งคืน CFrame ที่มีตำแหน่งของครั้งแรก Vector3 และการจัดเรียงตามแนวทางที่สอง
- fromRotationBetweenVectors(from : Vector3,to : Vector3)
ส่งคืน CFrame ที่แทนที่ทิศทางที่จำเป็นในการหมุนจาก 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 โดยไม่มีการแปลหรือการหมุน
ตำแหน่ง 3D ของ CFrame
สำเนาของ CFrame โดยไม่มีการแปล
พิกัด X ของตำแหน่ง
พิกัด Y ของตำแหน่ง
พิกัด Z ของตำแหน่ง
ส่วนทิศทางข้างหน้าของการจัดตำแหน่งของวัตถุ CFrame ในทิศทางเดียวกับรูปแบบที่ถูกปฏิเสธของ ZVector
ส่วนทิศทางขวาของการจัดตำแหน่งของวัตถุ CFrame
ส่วนทิศทางขึ้นของทิศทางของวัตถุ CFrame
เทียบเท่ากับ RightVector .
เทียบเท่ากับ UpVector .
ส่วน Z ของทิศทางของวัตถุ 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
เทียบเท่ากับ CFrame:ToEulerAnglesYXZ() .
คืน tuple ของ Vector3 และจํานวนที่แทนที่การหมุนของ CFrame ในการแสดงผลในแกน-มุม
เทียบเท่ากับ CFrame:GetComponents() .
คืน true หากอีก CFrame อยู่ใกล้กับสิ่งนี้ 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 ให้กับตัวเองผลิตวัตถุ 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)
วิธีการ
ToEulerAngles
ส่งคืนมุมโดยประมาณที่สามารถใช้เพื่อสร้าง CFrame โดยใช้ตัวเลือก Enum.RotationOrderหากคุณไม่ให้ order วิธีจะใช้ Enum.RotationOrder.XYZ
พารามิเตอร์
FuzzyEq
คืน true หากอีก CFrame อยู่ใกล้กับสิ่งนี้ CFrame ในตำแหน่งและการหมุนเพียงพอค่า epsilon ถูกใช้เพื่อควบคุมความอดทนสำหรับความคล้ายคลึงนี้; ค่านี้เป็นตัวเลือกและควรเป็นค่าบวกเล็กน้อยหากมีให้ความคล้ายคลึงกันสำหรับตำแหน่งเป็นส่วนประกอบในขณะที่การหมุนใช้การประมาณค่าอย่างรวดเร็วของความแตกต่างของมุม