Bir CFrame , kısaca Koordine Çerçevesi olarak adlandırılan bir veri tipidir. Bir nesne özelliği veya standalone bir birim olarak, bir CFrame global x-, y- ve z
Bir oyun içindeki CFrame uygulamaların bazı örnekleri şunlar olabilir:
- Bir mermi için uzaktaki bir hedef noktasını bulmak, bir oyuncunun laser silahı tarafından hedeflenen bir düşmanın konumu gibi.
- Kamerayı hareket ettirerek oyuncu kendileriyle etkileşim kurarken belirli NPC'lere odaklanmasını sağlar.
- Bir durum göstergesini oyuncunun kafasının üzerinde doğrudan yerleştirerek onların paralit olduğunu, güçlendiğini, zehirlandığını vb. göstermek için.
CFrame Temelleri
Bir CFrame Yerleştirme
Datatype.CFrame.new() kullanarak varsayılan pozisyonda (0, 0, 0) boş bir Datatype.CFrame olu
local redBlock = workspace.RedBlock-- Yeni CFrame oluşturlocal newCFrame = CFrame.new(-2, 2, 4)-- redBlock'un mevcut CFrame'ını yeni bir CFrame ile yazdırredBlock.CFrame = newCFrame
Alternatif olarak, aynı sonuçelde etmek için yeni bir Vector3 pozisyonu sağlayabilirsiniz ve aşağıdaki kodu kullanabilirsiniz:
local redBlock = workspace.RedBlock-- Yeni CFrame oluşturlocal newVector3 = Vector3.new(-2, 2, 4)local newCFrame = CFrame.new(newVector3)-- redBlock'un mevcut CFrame'ını yeni bir CFrame ile yazdırredBlock.CFrame = newCFrame
Bir CFrame'i Döndürme
Döndürülmüş bir CFrame oluşturmak için, CFrame.Angles() kullanıcını kullanıcını kullanıcını kullanıcın
local redBlock = workspace.RedBlock-- Yeni döndürülmüş CFrame oluşturlocal newCFrame = CFrame.Angles(0, math.rad(45), 0)-- redBlock'un mevcut CFrame'ını yeni bir CFrame ile yazdırredBlock.CFrame = newCFrame
Bir Noktaya Karşı Yüzleştirme
Datatype.CFrame.new() ı kullanarak, bir CFrame 'nin ön yüzeğini dünyanın belirli bir noktasına işaret etmek için kullanabilirsiniz. Aşağıdaki örnekte, redBlock parçasının (0, 3, 0) ve
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCube-- Hedef pozisyonu ve başlangıç pozisyonu için bir Vector3 oluşturlocal startPosition = Vector3.new(0, 3, 0)local targetPosition = blueCube.Position-- RedBlock'u 'startPosition' alanına yerleştirin ve onun ön yüzeyine 'targetPosition' hedefiredBlock.CFrame = CFrame.new(startPosition, targetPosition)
Bir CFrame'i kaldırmak
ToOffset an object by a specific number of studs from its current position, add or subtract a Vector3 to or from a new CFrame at the object's position. To get a properly-formatted
local redBlock = workspace.RedBlockredBlock.CFrame = CFrame.new(redBlock.Position) + Vector3.new(0, 1.25, 0)
Bir nesneyi diğer bir nesneyenin pozisyonundan ofset etmek için aynı tekniği kullanabilirsiniz. İşteki örnekte, bir Vector3 blokun pozisyonundan yerine yeni bir CFrame oluşturur.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCuberedBlock.CFrame = CFrame.new(blueCube.Position) + Vector3.new(0, 2, 0)
Dinamik CFrame Yönlendirme
The CFrame.new() ve CFrame.Angles() oluşturucuları, bir nesneyi dünyanın belirli bir yönünde yeniden konumlandırır veya döndürür, ancak bazen sabit bir dünya pozisyonu ve döndürme açısına güvenemezsiniz. Örneğin:
- Dünyanın herhangi bir yerinde duran bir hazineyi doğrudan bir oyuncunun önünde yerleştirme
- Bir büyülü geni oyuncunun sağ omuzunun üstünde doğrudan görünmesini sağlamak.
Bu durumlarda, onların oluşturucuları yerine CFrame yöntemlerini kullanın.
Mutlak Konum
The CFrame:ToWorldSpace() function transforms an object's CFrame — respecting its own local orientation — to a new world orientation. This makes it ideal for offsetting a part relative to itself or another object, regardless of how it's currently positioned/rotated.
Aşağıdaki örnekte, redBlock parçasının y-eksenindeki yazılım 2 santimetre yer değiştirme ile yazılır ve değil global y ekseninde doğrudan yukarı yazılır.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCubelocal offsetCFrame = CFrame.new(0, 2, 0)redBlock.CFrame = blueCube.CFrame:ToWorldSpace(offsetCFrame)
Mutlak Döndürme
Ayrıca, CFrame:ToWorldSpace() kullanarak bir nesneyi kendi başına döndürebilirsiniz. Aşağıdaki örnekte, redBlock parçasının y ekseninde 70 derece karşı yönelmesi ve z ekseninde 20 derece karşı yönelmesi gerekir.
local redBlock = workspace.RedBlocklocal rotatedCFrame = CFrame.Angles(0, math.rad(70), math.rad(20))redBlock.CFrame = redBlock.CFrame:ToWorldSpace(rotatedCFrame)
Bir Noktaya Doğru Özelleşmiş Bir Yüze Bakmak
Bir nesnenin önünü başka bir nesneye yapmak için bir Vector3 nokta sağlayarak ikinci Datatype. CFrame.new() parametresi olarak kullanabilirsiniz. Ayrıca, nesnenin herhangi bir yüzünü Datatype. Vector3 noktasına yapm
- Beyaz çemberin işaretlediği ön yüzeyi, hedefe işaret edin.
- Datatype.CFrame'i döndürerek siyah çemberin işaretlediği üstü yüzeyi oluşturun, hedefe doğru nokta.
local redBlock = workspace.RedBlocklocal blueCube = workspace.BlueCube-- Hedef pozisyonu için bir Vector3 oluşturlocal targetPosition = blueCube.Position-- RedBlock'un ön yüzeyine 'targetPosition' için işaret edinredBlock.CFrame = CFrame.new(redBlock.Position, targetPosition)-- Şimdi redBlock'un ön yüzeyi (beyaz çember) mavi kübeye doğru gidiyor-- Rotate redBlock'un CFrame'ini kendisiyle ilgili olarak döndür, böylece üst yüzeyi (ön değil) hedefe doğru gösterirlocal 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)
Noktalar Arasında Bir Nokta Bulma
İki nokta arasında bir Datatype.CFrame yerleştirmek için yerp veya CFrame kullanabilirsiniz. İçindeki örnekde, 2> redBlock2> birimleri
local redBlock = workspace.RedBlocklocal greenCube = workspace.GreenCubelocal cyanCube = workspace.CyanCuberedBlock.CFrame = greenCube.CFrame:Lerp(cyanCube.CFrame, 0.7)