Một CFrame , ngắn cho Khung Hợp Nhất Biến , là một loại dữ liệu được sử dụng để quay và đặt vị trí 3D. Như một đặc tính hoặc m
Một số ví dụ về ứng dụng CFrame trong một trò chơi có thể là:
- Tìm một điểm mục tiêu xa nhắm cho một dự án, như vị trí của một kẻ địch đã bị mục tiêu bởi laser của người chơi.
- Di chuyển máy ảnh để tập trung vào các NPC cụ thể khi một người chơi tương tác với chúng.
- Đặt một chỉ số tình trạng ở trên trán của một người chơi để hiển thị có phải họ bị tê liệt, tăng cường, độc hại, v.v.
CFrame Cơ bản
Định vị CFrame
Bạn có thể tạo một CFrame trống ở vị trí mặc định của (0,
local redBlock = workspace.RedBlock-- Tạo CFrame mớilocal newCFrame = CFrame.new(-2, 2, 4)-- Đổi CFrame hiện tại của redBlock bằng CFrame mớiredBlock.CFrame = newCFrame
Alternatively, you can provide a new Vector3 position to CFrame.new() and achieve the same kết quả:
local redBlock = workspace.RedBlock-- Tạo CFrame mớilocal newVector3 = Vector3.new(-2, 2, 4)local newCFrame = CFrame.new(newVector3)-- Đổi CFrame hiện tại của redBlock bằng CFrame mớiredBlock.CFrame = newCFrame
Xoay CFrame
Để tạo một CFrame đã quay, hãy sử dụng CFrame.Angles() , cung cấp một góc quay theo độ trong các độ
local redBlock = workspace.RedBlock-- Tạo CFrame mới chuyển độnglocal newCFrame = CFrame.Angles(0, math.rad(45), 0)-- Đổi CFrame hiện tại của redBlock bằng CFrame mớiredBlock.CFrame = newCFrame
Đang đối diện với một điểm
Bạn có thể sử dụng CFrame.new() để chỉ vị trí bề mặt trước của một CFrame ở một điểm cụ thể trên thế giới. Trong ví dụ sau đó, redBlock vị trí các vị trí của
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCube-- Tạo một Vector3 cho cả vị trí xuất phát và vị trí mục tiêulocal startPosition = Vector3.new(0, 3, 0)local targetPosition = blueCube.Position-- Đặt cục khối màu đỏ ở 'startPosition' và chỉ vị trí mặt trước của nó ở 'targetPosition'redBlock.CFrame = CFrame.new(startPosition, targetPosition)
Tắt CFrame
Để trừ số lượng đối tượng bằng một số lượng cụ thể của studs từ vị trí hiện tại của nó, thêm hoặc sot trên mộ
local redBlock = workspace.RedBlockredBlock.CFrame = CFrame.new(redBlock.Position) + Vector3.new(0, 1.25, 0)
Bạn có thể sử dụng cùng một kỹ thuật để bù đắp một đối tượng từ vị trí của một đối tượng khác. Trong ví dụ sau, một Vector3 thêm vào một CFrame mới tạo tại vị trí của cục khối thay vì vị trí của đối tượng.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCuberedBlock.CFrame = CFrame.new(blueCube.Position) + Vector3.new(0, 2, 0)
Cấu hình Dynamic CFrame
Các CFrame.new() và CFrame.Angles() người xây dựng lại hoặc quay một đối tượng ở một vị trí chính xác trong thế giới, nhưng bạn đôi khi không thể dựa vào một vị trí thế giới cố định và góc quay. Ví dụ:
- Đặt một kho báu treo trên trước mặt một người chơi đang đứng ở bất kỳ vị trí nào trên thế giới, hướng về bất kỳ hướng nào.
- Tạo ra một genie ma thuật xuất hiện trên trán của người chơi trực tiếp.
Trong những trường hợp này, hãy sử dụng các phương thức CFrame thay vì các người xây dựng của chúng.
Vị trí tương đối
Hàm CFrame:ToWorldSpace() biến đổi một CFrame đối tượng - tôn trọng hướng địa phương của riêng nó - thành một thế giới mới lối. Điều này làm cho nó lý tưởng để bù trừ một ph
Trong ví dụ sau đây, phần redBlock có độ lùi 2 studs so với trục y của cube xanh (mũi tên xanh dẫn qua nó) và không đối với trục y toàn cầu dẫn thẳng lên.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCubelocal offsetCFrame = CFrame.new(0, 2, 0)redBlock.CFrame = blueCube.CFrame:ToWorldSpace(offsetCFrame)
Xoay tương đối
Bạn cũng có thể sử dụng CFrame:ToWorldSpace() để quay một đối tượng so với chính nó. Trong ví dụ sau, phần redBlock đó quay 70 độ ngược lại trên trục y và 20 độ ngược lại trên trục z.
local redBlock = workspace.RedBlocklocal rotatedCFrame = CFrame.Angles(0, math.rad(70), math.rad(20))redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
Đối mặt với một bề mặt cụ thể để một điểm
Bạn có thể làm cho phía trước của một đối tượng mặt một đối tượng khác bằng cách cung cấp một điểm Vector3 như là một tham số thứ hai của CFrame.new() . Bạn cũng có
- Chỉ điểm bề mặt phía trước , được xác định bằng vòng tròn trắng, trên mục tiêu.
- Xoay CFrame để làm cho bề mặt Datatype.CFrame màu đen, điểm vào mục tiêu.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCube-- Tạo một Vector3 cho vị trí mục tiêulocal targetPosition = blueCube.Position-- Chỉ vị trí trên cùng của khối màu đỏ ở 'targetPosition'redBlock.CFrame = CFrame.new(redBlock.Position, targetPosition)-- Bây giờ bề mặt trước của khối màu đỏ (vòng tròn màu trắng) đang hướng tới khối xanh-- Xoay CFrame của redBlock so với chính nó để cho phép nó đạt đến bề mặt trên của nó (không phải là mặt trước)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)
Tìm điểm giữa các điểm
Bạn có thể sử dụng lập phương trực tuyến , hoặc lập phương lập phương trực tuyến để đặt một CFrame giữ
local redBlock = workspace.RedBlocklocal greenCube = workspace.GreenCubelocal cyanCube = workspace.CyanCuberedBlock.CFrame = greenCube.CFrame:Lerp(cyanCube.CFrame, 0.7)