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 konteyner nesneleridir, yani nesneleri bir araya getirirler.Koleksiyonları BaseParts tutmak için en iyi kullanılır ve işlevlerini genişleten bir dizi işlev vardır.

Modeller geometrik grupları temsil etmek üzere tasarlanmıştır.Grupmanızın geometrik bir yorumu yoksa, örneğin bir koleksiyon Scripts , bunun yerine bir Folder kullanın.

Bileşen parçalarının birleştirildiği modeller (böylece model hareket edebilir veya fiziğin simülasyonu aracılığıyla yok edilebilir) genellikle bir PrimaryPart ayarlasahiptir, çünkü model hareket ederken pivot ve sınır kutusunun hangi parçasını takip etedeceği belirtilir.Bir yerde kalan statik modeller, birincil bir parça ayarlasahip olmanın avantajından yararlanmaz.

Modeller, Roblox oyuncu karakterleri dahil olmak üzere geniş bir uygulama yelpazesine sahiptir.Ayrıca dikkate alınması gereken bir dizi benzersiz davranışları vardır:

Tüm Instance türleriyle olduğu gibi, bir ebeveynin Model bir müşteriye yansıtılması, tüm çocuklarının yansıtılacağını garanti etmez.Bu, özellikle bu örneklerin istemci üzerinde çalışan kod tarafından erişildiğinde önemlidir, örneğin bir LocalScript . ile değerleri kullanarak, ebeveyn model müşteride mevcut olduğunda tüm model ve tüm yerleştirmelerin mevcut olmasını sağlayabilir veya atomiklik istemediğinizde kullanabilirsiniz.

Kod Örnekleri

The following sample includes a basic function that takes a table of objects and parents them into a new Model, returning that Model.

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

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

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

    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.

  • Çoğaltılmamış
    Paralel oku

    Hangi noktada bir Model döndürme noktasının bulunduğunu belirler bulunmuyor ve bunun bir set Model.PrimaryPart içerdiği yer.

Şuradan alınan Özellikler: PVInstance

Yöntemler

  • AddPersistentPlayer(playerInstance : Player):()

    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.

  • MoveTo(position : Vector3):()

    PrimaryPart ı verilen pozisyona taşır. Birincil bir parça belirtilmediyse, modelin kök parçası kullanılacaktır.

  • RemovePersistentPlayer(playerInstance : Player):()

    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.

  • ScaleTo(newScaleFactor : number):()

    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.

  • TranslateBy(delta : Vector3):()

    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.

Şuradan alınan Yöntemler: PVInstance

Özellikler

Eklenti Güvenliği
Paralel oku

Yayın akışı etkinleştirilmiş deneyimler için modeldeki ayrıntı seviyesini ayarlar.

StreamingMesh olarak ayarlanırken, daha düşük çözünürlüklü bir "imposter" meshesi (modelin tüm çocuk parçalarını sarıp sarmalayan renkli, kaba bir meshes) yayın yayınının dışında görüntülenir.

Disabled veya Automatic olarak ayarlanırsa, daha düşük çözünürlüklü meshlar görüntülenmez.

ModelStreamingMode

Paralel oku

Instans yayınlandığında ve çıktığında nasıl kontrol edileceğini kontrol eder örnek yayınlanırken.Davranış seçilen enuma bağlıdır.Yayın etme etkinleştirilmediğinde etkisi yoktur.

Bu özellik, yayın etme etkinleştirildiğinde sadece Studio'nun Özellikler penceresi aracılığıyla değiştirilmelidir, ya da Scripts , ancak asla LocalScripts (bunu yapmak, belirsiz davranışa neden olabilir) değiştirilmelidir.

PrimaryPart

Paralel oku

Model 'nin birincil kısmına işaret eder.Birincil parça, modelin merkezi için fiziksel referans olarak hareket eden BasePart parçasıdır.Yani, model içindeki parçalar fiziksel simülasyon veya diğer yollardan dolayı hareket ettirildiğinde, eksen ana parça ile aynı anda hareket edecektir.

Unutmayın ki Models varsayılan olarak PrimaryPart ayarlanmıyor.Fiziğin üzerinde hareket edilmesi gereken bir model oluşturuyorsanız, bu özelliği Studio'da veya bir senaryo içinde manuel olarak ayarlamanız gerekir.Birincil parça değil ayarlanırsa, pivot dünya uzayındaki aynı konumda kalacaktır, model içindeki parçalar hareket ederse bile.

Ayrıca, bu özelliği ayarlarken, modelin bir altının olması gerektiğini unutmayın BasePart.Eğer modelin bir altını olarak ayarlamaya çalışırsanız, bu bir modelin soyundan olmayan bir parçaya ayarlanacaktır, ancak bir sonraki simülasyon adımı sırasında sıfırlanacaktır - bu, modelden geçici olarak ana parçayı bir olarak ayarlayabileceğini varsayan senaryoları desteklemek için miras davranışıdır.

Model için genel kural şudur:

  • Parçalarının fiziksel bağlantılar aracılığıyla birleştirildiği modeller, WeldConstraints veya Motor6Ds gibi fiziksel bağlantılar aracılığıyla birincil bir parçaya atanmalıdır.Örneğin, Roblox karakter modellerinin varsayılan olarak Model.PrimaryPart seti, HumanoidRootPart 'a ayarlanır.
  • Bir senaryo onları açıkça hareket ettirmediği sürece, bir yerde kalan statik (genellikle Anchored ) modeller bir Model.PrimaryPart gerektirmez ve bir ayarlasahip olmanın faydasından yararlanmaz.

Kod Örnekleri

This code sample creates and throws a dice model, then outputs whether it landed with the blue side facing up. If Model.PrimaryPart was not set, the pivot / bounding box of the dice would rotate, as the parts inside of it are physically simulated during the roll.

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

Bu özelliği özellikler penceresine ayarlamak, modelin üzerinde Model/ScaleTo çağrılmış gibi görünecek ve modelin tüm alt Instanslarını ölçeklendirecek, böylece modelin orijinal boyutuyla ilgili belirtilen ölçek faktörüne sahip olacak.

Bu özellik yalnızca Stüdyo'da mevcuttur ve bir Script veya LocalScript içinde kullanılırsa bir hata atacaktır.Model/ScaleTo ve Model/GetScale kodlardan kullanılmalıdır.

WorldPivot

Çoğaltılmamış
Paralel oku

Bu özellik, yapmadığı için bir eksenin nerede bulunduğunu belirler çünkü set var.Eğer yaparsa , ın merkezi, bunun birincil parçanın merkezine eşit olur ve bu özelliği göz ardı edilir.

Yeni oluşturulan bir Model için, merkezi, içeriğin sınır kutusunun merkezi olarak ele alınacaktır, ilk kez onun Model.WorldPivot ayarlanana kadar.Dünya merkezi ilk kez ayarlanırken, bu başlangıç davranışını geri yüklemeniz imkansızdır.

En yaygın olarak, modeli Studio araçlarıyla veya PVInstance:PivotTo() ve Model:MoveTo() gibi model hareket işlevleriyle taşımak, dünya merkezini ayarlayacak ve bu yeni model davranışını bitirecektir.

Bu davranışın amacı, Luau kodunun yeni bir model oluşturarak ve ona ebeveynlik yaparak basitçe mantıklı bir dönüşüm elde etmesine izin vermek, kodda her seferinde bir model oluşturmanın gereksinimini açıkça belirtmek zorunda kalmaktan kaçınmaktır.


local Workspace = game:GetService("Workspace")
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

This code sample shows a custom function for resetting the pivot of a model back to the center of that model's bounding box.

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

()

Parametreler

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

Dönüşler

()

GetBoundingBox

Bu işlev, bir BasePart içinde tüm çocukların bulunduğu bir hacmin açıklamasını döndürür Model .Sesin yönü, PrimaryPart 'in yönüne dayanmaktadır ve model seçildiğinde Studio'da görüntülenen seçim kutusuyla eşleşir.Terrain:FillBlock() davranışını yansıtarak, o bağlı kutunun merkezini temsil eden bir CFrame ve boyutunu temsil eden bir Vector3 geri döndürür.

Model için PrimaryPart yoksa, sınır kutusu dünya eksenlerine uyacaktır.


local Workspace = game:GetService("Workspace")
local model = Workspace.Model
local part = Workspace.Part
local orientation, size = model:GetBoundingBox()
-- Modelin sınır kutusuna eşit yeniden boyutlandır ve konumlandır parçası
part.Size = size
part.CFrame = orientation

Dönüşler

Hacmin yönünü temsil eden bir ve hacmin boyutunu temsil eden bir daha sonra hacmin yönünü temsil eden bir .

GetExtentsSize

BaseParts 'nin tümünü içeren en küçük sınırlayıcı kutunun boyutunu döndürür Model .Eğer Model.PrimaryPart varsa, sınır kutusu o parçaya uyarlanacaktır.Birincil bir parça belirlenmediyse, işlev sınır kutusunu uyumlandırmak için modelde bir parça seçecektir.Bu parçanın seçimi deterministik olmadığından, bu işlevle tutarlı sonuçlar almak için bir Model.PrimaryPart ayarlanması önerilir.

Bu işlevin sadece en küçük sınır kutusunun boyutunu döndürdüğünü ve geliştiricinin sınır kutusunun konumunu elde etmek için kendi yöntemini kullanması gerektiğini unutmayın.


Dönüşler

The Vector3 uzantı boyutu of the Model .

Kod Örnekleri

The code sample below demonstrates how Model.GetExtentsSize can be used to get the size of the bounding box containing the parts.

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 'den çağrıldığında, bu model için kalıcı olan tüm Player nesneleri döndürür.Bir LocalScript 'den çağrıldığında, bu yöntem yalnızca bu modelin LocalPlayer için kalıcı olup olmadığını kontrol eder.


Dönüşler

Instances

Bu model nesnesi için kalıcı olan tüm Player nesneleri içeren bir tablo.

GetScale

Modeller kalıcı bir kanonik ölçek faktörü içerir, bu da yeni oluşturulan modeller için 1'de başlar ve model ölçeklendirildiğinde değişir Model/ScaleTo .Bu işlev, modelin mevcut kanonik ölçek faktörünü döndürür.

Mevcut ölçek faktörü doğrudan model altındaki Instanların boyutunu etkilemez.Modelin orijinal boyutuna kıyasla nasıl ölçeklendirildiğini hatırlamak için içerik yazma ve kodlama amaçları için kullanılır.

Verilen bir oturum içinde, model, ilk Model/ScaleTo çağrıdan sonra mirasçı İnstanslarının kesin orijinal boyut bilgilerini önbelleğe alacaktır.Bu, ScaleTo(x) 'yi aramanın ScaleTo(1) ardından modelin orijinal yapılandırmasını düzgün bir şekilde geri alacağınız anlamına gelir, yüzde dalgalanma olmadan.Yüzde kaybından kaçınmak, bir Ölçek tarafından bir Ölçek işlevi yerine bir Ölçek işlevine sahip olmanın motivasyonudur.

Ölçek faktörü motor davranışını bir şekilde etkiler: Bir modelin ölçek faktörü, bu modelin altında yer alan animasyonların animasyonlarını doğru bir şekilde geri oynatacak, böylece animasyonları ölçeklendirilmiş olsa bile.


Dönüşler

Modelin mevcut kanonik ölçek faktörü.

Kod Örnekleri

This code sample demonstrates substituting in a replacement for all the copies of a tree model using PivotTo and ScaleTo. The pivot and scale of the models are used as a reference ensuring that the relative sizes and locations of the replacement models match those of the originals.

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

()

PrimaryPart 'yi verilen pozisyona taşır.Birincil bir parça belirtilmediyse, modelin kök parçası kullanılacak, ancak kök parça deterministik değildir ve MoveTo() kullanırken daima birincil bir parça ayarlamanız önerilir.

Modelin taşınması gereken herhangi bir engel varsa, örneğin Terrain veya diğer BaseParts , model yolun üzerinde hiçbir şey olana kadar yukarı doğru taşınacaktır.Bu davranış istemiyorsanız, PVInstance:PivotTo() yerine kullanılmalıdır.

Not: Rotasyon, MoveTo() ile bir modeli hareket ettirirken korunmaz.Modelin mevcut dönüşü korunması gerekiyorsa, TranslateBy() veya PVInstance:PivotTo() kullanılması önerilir.

Parametreler

position: Vector3

The Vector3 the Model taşınır.

Varsayılan değer: ""

Dönüşler

()

Kod Örnekleri

This sample demonstrates how Model:MoveTo avoids collisions.

A simple two part Model is created, and its PrimaryPart is set. An large obstruction part is placed next to it.

After 5 seconds Model:MoveTo is used to direct the model to move inside the obstruction part. However, as MoveTo will not move a model inside of an obstruction the Model is moved up on the Y axis and placed above the obstruction.

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

()

Parametreler

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

Dönüşler

()

ScaleTo

()

Modellerde kalıcı bir kanonik ölçek faktörü bulunur, yeni oluşturulan modellerde 1'de başlar.Bu işlev, modeli, pivot konumuna göre, 1 ölçek faktörüyle nasıl görüneceğine göre ölçeklendirir.Bunu başarmak için iki şey yapar:

  • Modelin mevcut ölçek faktörünü belirtilen değere ayarlar
  • Bütün alt örnekleri uygun şekilde yeniden boyutlandırır ve konumlandırır

Konumların ölçeklendirilmesi pivot konum etrafında yapılır.

Mirasçı Instanstan gelen tüm "geometrik" özellikler ölçeklenecektir.Bu açıkça parça boyutlarını içerir, ancak burada ölçeklendirilen bazı diğer özellik örnekleri var:

  • WeldConstraints ve Class.Rope|Ropes gibi eklemlerin uzunluğu
  • Fiziksel hızlar ve kuvvetler Hinge.MaxServoTorque gibi
  • Parçacık verici boyutları gibi görsel özellikler
  • Sound.RollOffMinDistance gibi diğer uzunluk özellikleri

Parametreler

newScaleFactor: number
Varsayılan değer: ""

Dönüşler

()

TranslateBy

()

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.

Tercüme, nesne alanı yerine dünya uzayında uygulanır, yani modelün parçaları farklı yönlendirilmiş olsa bile hala standart eksende hareket edecektir.

Parametreler

delta: Vector3

Tercüme etmek için Vector3 tarafından Model .

Varsayılan değer: ""

Dönüşler

()

Kod Örnekleri

This sample demonstrates how Model:TranslateBy ignores collisions and respects the orientation of the model.

A simple two part Model is created, rotated 45 degrees on the Y axis, and its PrimaryPart is set. An large obstruction part is placed next to it.

After 5 seconds Model:TranslateBy is used to direct the model to move inside the obstruction part. The model will move inside of the obstruction and maintain it's current orientation.

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