WorldRoot
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Bu temel sınıf, Workspace ve WorldModel gibi 3B uzay sorgularını ve simülasyonlarını işlemek için tasarlanmış herhangi bir duruma bir API sağlar.
Özet
Özellikler
Şuradan alınan Özellikler: ModelAktif durum yayınıyla deneyimler için modeldeki ayrıntı seviyesini ayarlar.Sets the level of detail on the model for experiences with instance streaming enabled.
Instans yayını etkinleştirildiğinde model yayın davranışını Models kontrol eder.
Birincil parçası Model , veya nil eğer açıkça ayarla.
Modelin etrafındaki pivot etrafında ölçeklendirilmesi için yalnızca editör tarafından kullanılan özellik. Bu özelliği ayarlamak, ölçeğin sanki Model/ScaleTo çağrılmış gibi hareket edeceğini değiştirecektir.
Hangi noktada bir Model döndürme noktasının bulunduğunu belirler bulunmuyor ve bunun bir set Model.PrimaryPart içerdiği yer.
Yöntemler
Verdiğiniz BasePart 'den herhangi biri diğer parçalara dokunuyorsa gerçek döndürür.
Bir blok şeklini belirtilen yönde görüntüler ve şekil bir BasePart veya Terrain hücreye vurursa bir RaycastResult döndürür.
Verilen bir kutuya sınır kutuları üzerinde örtüşen bir dizi parça döndürür.
Verilen bir küme sınır kutuları üzerine örtüşen bir dizi parça döndürür.
Verilen parçayla paylaşılan boş alanı olan bir dizi parça döndürür.
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
Belirtilen parçayı, doğrudan oraya taşımak yerine, ters sinematik aracılığıyla belirtilen konuma taşır, böylece katılım sağladığı herhangi bir eklem, kısıtlama veya çarpışmanın fiziksel olarak tatmin edilmesini sağlar.
Bir kaynağı, yönü ve seçici RaycastParams kullanarak bir ışın atar, ardından uygun bir nesne veya arazi ışını kesişirse bir RaycastResult döndürür.
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
Belirli bir yönde küre şekli atar ve şekil bir BasePart veya Terrain hücreye vurursa bir RaycastResult döndürür.
Dünyadaki parçalar için simülasyonu belirtilen bir süre artışı ve seçilen bir BaseParts dizi üzerine ilerletir.
Bu modeli belirtilen oyuncu için kalıcı olarak ayarlar.Model.ModelStreamingMode davranışın ek sonucu olarak değiştirilmesi için değiştirilmesi gereken davranış PersistentPerPlayer olarak ayarlanmalıdır.
Bir Model'in tüm parçalarını içeren bir hacmin açıklamasını döndürür.
'nin tümünü içeren en küçük sınırlayıcı kutunun boyutunu döndürür, eğer ayarlanırsa ile uyumlu olur.
Bu model nesnesi için kalıcı olan tüm Player nesnelerini döndürür.Davranış, bu yöntemin bir Script veya bir LocalScript 'dan çağrılıp çağrılmadığına bağlı olarak değişir.
Yeni oluşturulan modeller için varsayılan 1'e döner ve Model/ScaleTo aracılığıyla ölçeklendirildiğinde değişecektir.
PrimaryPart ı verilen pozisyona taşır. Birincil bir parça belirtilmediyse, modelin kök parçası kullanılacaktır.
Bu modeli belirtilen oyuncu için artık kalıcı olmayan yapar.Model.ModelStreamingMode davranışın kaldırılmasının sonucunda değiştirilmesi için değiştirilmesi gereken davranış için KalıcıOyuncu olarak ayarlanmalıdır.
Modelin ölçek faktörünü ayarlar, böylece tüm alt örneklerin boyutlandırma ve konumunu ayarlar ve ölçek faktörü 1 olduğunda ilk boyutları ve konumları ile ilgili bu ölçek faktörüne sahip olurlar.
Verilen Model ofsetiyle bir Vector3 değiştirir, modelin yönünü koruyarak.Yeni pozisyonda zaten başka bir BasePart veya Terrain varsa, Model o nesneyi üzerine geçecektir.
Bir PVInstance 'nin merkezini alır.
Dönüştürür PVInstance tüm altındaki PVInstances ile birlikte pivotun şimdi belirtilen CFrame 'de yer aldığını, böylece dönüşüm aşağıdaki gibi gerçekleşir:
Özellikler
Yöntemler
ArePartsTouchingOthers
ArePartsTouchingOthers en az bir tanesi diğer parçalara dokunuyorsa en az bir tanesi geri döner true if at least one of the given BasePart are touching any other parts.Mesafe eşiğinin içinde bulunan iki parça "dokunma" olarak kabul edilir, overlapIgnored .
Eğer herhangi bir parça verilmezse, false döndürülür.
Parametreler
Listedeki parçaların listede olmayan herhangi bir parçaya dokunup dokunmadığını kontrol eden bir parça listesi.
Parçalar dokunuyor olarak kabul edilmeden önce göz ardı edilen parça örtüşme eşiği.
Dönüşler
Doğru eğer ve sadece eğer herhangi biri içinde herhangi bir parçaya dokunuyorsa (parçaList'te olmayan parçalar). Yanlış eğer hiçbir parça geçmiyorsa.
Kod Örnekleri
The code block below demonstrates how to use WorldRoot:ArePartsTouchingOthers() to check if parts in a list are touching any parts in the workspace not in the list.
First the script creates two square parts that overlap 1 stud, Part1 and Part2. Then, it prints the value returned by ArePartsTouchingOthers() when Part1 is passed in partList at three different overlap values: 0, 0.999, and 1. The first two times ArePartsTouchingOthers() is called return false because the overlap values are less than the distance that Part1 and Part2 overlap. The third call returns true because the overlap value is equal to the distance that the parts overlap.
local part1 = Instance.new("Part")
part1.Name = "Part1"
part1.Anchored = true
part1.Transparency = 0.5
part1.Color = Color3.fromRGB(185, 100, 38)
part1.Size = Vector3.new(2, 2, 2)
part1.Position = Vector3.new(0, 4, 0)
part1.Parent = workspace
local part2 = Instance.new("Part")
part2.Name = "Part2"
part2.Anchored = true
part2.Transparency = 0.5
part2.Color = Color3.fromRGB(200, 10, 0)
part2.Size = Vector3.new(2, 2, 2)
part2.Position = Vector3.new(0, 5, 0)
part2.Parent = workspace
local partList = { part1 }
print(workspace:ArePartsTouchingOthers(partList, 0)) -- True
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- True
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False
Blockcast
Bir bloğun belirli bir yönde şeklini yansıtır ve bir BasePart veya Terrain hücre ile ilk çarpışmayı döndürür.Bu, bir çarpışma bulmak için bir yönde lineer bir ışını yansıtma şekline benzer, ancak bir ışın yerine 3B bir şekil kullanır.
Farklı olarak , bu yöntem ilk başta şekli kesiştiren 'yi tespit etmez.
Bir vuruş tespit edilirse, vuruş bilgilerini içeren bir RaycastResult döndürülür.The Distance özelliği, şeklinin bir vuruş bulmak için seyahat etmesi gereken mesafeyi temsil eder ve The Position özelliği, vuruşa neden olan kesişme noktasını temsil eder.
Bu yöntem geçersiz CFrame , boyut veya yön girişleri aktarılırsa bir hata atar.
Parametreler
Dökme blok şeklinin başlangıç konumu ve dönüşü.
Atış bloğu şeklinin mil boyutu. Maksimum boyut 512 mil.
Şekil kastının yönü, şeklin seyahat edebileceği maksimum mesafeyi temsil eden büyüklükle. Maksimum mesafe 1024 damga.
Dönüşler
Kod Örnekleri
Casts a block and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castBlock()
-- The initial position and rotation of the cast block shape
local originCFrame = CFrame.new(Vector3.new(0, 50, 0))
-- The size of the cast block shape
local size = Vector3.new(6, 3, 9)
-- The direction the block is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the block and create a visualization of it
local raycastResult = Workspace:Blockcast(originCFrame, size, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Block intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between block's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a block every 2 seconds
while true do
castBlock()
task.wait(2)
end
BulkMoveTo
Bu işlev, varsayılan özellik BaseParts olaylarını ateşlemek zorunda kalmadan bir tabloyu CFrames bir tabloya taşır Changed.Bu, büyük sayıda parça hareket ettirmenin çok hızlı bir yolunu sağlar, çünkü her bir parça için ayrı mülkiyet setlerinin maliyetini ödemek zorunda değilsiniz.
Üçüncü argüman, hareket operasyonunu daha da optimize etmenize izin verir.Varsayılan olarak, her parçanın Changed etkinliği Position, Orientation ve CFrame için ateş eder.Ancak, üçüncü argüman olarak FireCFrameChanged belirtirseniz, sadece Changed özellik için CFrame etkinlik ateşlenecektir.
Not bu işlevi yalnızca kısım hareketinin kodunuzdaki bir sınır olduğundan emin olduğunuzda kullanmanız gerektiğini unutmayın.Basitçe, bireysel parçaların ve kaynaklanmış modellerin CFrame özelliklerini ayarlamak çoğu durumda yeterince hızlıdır.
Parametreler
Dönüşler
GetPartBoundsInBox
WorldRoot:GetPartBoundsInBox() bir dizi parça döndürür, sınır kutuları bir kutunun hacmini tanımlayan verilen merkez ( CFrame ) ve boyut ( Vector3 ) ile örtüşür.
Vurgulandığı gibi, bu uzay sorgu yöntemi, gerçek olarak işgal edilen hacmin yerine parçaların sınır kutularının hacmini verimli bir şekilde dikkate alır.Silindirler, küreler, birlikler ve blok olmayan MeshParts şekillere sahip olmaları göz önünde bulundurulduğunda önemli olabilir.Özellikle doğruluk önemli durumlarda, WorldRoot:GetPartsInPart() yerine kullanın veya bu yöntemin sonuçlarını kendiniz daha da filtreleyin.
Bu yöntem, bir dahil veya dışlama listesi, maksimum parça sayısı, sorguyu kullanmak için kullanılacak çarpışma grubu ve sorgunun kesişen bir parçanın BasePart.CanCollide üzerinde tercih edip etmediğini tanımlamak için bir BasePart.CanQuery değeri kullanarak uzay sorgusunun yeniden kullanılabilir kısımlarını tanımlamak için bir OverlapParams kullanır.
Parametreler
Sorgulanacak verilen kutu hacminin merkezinin konumu.
Sorgulanacak verilen kutu hacminin boyutu.
Uzay sorgu parametlerinin yeniden kullanılabilir kısımlarını içerir.
Dönüşler
Uzay sorgusuna eşleşen bir BaseParts dizi, ki bu da uzay sorgusunu eşleştirdi.
GetPartBoundsInRadius
WorldRoot:GetPartBoundsInRadius() bir dizi parça döndürür, sınır kutuları bir kübenin hacmini tanımlayan bir küre ve yarıçapı ( Vector3 ) kullanarak yer kaplar ve yarıçap (number).
Vurgulandığı gibi, bu uzay sorgu yöntemi, gerçek olarak işgal edilen hacmin yerine parçaların sınır kutularının hacmini verimli bir şekilde dikkate alır.Silindirler, küreler, birlikler ve blok olmayan MeshParts şekillere sahip olmaları göz önünde bulundurulduğunda önemli olabilir.Özellikle doğruluk önemli durumlarda, WorldRoot:GetPartsInPart() yerine kullanın veya bu yöntemin sonuçlarını kendiniz daha da filtreleyin.
Bu yöntem, bir dahil veya dışlama listesi, maksimum parça sayısı, sorguyu kullanmak için kullanılacak çarpışma grubu ve sorgunun kesişen bir parçanın BasePart.CanCollide üzerinde tercih edip etmediğini tanımlamak için bir BasePart.CanQuery değeri kullanarak uzay sorgusunun yeniden kullanılabilir kısımlarını tanımlamak için bir OverlapParams kullanır.
Parametreler
Sorgulanacak verilen küre hacminin merkezinin konumu.
Sorgulanacak verilen küre hacminin yarıçapı.
Uzay sorgu parametlerinin yeniden kullanılabilir kısımlarını içerir.
Dönüşler
Uzay sorgusuna eşleşen bir BaseParts dizi, ki bu da uzay sorgusunu eşleştirdi.
GetPartsInPart
WorldRoot:GetPartsInPart() bir dizi parçanın boş alanı verilen parçayla paylaşılan bir dizi döndürür (sorulan parçaların aynı WorldRoot olduğu gibi olması gerekir).Bu yöntem BasePart:GetTouchingParts() yerine kullanılabilir ve genellikle daha iyi bir seçimdir.
Not edildiği gibi, bu uzay sorgu yöntemi, verilen parça tarafından işgal edilen aynen hacim bir tüm geometrik çarpışma kontrol etkullanarak düşünür.Örnek olarak, içinde küçük/boş bir parça, aslında böyle bir parçayla örtüşmediği sürece sorgulanan parçalarla eşleşmeyecektir.Daha basit hacimler için, WorldRoot:GetPartBoundsInBox() veya WorldRoot:GetPartBoundsInRadius() kullanmayı düşünebilirsiniz, çünkü daha az doğru ancak daha verimli bir şekilde çalışırlar.
Bu yöntem, bir dahil veya dışlama listesi, maksimum parça sayısı, sorguyu kullanmak için kullanılacak çarpışma grubu ve sorgunun kesişen bir parçanın BasePart.CanCollide üzerinde tercih edip etmediğini tanımlamak için bir BasePart.CanQuery değeri kullanarak uzay sorgusunun yeniden kullanılabilir kısımlarını tanımlamak için bir OverlapParams kullanır.
Parametreler
Sesinin diğer parçalarla karşılaştırılması gereken parça.
Uzay sorgu parametlerinin yeniden kullanılabilir kısımlarını içerir.
Dönüşler
Uzay sorgusuna eşleşen bir BaseParts dizi, ki bu da uzay sorgusunu eşleştirdi.
IKMoveTo
Bu işlev, belirtilen parçayı doğrudan oraya taşımak yerine, ters kinematik aracılığıyla belirtilen konuma taşır, böylece herhangi bir eklem, constraints veya parçanın katıldığı çarpışmalar fiziksel olarak memnun kalır.Şu anda bu işlev yalnızca çalışan bir oyunun fiziğiyle çakıştığı için sadece Studio'da mevcut: plugins .
Sertliği çevir 0 ile 1 arasında bir sayıdır ve parçanın konumunu hedef CFrame'in konumuna ne kadar agresif bir şekilde eşleştireceğini belirler. Sertliği döndür 0 ile 1 arasında bir sayıdır ve parçanın dönüşünü hedef CFrame'in dönüşüne ne kadar agresif eşleştireceğini belirler.
Örneğin:
- Eğer tersine çevirme sertliği ve dönme sertliği her ikisi de 1'e eşitse, parça onun üzerinde hangi fiziksel kısıtlamalar olursa olsun hemen hedef CFrame'e taşınacaktır.
- Eğer tersine çevirme sertliği ve dönme sertliği her ikisi de 0.5 ile eşitse, parça hedef CFrame'e doğru hareket etmeye çalışacak, ancak üzerindeki fiziksel kısıtlamalar tarafından yolundan çıkarılabilir.
- Eğer tersine çevirme sertliği ve dönme sertliği her ikisi de 0'a eşitse, hedef CFrame göz ardı edilecek ve nesne konumunda bulunan fiziksel sınırlar çözülecektir.
Parametreler
Hareket eden parça.
Belirtilen parçayı hareket ettirecek konum.
Partin konumunu hedefin konumuna ne kadar agresif eşleştireceğini belirten 0 ile 1 arasında bir sayı CFrame .
Parçanın dönüşünü hedefin dönüşüne ne kadar agresif eşleştireceğini belirten 0 ile 1 arasında bir sayı CFrame .
Fiziksel çözünürlük tarafından etkilenecek nesneleri belirtmenizi sağlar.
Dönüşler
Raycast
Bir kaynağı, yönü ve seçici RaycastParams kullanarak bir ışın atar.Uygun bir BasePart veya Terrain hücre bulursa, bir RaycastResult işlemin sonuçlarını içeren bir döndürülür.Eğer hiçbir RaycastParams nesne sağlanmazsa, varsayımlar kullanılır (tüm parçalar dikkate alınır ve Terrain su göz ardı edilmez).
Yönlü vektörün uzunluğunun (büyüklüğünün) önemli olduğunu unutmayın, çünkü uzunluğundan daha uzak nesneler/araziler test edilmeyecektir.Işın bileşenlerini oluşturmaya yardımcı olmak için bir CFrame kullanıyorsanız, yönlü vektör olarak CFrame.LookVector kullanmayı ve aşağıdaki örnekte gösterildiği gibi istenen uzunlukla çarptmayı düşünün.Yön vektörünün maksimum uzunluğu 15,000 stud'dur.
Bu yöntem kullanmıyor bir Ray nesne, ancak kökeni ve yön bileşenleri Ray.Origin ve Ray.Direction 'dan ödünç alınabilir.
Parametreler
Işığın kaynağı noktası.
Işının yönlü vektörü. Bu vektörün uzunluğunun önemli olduğunu unutmayın, çünkü uzunluğundan daha uzak parçalar/arazi test edilmeyecektir.
Vuruş uygunluk özelliklerini belirtmek için kullanılan bir nesne. Raycast operasyonunda.Verilmezse, tüm parçalar dikkate alındığında ve Terrain su göz ardı edilmediğinde varsayılan değerler kullanılır.
Dönüşler
Kod Örnekleri
Casts a ray and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castRay()
-- The origin point of the ray
local originPosition = Vector3.new(0, 50, 0)
-- The direction the ray is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the ray
local distance = 50
-- Cast the ray and create a visualization of it
local raycastResult = Workspace:Raycast(originPosition, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Ray intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between ray origin and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a ray every 2 seconds
while true do
castRay()
task.wait(2)
end
Shapecast
Parametreler
Dönüşler
Spherecast
Belirli bir yönde küre şekli atar ve BasePart veya Terrain hücre ile ilk çarpışmayı döndürür.Bu, bir çarpışma bulmak için bir yönde lineer bir ışını yansıtma şekline benzer, ancak bir ışın yerine 3B bir şekil kullanır.
Farklı olarak , bu yöntem ilk başta şekli kesiştiren 'yi tespit etmez.
Bir vuruş tespit edilirse, vuruş bilgilerini içeren bir RaycastResult döndürülür.The Distance özelliği, şeklinin bir vuruş bulmak için seyahat etmesi gereken mesafeyi temsil eder ve The Position özelliği, vuruşa neden olan kesişme noktasını temsil eder.
Bu yöntem, geçersiz yarıçap veya yön girişleri verilirse bir hata atar.
Parametreler
Döküm küre şeklinin başlangıç konumu.
Metrelerde yayın küre şeklinin yarıçapı. Maksimum yarıçap 256 metre.
Şekil kastının yönü, şeklin seyahat edebileceği maksimum mesafeyi temsil eden büyüklükle. Maksimum mesafe 1024 damga.
Dönüşler
Kod Örnekleri
Casts a sphere and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castSphere()
-- The initial position of the cast spherical shape
local originPosition = Vector3.new(0, 50, 0)
-- The radius of the cast spherical shape in studs
local radius = 10
-- The direction the sphere is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the sphere and create a visualization of it
local raycastResult = Workspace:Spherecast(originPosition, radius, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Sphere intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between sphere's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a sphere every 2 seconds
while true do
castSphere()
task.wait(2)
end
StepPhysics
Dünyadaki parçalar için simülasyonu belirtilen bir süre artışı ve seçilen bir BasePart dizi üzerine ilerletir.Bir dizi parça belirtilirse, sadece bu parçalar simüle edilir ve dünyadaki diğer tüm parçalar sabitlenmiş olarak ele alınır.Bu argüman bırakıldığında, dünyadaki tüm parçalar simülasyona dahil edilecektir.Belirtilen süre artışı herhangi bir pozitif sayı olabilir ve daha büyük değerler işlevin çalışma süresini artırır.Zaman artışının değerine bağlı olarak, fizik sistemi simülasyonun doğruluğunu ve stabilitesini korumak için birden fazla bireysel adıma ayırabilir.Fonksiyon birden fazla adım gerçekleştirse bile, simülasyonun sonuçları yalnızca fonksiyon tamamlandıktan sonra görülecektir.Bir simülasyonun bireysel adımlarını görselleştirmek için, işlev RenderStep aracılığıyla RunService.RenderStepped etkinliği üzerinden bir kez çağrılabilir.
Parametreler
Simüle edilecek süre miktarı. Bu argüman pozitif bir sayı olmalıdır. Daha büyük değerler bu işlevin çalışma süresini artıracaktır.
Simüle edilecek parça sayısının isteğe bağlı bir dizi olması gerekir. Bu set BasePart parçalar içermelidir; diğer türler göz ardı edilir.
Dönüşler
Kod Örnekleri
Simulates the parts in the workspace for a fixed period of time by calling the StepPhysics function once per frame until a specified time has elaspsed.
local RunService = game:GetService("RunService")
-- Optional array of parts to simulate; otherwise all parts will be simulated
local partsToSimulate = {
workspace.Part,
}
local function simulateParts(duration)
local time = 0.0
local stepJob
stepJob = RunService.RenderStepped:Connect(function(dt)
if time + dt > duration then
dt = duration - time
end
workspace:StepPhysics(dt, partsToSimulate)
time = time + dt
if time >= duration then
stepJob:Disconnect()
end
end)
end
-- Simulate workspace parts for 5 seconds, stepping the parts once per frame
simulateParts(5.0)