Model
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Modeller küme nesneleridir, yani onları bir araya getirirler. Onlar BaseParts ve onların işlevselliğini genişleten bir dizi işlevi vardır.
Modeller, şekilli grupları temsil etmek için tasarlanmıştır. Gruplarınızın hiçbir geometrik yorumu yoksa, örneğin bir Class.Script|Scripts koleksiyonu, bunun yerine bir Scripts kullanın.
Joint'ler (böylece fiziksel simülasyon aracılığıyla hareket edebilecekleri veya yok edilecekleri) ile birleştirilen modellerin konstituent parçaları genellikle bir PrimaryPart ayarlavardır, çünkü bu, modelin hareket ettiğinde pivot ve bağlayıcı kutusunun "takip etedeceği
Modeller, Roblox oyuncu karakterleri dahil olmak üzere geniş bir uygulama alanına sahiptir. Ayrıca, dikkate alınması gereken bir dizi benzersiz davranışları vardır:
- Bir parçanın Y eksenindeki konumu Workspace.FallenPartsDestroyHeight değerine ulaşır ve bu, bir Model içindeki son nesneydi, model de yok edilir.
- Class.Workspace.StreamingEnabled Class.Model.ModelStreamingMode|ModelStreamingMode``Class.Model.LevelOfDetail|LevelOfDetail 1>Class.Model.LevelOfDetail|Class.Model.LevelOfDetail1> 4>Class.Model.ModelStreamingMode|Class.Model.ModelStreamingMode4> 7>Class.Model.ModelStreamingMode|Class.Model.
Tüm Instance türlerinde olduğu gibi, bir ebeveyn
Kod Örnekleri
local function groupObjects(objectTable)
local model = Instance.new("Model")
for _, object in pairs(objectTable) do
object.Parent = model
end
return model
end
local objects = {
Instance.new("Part"),
Instance.new("Part"),
}
groupObjects(objects)
Özet
Özellikler
Etkisizleştirilmiş senaryolarla ilgili deneyimler için modeldeki ayrıntı seviyesini ayarlar.
İstemci yayınlanma davranışını Models üzerinde kontrol eder.
Class.Model veya nil , aksi belirtilmediyse özelliklerinin temel kısmı.
Modell'in etrafındaki çizgiyi ölçmek için kullanılan sadece modeller için özellik. Bu özelliği ayarlamak, ölçeği Model/ScaleTo çağırdığı gibi hareket ettirecektir.
Bir Model ın pivot'unun nerede bulunduğunu belirler. Bu, bir Class.Model ın pivot'unun bir seti olmadığını gösterir.
Yöntemler
Bu modeli belirli oyuncunun için kalıcı olarak tutmak için ayarlar. Model.ModelStreamingMode eklenen davranışın sonucu olarak PersistentPerPlayer olarak ayarlanmalıdır.
Bir Model'in tüm parçalarını içeren bir hacimin açıklamasını iade eder.
Class.BasePart|BaseParts tüm Model ile aynıdır. Model.PrimaryPart ile aynıdır.
Bu model objesi için persistanslı olan tüm Player nesneleri iade eder. Davranış, bu yöntemin bir Script veya bir LocalScript から çekildiğine bağlı olarak değişir.
Yeni oluşturulan modeller için varsayılan modelin kanal ölçeğini iade eder ve Model/ScaleTo aracılığıyla ölçeklenir.
Class.Model.PrimaryPart|PrimaryPartı verilen pozisyona hareket ettirir. Bir ilk parça belirtilmediyse, modelin kök parçası kullanılır.
Bu model artık belirli oyuncunun için sürükleyici değil. Model.ModelStreamingMode değerini PersistentPerPlayer olarak ayarlanmalıdır, böylece eylemin kaldırma sonucu olarak değiştirilmesi gerekir.
Modelin ölçek faktörünü ayarlar, böylece ölçek faktörü 1 olduğunda tüm yok edici Instanstanların boyut ve konumlarının ölçek faktörüyle ilgili olarak kendi başlangıç boyutları ve yerleriyle ölçek faktörüne kadar kendi başına sahip olur.
Şekillendiriciyi Model ile bir Vector3 ofseti arttırır, modelin yönünü korur. Eğer bir başka BasePart veya 2> Class.Terrain2> zaten mevcutsa, 5> Class.Model5> ile şekillendiriciyi çakal
Bir PVInstance 'nin pivot'unu alır.
Tüm ataları ile birlikte PVInstance şeklini alır, böylece merkez noktası artık belirlenen PVInstances ile bulunur.
Özellikler
LevelOfDetail
Etkili olan yayın seviyesine sahip deneyimler için modeldeki ayrıntı seviyesini ayarlar.
Amount.ModelLevelOfDetail|StreamingMesh olarak ayarlandığında, daha düşük çözünürlükte bir "imposter" meshes (renkli, kaba bir dokuma ile tüm çocuk parçalarını çevreleyen) rendersi seri dışında görünür.
Entity.ModelLevelOfDetail|Disabled veya Automatic olarak ayarlandığında, daha düşük çözünürlükte mesajlar görüntülenmez.
ModelStreamingMode
Instansta Models olarak çalıştığında kontrolörlerin şeklini değiştirir ve şeklini değiştirir. Davranış, seçili枚 ile bağlantılıdır. Beğenme eğilimi yoktur. Yayınlanma etkin değilken hiçbir etki yoktur.
Bu özellik sadece şu anda Özellikler penceresinden veya Scripts içinde Studio aracılığıyla değiştirilmelidir, ancak asla LocalScripts (yapmak bu sonuçları yaratabilir).
PrimaryPart
Class.Model 'in ana kısmına işaret eder. Ana kısım, modelin fizyiksel referansı olarak hareket eden BasePart 'dir. Bu, modeller içindeki parçalar fizyiksel simülasyon veya diğer yollarla hareket ettirildiğinde, kıvıl ana kısımla uyumlu hareket edecektir.
Not that Models do not have PrimaryPart set by default. If you are creating a model that needs to be acted upon by physics, you should manually set this property in Studio or within a script. If the primary part is not ayarla, the pivot will remain at the same location in world space, even if parts within the model are moved.
Ayrıca, bu özellik de bir BasePart ile aynı olmalıdır, bir Model.PrimaryPart ile aynı olmalıd
Modeller için genel kural:
- Parçaları birbiriyle fiziksel olarak birleştirilmiş modellerinin birincil bir parçası atanmalıdır. Örneğin, Roblox karakter modellerinin WeldConstraints değerleri varsayılan olarak Motor6Ds dir.
- Genellikle Anchored olmayan, bir yerde tutulan statik modeller gerekirmez ve genellikle bir ayarlayararlanmayı görmezler.
Kod Örnekleri
-- Create a dice model with two halves and attach them together
local diceModel = Instance.new("Model")
diceModel.Name = "ChanceCube"
local diceTop = Instance.new("Part")
diceTop.Size = Vector3.new(4, 2, 4)
diceTop.Position = Vector3.new(0, 1, 0)
diceTop.Color = Color3.new(0, 0, 1)
diceTop.Parent = diceModel
local diceBottom = diceTop:Clone()
diceBottom.Position = Vector3.new(0, -1, 0)
diceBottom.Color = Color3.new(1, 0, 0)
diceBottom.Parent = diceModel
local weld = Instance.new("WeldConstraint")
weld.Part0 = diceTop
weld.Part1 = diceBottom
weld.Parent = diceModel
-- Put the dice up in the air above the workspace origin (does not require a primary part)
diceModel.Parent = workspace
diceModel:PivotTo(CFrame.new(0, 10, 0))
-- Assign the primary part before physical simulation
-- Without this line, the script will always output the same thing and the bounding box of the model will not change orientation
diceModel.PrimaryPart = diceTop
-- Wait a bit before rolling the dice (let it settle onto the floor)
for i = 5, 1, -1 do
print("Rolling dice in...", i)
task.wait(1)
end
diceTop:ApplyAngularImpulse(Vector3.new(15000, 1000, 5000))
diceTop:ApplyImpulse(Vector3.new(0, 3000, 0))
task.wait(1)
-- Wait for the roll to complete
while diceTop.AssemblyLinearVelocity.Magnitude > 0.1 or diceTop.AssemblyAngularVelocity.Magnitude > 0.1 do
task.wait()
end
-- Get the dice orientation, impacted by the primary part
local orientation = diceModel:GetBoundingBox()
if orientation.YVector.Y > 0.5 then
print("It's the boy!")
else
print("It's his mother!")
end
Scale
Özellikler paneinde bu özellik ayarlanırsa, Model/ScaleTo modeli aranır gibi ölçeği artırır, tüm aşağıdaki Instance'leri ölçeklere uygun olarak ölçeğe sahip olur, böylece modelin orijinal büyüklüğüne ilişkin belirlenen ölçek faktörüne sahiptir.
Bu özellik Studio'da sadece mevcut ve bir Script veya LocalScript içinde kullanıldığında bir hata oluşturur. Model/ScaleTo ve 1> Model/GetScale1>, kullanıcılar tarafından kullanılmalıdır.
WorldPivot
Bu özellik, bir Model ın pivot'unun nerede bulunduğunu belirler. Eğer Class.Model ın pivot'u Class.
Yeni oluşturulan bir Model için, pivot'ı Class.Model.WorldPivot özelliğinin merkezine kadar içeriklerinin bağlayıcı kutusunun merkezine işlenir,直到 Model.WorldPivot2>Class.Model.WorldPivot2> özelliğinin ayarlanmasına kadar. Dünyanın pivot'ı ilk defa ayarlanı
En yaygın olarak, Studio araçlarıyla modeli hareket ettirerek veya PVInstance:PivotTo() ve Model:MoveTo() gibi hareket modu göstergeleriyle dünyanın pivot'unu ayarlayarak bu yeni model davranışını sona erdirir.
Bu davranış, Lua kodunun yeni bir model oluşturarak ve ebeveyn nesneleri oluşturarak mantıksal bir pivot almasına izin vermek, kodu her yeni bir model oluşturduğunuzda açıkçası belirtmeniz gereken Model.WorldPivot olarak yapmanızı sağlar.
local model = Instance.new("Model")workspace.BluePart.Parent = modelworkspace.RedPart.Parent = modelmodel.Parent = workspaceprint(model:GetPivot()) -- Currently equal to the center of the bounding box containing "BluePart" and "RedPart"model:PivotTo(CFrame.new(0, 10, 0)) -- This works without needing to explicitly set "model.WorldPivot"
Kod Örnekleri
local function resetPivot(model)
local boundsCFrame = model:GetBoundingBox()
if model.PrimaryPart then
model.PrimaryPart.PivotOffset = model.PrimaryPart.CFrame:ToObjectSpace(boundsCFrame)
else
model.WorldPivot = boundsCFrame
end
end
resetPivot(script.Parent)
Yöntemler
GetBoundingBox
Bu işlev, bir BasePart çocuğunun içindeki tüm şeyleri içeren bir hacim oluşturur. Hacim, Class.Model.PrimaryPart
Eğer model için PrimaryPart yoksa, bağlayıcı kutu dünya eksenlerine uyacak şekilde hizalanacaktır.
local model = workspace.Modellocal part = workspace.Partlocal orientation, size = model:GetBoundingBox()-- Parça resim etiket kutusunun eşdeğerine boyutlandırılır ve konumlandırılırpart.Size = sizepart.CFrame = orientation
Dönüşler
GetExtentsSize
Class.BasePart|BaseParts içindeki tüm Model içindeki en küçük kutun boyutunu iade eder. Eğer Model.PrimaryPart mevcutsa, kutu 1> Class
Bu işlev sadece en küçük bağlayıcı kutunun boyutunu geri verir ve geliştirici kutunun konumunu almak için kendi yöntemini kullanmalıdır.
Dönüşler
Kod Örnekleri
local model = Instance.new("Model")
model.Parent = workspace
local RNG = Random.new()
for _ = 1, 5 do
local part = Instance.new("Part")
part.Anchored = true
part.Size = Vector3.new(RNG:NextNumber(0.05, 5), RNG:NextNumber(0.05, 5), RNG:NextNumber(0.05, 5))
part.Parent = model
end
print(model:GetExtentsSize())
GetPersistentPlayers
Bu yöntem bir Script から çağrıldığında, tüm bu model için kalıcı olan Player nesnelerini içerir. Bir LocalScript çağrıldığında, bu yöntem sadece bu modelin kalıcı olup olmadığını kontrol eder.
Dönüşler
Bu modelin objesi için persistente olan tüm Player nesneleri içeren bir tablo.
GetScale
Modeller, yeni oluşturulan modeller ve modellerin ölçeği gibi değişikliklerde 1'den başlayan persistansli bir ölçek özelliği içerir. Bu işlev, modelin mevcut ölçek özelliğini döndürür.
Mevcut ölçek faktörü doğrudan modelin altındaki İн스턴스'ların büyüklüğünü etkilemez. İçerik oluşturma veya kodlama amaçlı kullanılır toplama ölçeği olarak kullanılır.
Bir verilen oturum içinde, model aşağıdaki İsteklerden sonra soyundan İнstанс'ın aşağıdaki özgün büyüklük bilgilerini Model/ScaleTo ile çözmeye çalış
Ölçek faktörü motor davranışını bir yönde etkiler: Bir modelin ölçek faktörü, animations ile oynanan ortak ofsetlere uygulanacak, böylece animasyonlu kaynaklar animasyonları yeniden oynatır, bile ölçeklenmiş olsa bile.
Dönüşler
Modelin mevcut kanal ölçeği faktörü.
Kod Örnekleri
local CollectionService = game:GetService("CollectionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Find all the models with the tag we want to replace
local items = CollectionService:GetTagged("Tree")
local newModel = ReplicatedStorage.FancyTreeReplacementModel
for _, item in items do
-- Make the new item and scale / position it where the old one was
local newItem = newModel:Clone()
newItem:ScaleTo(item:GetScale())
newItem:PivotTo(item:GetPivot())
-- Add the same tag to the replacement
CollectionService:AddTag(newItem, "Tree")
-- Delete the old item and parent the new one
newItem.Parent = item.Parent
item:Destroy()
end
MoveTo
Class.Model.PrimaryPart|PrimaryPart ı taşıyıcı olarak MoveTo() ın verilen pozisyonuna hareket ettirir. Bir ana bölüm belirtilmediyse, modelin ana bölümü kullanılır, ancak ana bölüm belirtilmiş değildir ve Class.Model:MoveTo()|MoveTo() kullanılırken her zaman bir
Modelin hareket edilmesi gereken yerlerde herhangi bir engeller varsa, örneğin Terrain veya diğer BaseParts gibi, model yukarıda yer alana kadar yatay olarak hareket edilir. Bu davranış istemediyseniz, PVInstance:PivotTo() yerine kullanılmalıdı
Class.Model:MoveTo()|MoveTo() ile bir modeli hareket ettirirken dönme koruma altında değildir. Dönmenin mevcut dönüşümünü korlemek için TranslateBy() veya PVInstance:PivotTo() kullanılması önerilir.
Parametreler
Dönüşler
Kod Örnekleri
local START_POSITION = Vector3.new(-20, 10, 0)
local END_POSITION = Vector3.new(0, 10, 0)
local model = Instance.new("Model")
model.Parent = workspace
local part1 = Instance.new("Part")
part1.Size = Vector3.new(4, 4, 4)
part1.Position = START_POSITION
part1.Anchored = true
part1.BrickColor = BrickColor.new("Bright yellow")
part1.Parent = model
local part2 = Instance.new("Part")
part2.Size = Vector3.new(2, 2, 2)
part2.Position = START_POSITION + Vector3.new(0, 3, 0)
part2.Anchored = true
part2.BrickColor = BrickColor.new("Bright blue")
part2.Parent = model
model.PrimaryPart = part1
model.Parent = workspace
local obstruction = Instance.new("Part")
obstruction.Name = "Obstruction"
obstruction.Size = Vector3.new(10, 10, 10)
obstruction.Position = Vector3.new(0, 10, 0)
obstruction.Anchored = true
obstruction.BrickColor = BrickColor.new("Bright green")
obstruction.Parent = workspace
task.wait(3)
model:MoveTo(END_POSITION)
ScaleTo
Modeller, yeni oluşturulan modeller için 1'de başlayan persistente bir ölçek faktörü içerir. Bu işlev, modeli, ölçek faktörü 1'in yanındaki pivot konumu etrafında skalayabilir. Bu işlevi gerçekleştirmek iki şeyi yapar:
- Modelin mevcut ölçek faktörünü belirli değere ayarlar
- Tüm aşağıdaki Instances'i yeniden boyutlandırır ve yeniden konumlandırır
Yerlerin boyutlandırılması pivot konumunun etrafında yapılır.
Ascendant Instances'in tüm "geometrik" özellikleri skalenecek. Bu, açıkçası parçaların boyutlarını içerir, ancak burada diğer özelliklerin skalanan örnekleri vardır:
- Bunun gibi ortakların uzunluğu, WeldConstraints ve Class.Rope|Ropes
- Fiziksel hızlar ve güçler gibi Hinge.MaxServoTorque
- Parçacık emisyonlarının boyutları gibi görsel özellikleri
- Diğer uzunluk özellikleri gibi Sound.RollOffMinDistance
Parametreler
Dönüşler
TranslateBy
Şekillendiriciyi Model ile bir Vector3 ofseti arttırır, modelin yönünü korur. Eğer bir başka BasePart veya 2> Class.Terrain2> zaten mevcutsa, 5> Class.Model5> ile şekillendiriciyi çakal
Tercüman, nesne alanı değil, dünya uzayında uygulanır, yani modelin parçaları farklı olsa bile standart eksenin üzerinde hala hareket eder.
Parametreler
Dönüşler
Kod Örnekleri
local START_POSITION = Vector3.new(-20, 10, 0)
local END_POSITION = Vector3.new(0, 10, 0)
local model = Instance.new("Model")
local part1 = Instance.new("Part")
part1.Size = Vector3.new(4, 4, 4)
part1.CFrame = CFrame.new(START_POSITION) * CFrame.Angles(0, math.rad(45), 0)
part1.Anchored = true
part1.BrickColor = BrickColor.new("Bright yellow")
part1.Parent = model
local part2 = Instance.new("Part")
part2.Size = Vector3.new(2, 2, 2)
part2.CFrame = part1.CFrame * CFrame.new(0, 3, 0)
part2.Anchored = true
part2.BrickColor = BrickColor.new("Bright blue")
part2.Parent = model
model.PrimaryPart = part1
model.Parent = workspace
local obstruction = Instance.new("Part")
obstruction.Name = "Obstruction"
obstruction.Size = Vector3.new(10, 10, 10)
obstruction.Position = Vector3.new(0, 10, 0)
obstruction.Transparency = 0.5
obstruction.Anchored = true
obstruction.BrickColor = BrickColor.new("Bright green")
obstruction.Parent = workspace
task.wait(3)
-- use TranslateBy to shift the model into the obstruction
model:TranslateBy(END_POSITION - START_POSITION)