Model

Artık kullanılmayanları göster

*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 Humanoid ve bir Part Class.Humanoid adlı bir başlık altında bir modelde ebeveyn olur; ayrıntılar için 2>Karakter İsmi/Sağlık Görüntüsü2> bakın.
  • 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

Basic Model Instantiation

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

  • Eklenti Güvenliği
    Paralel oku

    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ı.

  • Çoğaltılmamış
    Betiklenemez
    Paralel oku

    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.

  • Çoğaltılmamış
    Paralel oku

    Bir Model ın pivot'unun nerede bulunduğunu belirler. Bu, bir Class.Model ın pivot'unun bir seti olmadığını gösterir.

Şuradan alınan Özellikler: PVInstance

Yöntemler

  • AddPersistentPlayer(playerInstance : Player):void

    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.

  • MoveTo(position : Vector3):void

    Class.Model.PrimaryPart|PrimaryPartı verilen pozisyona hareket ettirir. Bir ilk parça belirtilmediyse, modelin kök parçası kullanılır.

  • RemovePersistentPlayer(playerInstance : Player):void

    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.

  • ScaleTo(newScaleFactor : number):void

    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.

  • TranslateBy(delta : Vector3):void

    Ş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

Şuradan alınan Yöntemler: PVInstance

Özellikler

Eklenti Güvenliği
Paralel oku

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

Paralel oku

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

Paralel oku

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

Throwing Dice

-- 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

Çoğaltılmamış
Betiklenemez
Paralel oku

Ö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

Çoğaltılmamış
Paralel oku

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 = model
workspace.RedPart.Parent = model
model.Parent = workspace
print(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

Reset Pivot

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

AddPersistentPlayer

void

Parametreler

playerInstance: Player
Varsayılan değer: "nil"

Dönüşler

void

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.Model
local part = workspace.Part
local orientation, size = model:GetBoundingBox()
-- Parça resim etiket kutusunun eşdeğerine boyutlandırılır ve konumlandırılır
part.Size = size
part.CFrame = orientation

Dönüşler

Bir CFrame , bir Vector3 ile takip edilen hacmin yönünü temsil eden

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

Datatype.Vector3 uzantısının Model boyutunu genişletir.

Kod Örnekleri

Model GetExtentsSize

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

Instances

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

Instances

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

Substituting in a replacement model using PivotTo and ScaleTo

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

void

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

position: Vector3

Class.Model ile birlikte Model hareket eder.


Dönüşler

void

Kod Örnekleri

Model MoveTo

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)

RemovePersistentPlayer

void

Parametreler

playerInstance: Player
Varsayılan değer: "nil"

Dönüşler

void

ScaleTo

void

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

newScaleFactor: number

Dönüşler

void

TranslateBy

void

Ş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

delta: Vector3

The Vector3 to translate the Model by.


Dönüşler

void

Kod Örnekleri

Model TranslateBy

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)

Etkinlikler