Các Khung

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

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ới
local newCFrame = CFrame.new(-2, 2, 4)
-- Đổi CFrame hiện tại của redBlock bằng CFrame mới
redBlock.CFrame = newCFrame
Trước
Sau

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ới
local newVector3 = Vector3.new(-2, 2, 4)
local newCFrame = CFrame.new(newVector3)
-- Đổi CFrame hiện tại của redBlock bằng CFrame mới
redBlock.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 động
local newCFrame = CFrame.Angles(0, math.rad(45), 0)
-- Đổi CFrame hiện tại của redBlock bằng CFrame mới
redBlock.CFrame = newCFrame
Trước
Sau

Đ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.RedBlock
local blueCube = workspace.BlueCube
-- Tạo một Vector3 cho cả vị trí xuất phát và vị trí mục tiêu
local 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)
Trước
Sau

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.RedBlock
redBlock.CFrame = CFrame.new(redBlock.Position) + Vector3.new(0, 1.25, 0)
Trước
Sau

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.RedBlock
local blueCube = workspace.BlueCube
redBlock.CFrame = CFrame.new(blueCube.Position) + Vector3.new(0, 2, 0)
Trước
Sau

Cấu hình Dynamic CFrame

Các CFrame.new()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.RedBlock
local blueCube = workspace.BlueCube
local offsetCFrame = CFrame.new(0, 2, 0)
redBlock.CFrame = blueCube.CFrame:ToWorldSpace(offsetCFrame)
Trước
Sau

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.RedBlock
local rotatedCFrame = CFrame.Angles(0, math.rad(70), math.rad(20))
redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
Trước
Sau

Đố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ó

  1. 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.
  2. Xoay CFrame để làm cho bề mặt Datatype.CFrame màu đen, điểm vào mục tiêu.

local redBlock = workspace.RedBlock
local blueCube = workspace.BlueCube
-- Tạo một Vector3 cho vị trí mục tiêu
local 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)
Trước
Sau

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.RedBlock
local greenCube = workspace.GreenCube
local cyanCube = workspace.CyanCube
redBlock.CFrame = greenCube.CFrame:Lerp(cyanCube.CFrame, 0.7)
Trước
Sau