CFrames

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Bir CFrame, Koordinat Çerçevesi kısaltmasıdır ve 3D nesneleri döndürmek ve konumlandırmak için kullanılan bir veri türüdür. Hem bir nesne özelliği hem de bağımsız bir birim olarak, CFrame, her eksen için küresel X, Y ve Z koordinatlarının yanı sıra dönüş verisi içerir. Ayrıca, CFrames, 3D alandaki nesnelerle çalışmak için yararlı işlevler içerir.

Bir CFrame Pozisyonlamak

Varsayılan (0, 0, 0) konumunda boş bir CFrame oluşturmak için CFrame.new() kullanabilirsiniz. Belirli bir noktada bir CFrame konumlandırmak için, CFrame.new()'ye X, Y ve Z koordinatlarını argüman olarak sağlayın. Aşağıdaki örnekte, redBlock parçasının CFrame özelliği newCFrame olarak değişir ve (-2, 2, 4) konumuna yeniden yerleştirilir.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
-- Yeni CFrame oluştur
local newCFrame = CFrame.new(-2, 2, 4)
-- Kırmızı bloğun mevcut CFrame'ini yeni CFrame ile değiştir
redBlock.CFrame = newCFrame
Önce
Sonra

Alternatif olarak, CFrame.new()'ye yeni bir Vector3 konumu sağlayarak aynı sonuca ulaşabilirsiniz:


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
-- Yeni CFrame oluştur
local newVector3 = Vector3.new(-2, 2, 4)
local newCFrame = CFrame.new(newVector3)
-- Kırmızı bloğun mevcut CFrame'ini yeni CFrame ile değiştir
redBlock.CFrame = newCFrame

Bir CFrame Döndürmek

Dönmüş bir CFrame oluşturmak için, istenen eksenler için radyan cinsinden bir dönüş açısı sağlayarak CFrame.fromEulerAnglesXYZ() kurucusunu kullanın. CFrame.fromEulerAnglesXYZ()'ye verilen parametreler radyan cinsindendir, derece cinsinden isterseniz, math.rad() fonksiyonunu kullanarak dereceleri radyana dönüştürebilirsiniz. Aşağıdaki örnekte, redBlock parçası Y ekseninde 45 derece saat yönünün tersine döner.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
-- Yeni döndürülen CFrame oluştur
local newCFrame = CFrame.fromEulerAnglesXYZ(0, math.rad(45), 0)
-- Kırmızı bloğun mevcut CFrame'ini yeni CFrame ile değiştir
redBlock.CFrame = newCFrame
Önce
Sonra

Bir CFrame'i Bir Noktaya Doğru Yüzlemek

Bir CFrame'in ön yüzünü dünyadaki belirli bir noktaya doğru yönlendirmek için CFrame.lookAt() kullanabilirsiniz. Aşağıdaki örnek, redBlock(0, 3, 0) konumuna yerleştirir ve ön yüzünü, beyaz daire ile işaretlenmiş olan blueCube parçasına doğru döndürür.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local blueCube = Workspace.BlueCube
redBlock.Position = Vector3.new(0, 3, 0)
-- Kırmızı bloğun ön yüzünü mavi küreye yönlendir
redBlock.CFrame = CFrame.lookAt(redBlock.Position, blueCube.Position)
Önce
Sonra

Bir CFrame'i Kaydırmak

Bir nesneyi mevcut konumundan belirli bir miktar kaydırmak için, Vector3'ü nesnenin pozisyonuna ekleyerek veya çıkararak yeni bir CFrame oluşturun. CFrame.new()'yi kullanmak için bir nesnenin düzgün formatlanmış Vector3 konumunu elde etmek için, burada görüldüğü gibi, Position özelliği (redBlock.Position) pratik bir kısayoldur.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
redBlock.CFrame = CFrame.new(redBlock.Position) + Vector3.new(0, 1.25, 0)
Önce
Sonra

Diğer bir nesnenin pozisyonundan bir nesneyi kaydırmak için aynı tekniği kullanabilirsiniz. Aşağıdaki örnekte, bir Vector3, blueCube'ın konumunda oluşturulan yeni bir CFrame'e eklenir, yani blok yerine.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local blueCube = Workspace.BlueCube
redBlock.CFrame = CFrame.new(blueCube.Position) + Vector3.new(0, 2, 0)
Önce
Sonra

Dinamik CFrame yönlendirmesi

CFrame.new() ve CFrame.fromEulerAnglesXYZ() kurucuları, dünyada belirli bir yönlendirmeyle bir nesneyi yeniden konumlandırır veya döndürür, ancak bazen sabit bir dünya konumu ve dönüş açısına güvenemezsiniz. Örneğin:

  • Bir oyuncunun dünyada nereye durduğuna ve hangi yöne baktığına bağlı olmadan, doğrudan önünde bir yüzer hazine yerleştirmek.
  • Bir sihirli cinin, bir oyuncunun sağ omzunun hemen üzerine görünmesini sağlamak.

Bu durumlarda, kurucular yerine CFrame yöntemlerini kullanın.

Göreceli konum

CFrame:ToWorldSpace() fonksiyonu, bir nesnenin CFrame'ini — kendi yerel yönlendirmesini dikkate alarak — yeni bir dünya yönlendirmesine dönüştürür. Bu, bir bölümü kendisine veya başka bir nesneye göre kaydırmak için idealdir; mevcut konum/yönlendirmesi ne olursa olsun.

Aşağıdaki örnekte, redBlock parçası, mavi kürenin Y eksenine göre 2 stud kayar (içinden geçen yeşil ok) ve global Y eksenine göre yukarı yönlü kaymaz.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local blueCube = Workspace.BlueCube
local offsetCFrame = CFrame.new(0, 2, 0)
redBlock.CFrame = blueCube.CFrame:ToWorldSpace(offsetCFrame)
Önce
Sonra

Göreceli dönüş

Aynı şekilde, bir nesneyi kendisine göre döndürmek için CFrame:ToWorldSpace() kullanabilirsiniz. Aşağıdaki örnekte, redBlock parçası, Y ekseninde saat yönünün tersine 70 derece ve Z ekseninde saat yönünde 20 derece döner.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local rotatedCFrame = CFrame.fromEulerAnglesXYZ(0, math.rad(70), math.rad(20))
redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
Önce
Sonra

Belirli bir yüzeyi bir noktaya yönlendirmek

Bir nesnenin ön tarafını başka bir nesneye dönmesini sağlamak için, CFrame.new()'nin ikinci parametresi olarak bir Vector3 noktası verebilirsiniz. Herhangi bir yüzeyin yönlendirilmesi için göreceli dönüş de kullanabilirsiniz. Aşağıdaki örnek, iki ardışık CFrame işlemi gerçekleştirir:

  1. Ön yüzeyini, beyaz daire ile işaretlenen hedefe yönlendirin.
  2. CFrame'yi döndürün, böylece üst yüzey, siyah daire ile işaretlenen, hedefe doğru yönlendirilir.

local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local blueCube = Workspace.BlueCube
-- Kırmızı bloğun ön yüzünü mavi küreye yönlendir
redBlock.CFrame = CFrame.lookAt(redBlock.Position, blueCube.Position)
-- CFrame'i kendisine göre döndürün, böylece üst yüzey (ön değil) mavi küreye doğru baksın
local rotatedCFrame = CFrame.fromEulerAnglesXYZ(math.rad(-90), 0, 0)
redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
Önce
Sonra

Noktalar arasında bir noktayı bulmak

İki nokta arasında bir CFrame konumlandırmak için doğrusal enterpolasyon veya lerp kullanabilirsiniz. Aşağıdaki örnekte, redBlock parçası greenCube ve cyanCube parçaları arasında yeniden konumlandırılır. 0.7 değeri, onu yeşil küreye uzaklığın %70'ine yerleştirir.


local Workspace = game:GetService("Workspace")
local redBlock = Workspace.RedBlock
local greenCube = Workspace.GreenCube
local cyanCube = Workspace.CyanCube
redBlock.CFrame = greenCube.CFrame:Lerp(cyanCube.CFrame, 0.7)
Önce
Sonra
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.