A CFrame , singkatan dari Koordinasikan Angkatan Gambar , adalah jenis data yang digunakan untuk memutar dan menempatkan objek 3D. Sebagai salah satu property objek atau unit tunggal, CFrame ber
Beberapa contoh aplikasi CFrame dalam game mungkin:
- Menemukan titik target jauh untuk sebuah proyektil, seperti posisi seorang musuh yang ditargetkan oleh laser seorang pemain.
- Menggerakkan kamera sehingga fokus pada NPC tertentu saat seorang pemain berinteraksi dengan mereka.
- Menempatkan indikator status langsung di atas kepala pemain untuk menunjukkan apakah mereka paralyzed, dibina, racun, dll.
Dasar CFrame
Menempatkan CFrame
Anda dapat menciptakan CFrame kosong di posisi default (0, 0, 0) dengan menggunakan
local redBlock = workspace.RedBlock-- Buat CFrame barulocal newCFrame = CFrame.new(-2, 2, 4)-- Tulis CFrame merahBlock saat ini dengan CFrame baruredBlock.CFrame = newCFrame
Alternatif, Anda dapat menyediakan posisi Vector3 baru ke CFrame.new() dan mencapai hasil yang sama:
local redBlock = workspace.RedBlock-- Buat CFrame barulocal newVector3 = Vector3.new(-2, 2, 4)local newCFrame = CFrame.new(newVector3)-- Tulis CFrame merahBlock saat ini dengan CFrame baruredBlock.CFrame = newCFrame
Putar CFrame
Untuk membuat CFrame berputar, gunakan konstruktor CFrame.Angles(), yang memberikan sudut rotasi dalam derajat untuk eksen yang diinginkan. Para argumen untuk Dat
local redBlock = workspace.RedBlock-- Buat CFrame berputar barulocal newCFrame = CFrame.Angles(0, math.rad(45), 0)-- Tulis CFrame merahBlock saat ini dengan CFrame baruredBlock.CFrame = newCFrame
Menghadapi Ke Arah Titik
Anda dapat menggunakan CFrame.new() untuk menunjukkan permukaan depan sebuah CFrame di lokasi tertentu di dunia. Dalam contoh berikut, posisi bagian redBlock di (0, 3, 0) dan menunjukkan permukaan depannya, ditandai oleh
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCube-- Buat Vector3 untuk posisi awal dan posisi targetlocal startPosition = Vector3.new(0, 3, 0)local targetPosition = blueCube.Position-- Tempatkan redBlock di 'startPosition' dan soroti permukaan depannya di 'targetPosition'redBlock.CFrame = CFrame.new(startPosition, targetPosition)
Menonaktifkan CFrame
Untuk mengurangi objek dengan jumlah spesifik stud dari posisinya, tambahkan atau kurangi Vector3 ke atau dari CFrame baru di posis
local redBlock = workspace.RedBlockredBlock.CFrame = CFrame.new(redBlock.Position) + Vector3.new(0, 1.25, 0)
Anda dapat menggunakan teknik yang sama untuk menghapus objek dari posisi objek lain. Dalam contoh berikut, Vector3 menambahkan ke CFrame baru yang dibuat di posisi cube biru alih-alih posisi blok.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCuberedBlock.CFrame = CFrame.new(blueCube.Position) + Vector3.new(0, 2, 0)
Orientasi CFrame Dinamis
Pembangun CFrame.new() dan CFrame.Angles() pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun pembangun p
- Menempatkan harta karun mengambang langsung di depan pemain yang mungkin berdiri di mana saja di dunia, menghadapi arah mana pun.
- Membuat genie ajaib muncul di atas bahun kanan pemain secara langsung.
Dalam kasus ini, gunakan metode CFrame alih-alih pembangun mereka.
Posisi Relatif
Fungsi CFrame:ToWorldSpace() mengubah objek's CFrame — menghormati orientasi lokalnya sendiri — menjadi orientasi dunia baru. Ini menjadikannya ideal untuk mengurangi bagian relatif terhadap diri sendiri atau objek lain, terlepas dari bagaimana posisinya saat ini / diputar.
Dalam contoh berikut, bagian redBlock memiliki 2 stud relatif terhadap sumbu y (panah hijau menunjuk melalui) dan tidak relatif terhadap sumbu global menunjuk ke atas.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCubelocal offsetCFrame = CFrame.new(0, 2, 0)redBlock.CFrame = blueCube.CFrame:ToWorldSpace(offsetCFrame)
Rotasi relatif
Anda juga dapat menggunakan CFrame:ToWorldSpace() untuk memutar objek relatif terhadap dirinya sendiri. Dalam contoh berikut, bagian redBlock memutar 70 derajat terbalik di sumbu y dan 20 derajat terbalik di sumbu z.
local redBlock = workspace.RedBlocklocal rotatedCFrame = CFrame.Angles(0, math.rad(70), math.rad(20))redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
Menghadapi Permukaan Tertentu ke Titik
Anda dapat membuat bagian depan objek menghadapi objek lain dengan menyediakan poin Vector3 sebagai parameter kedua dari CFrame.new() . Anda juga dapat menggunakan rotasi relatif untuk membuat setiap bagian dari objek menghadapi poin Vector3 .
- Point permukaan depan , ditandai oleh lingkaran putih, di target.
- Putar CFrame untuk membuat permukaan Datatype.CFrame top, ditandai oleh lingkaran hitam, menunjuk ke arah target.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCube-- Buat Vector3 untuk posisi targetlocal targetPosition = blueCube.Position-- Tunjukkan permukaan depan blok merah ke 'targetPosition'redBlock.CFrame = CFrame.new(redBlock.Position, targetPosition)-- Sekarang permukaan depan redBlock (lingkaran putih) menunjuk ke arah blueCube-- Putar CFrame merahBlock relatif terhadap dirinya sendiri sehingga permukaannya (bukan depan) menunjuk ke targetlocal 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)
Menemukan Titik Antara Titik
Anda dapat menggunakan intervensi lini , atau lerp , untuk menempatkan CFrame di antara dua poin. Dalam contoh berikut, bagian 1> redBlock1> menggeser
local redBlock = workspace.RedBlocklocal greenCube = workspace.GreenCubelocal cyanCube = workspace.CyanCuberedBlock.CFrame = greenCube.CFrame:Lerp(cyanCube.CFrame, 0.7)