Model

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Model adalah objek kontainer, yang berarti mereka mengumpulkan objek bersama-sama. Mereka paling baik digunakan untuk menyimpan koleksi BaseParts dan memiliki beberapa fungsi yang memperpanjang kinerjanya.

Model dimaksudkan untuk mewakili geometri kumpulan. Jika kumpulan Anda tidak memiliki interpretasi geometri, misalnya, kumpulan Scripts , gunakan Folder alih-alih.

Model whose komponen bagiannya terikat bersama dengan join (sehingga mereka dapat bergerak atau dihancurkan melalui simulasi fisik) biasanya memiliki aturPrimaryPart , karena itu menentukan bagian mana dalam model yang pivot dan box bawah akan "ikuti" saat model bergerak. Model statis yang tetap di satu tempat tidak mendapat manfaat dari memiliki atur

Model memiliki berbagai aplikasi, termasuk karakter pemain Roblox. Mereka juga memiliki beberapa perilaku unik yang penting untuk diingat:

  • Ketika Humanoid dan Part bernama Kepala muncul di bawah model, nama/jęz kesehatan GUI akan muncul di atas model; lihat 2> Nama/Kesehatan Tampilan2> untuk detail.
  • Jika posisi bagian di sumbu Y menghantam nilai Workspace.FallenPartsDestroyHeight, dan itu adalah objek terakhir di dalam Model, model akan dihancurkan juga.
  • Ketika digunakan di tempat dengan Workspace.StreamingEnabled tetap pada benar, nilai ModelStreamingMode mengontrol berbagai perilaku sekitar bagaimana model dan anak cucu di replikasi dan/atau dihapus dari klien. Selain itu, nilai Class.Model.LevelOfDetail|LevelOfDetail

Seperti dengan semua jenis Instance , fakta bahwa seorang ibu b

Contoh Kode

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)

Rangkuman

Properti

Properti diwarisi dari PVInstance

Metode

  • AddPersistentPlayer(playerInstance : Player):void

    Tetapkan model ini menjadi persisten untuk pemain yang ditentukan. Model.ModelStreamingMode harus diatur menjadi PersistenPerPemain untuk perilaku berubah sebagai hasil tambahan.

  • Mengembalikan deskripsi volume yang berisi semua bagian dari Model.

  • Mengembalikan ukuran kotak pembatas terkecil yang berisi semua BaseParts dalam Model, diatur dengan Model.PrimaryPart jika diatur.

  • Mengembalikan semua objek Player yang bertahan untuk model objek ini. Perilaku bervariasi tergantung pada apakah metode ini dianggap dari Script atau LocalScript .

  • Mengembalikan skala kanonik model, yang default ke 1 untuk model baru yang dibuat dan akan berubah saat skalanya melalui Model/ScaleTo .

  • MoveTo(position : Vector3):void

    Pindahkan PrimaryPart ke posisi yang diberikan. Jika bagian utama tidak ditentukan, bagian akar model akan digunakan.

  • RemovePersistentPlayer(playerInstance : Player):void

    Membuat model ini tidak lagi bertahan untuk pemain tertentu. Model.ModelStreamingMode harus diatur menjadi PersistentPerPlayer untuk perilaku berubah sebagai hasil dari penghapusan.

  • ScaleTo(newScaleFactor : number):void

    Tetapkan skala faktor model, menyesuaikan ukuran dan lokasi semua Instans yang turun sehingga mereka memiliki skala faktor relatif terhadap ukuran dan lokasi awal mereka ketika skala faktor adalah 1.

  • TranslateBy(delta : Vector3):void

    Bergeser sebuah Model olehOffset yang diberikan Vector3 , menjaga orientasi model. Jika BasePart atau 1> Class.Terrain1> sudah ada di posisi baru maka 4> Class.Model4> akan menggeser objek yang dikatakan.

Metode diwarisi dari PVInstance

Properti

Keamanan Plugin
Baca Paralel

Tetapkan tingkat rincian pada model untuk pengalaman dengan instance streaming yang diaktifkan.

Ketika diatur ke StreamingMesh, rendah resolusi "imposter" mesh (berwarna, coarse mesh yang menggulung di sekitar semua bagian anak model) menyajikan di luar radius streaming.

Ketika diatur ke Disabled atau Automatic, rendahnya resolusi meshes tidak akan ditampilkan.

ModelStreamingMode

Baca Paralel

Mengontrol cara Models diterjemahkan masuk dan keluar saat streaming diaktifkan. Perilaku bergantung pada枚um yang dipilih. Tidak ada efek saat streaming tidak diaktifkan.

Properti ini hanya boleh diubah di Studio melalui jendela Proprietas ketika streaming diaktifkan, atau di Scripts , tetapi tidak pernah di LocalScripts (melakukannya dapat mengakibatkan perilaku yang tidak diatur).

PrimaryPart

Baca Paralel

Mengacu pada bagian utama dari Model . Bagian utama adalah BasePart yang bertindak sebagai referensi fisik untuk pivot model. Artinya, ketika bagian dalam model diangkat karena simulasi fisik atau alat lainnya, pivot akan bergerak sinkron dengan bagian utama.

Catat bahwa Models tidak memiliki PrimaryPart yang diatur secara default. Jika Anda menciptakan model yang perlu diaktifkan oleh fisika, Anda harus secara manual menetapkan propperti ini di Studio atau dalam naskah. Jika bagian utama tidak diatur, pivot akan tetap berada di lokasi yang sama di ruang dunia, bahkan

Catat juga bahwa ketika menetapkan property ini, itu harus menjadi BasePart yang merupakan cucu dari model. Jika Anda mencoba menetapkan

Aturan umum untuk model adalah bahwa:

  • Model whose parts are joined together via physical joints seperti WeldConstraints atau Motor6Ds harus memiliki bagian utama yang ditetapkan. Misalnya, model karakter Roblox memiliki Model.PrimaryPart set ke 1> HumanoidRootPart1> oleh default.
  • Model statis ( biasanya Anchored ) yang tetap berada di satu tempat kecuali jika skrip secara eksplisit menggerakkan mereka tidak memerlukan Model.PrimaryPart dan cenderung tidak mendapat manfaat dari memiliki satu atur.

Contoh Kode

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

Tidak Direplikasi
Tidak Dapat Ditulis Skripnya
Baca Paralel

Mengatur property ini di pane sifat akan menyesuaikan model seperti jika Model/ScaleTo dianggil, menyesuaikan semua Instans turunan di model sehingga model memiliki skala faktor relatif terhadap ukuran aslinya.

Properti ini hanya tersedia di Studio dan akan menghasilkan kesalahan jika digunakan dalam Script atau LocalScript . Model/ScaleTo dan 1> Model/GetScale1> harus digunakan dari script.

WorldPivot

Tidak Direplikasi
Baca Paralel

Properti ini menentukan di mana pivot dari Model yang tidak memiliki set Model.PrimaryPart adalah ber

Untuk Model yang baru saja dibuat, pivot-nya akan diperlakukan sebagai pusat dari kotak batas kontennya sampai pertama kali properti Model.WorldPivot-nya atur. Setelah pivot pertama kali ditetapkan, tidak mungkin untuk mengembalikan perilaku ini.

Paling umum, menggerakkan model dengan alat Studio, atau dengan fungsi gerakan model seperti PVInstance:PivotTo() dan Model:MoveTo(), akan menetapkan pivot dunia dan akhirnya mengakhiri perilaku model baru ini.

Tujuan dari perilaku ini adalah untuk memungkinkan kode Lua untuk mendapatkan pivot yang masuk akal hanya dengan menciptakan model baru dan menyetel objek ke dalamnya, menghindari perlu secara eksplisit menetapkan Model.WorldPivot setiap kali Anda membuat model di kode.


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"

Contoh Kode

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)

Metode

AddPersistentPlayer

void

Parameter

playerInstance: Player
Nilai Default: "nil"

Memberikan nilai

void

GetBoundingBox

Fungsi ini mengembalikan deskripsi dari volume yang mengandung semua anak BasePart dalam satu Model . Orientasi volume didasarkan pada orientasi dari

Jika tidak ada PrimaryPart untuk model, kotak batas akan diatur ke sumbu dunia.


local model = workspace.Model
local part = workspace.Part
local orientation, size = model:GetBoundingBox()
-- Ubah dan posisikan bagian sama dengan kotak pembatas model
part.Size = size
part.CFrame = orientation

Memberikan nilai

A CFrame mewakili orientasi volume yang diikuti oleh a Vector3 mewakili ukuran volume.

GetExtentsSize

Mengembalikan ukuran kotak pembatas terkecil yang berisi semua BaseParts dalam Model . Jika Model.PrimaryPart ada maka kotak pembatas akan diatur ke bag

Catat fungsi ini hanya mengembalikan ukuran kotak pembatas terkecil, dan pengembang harus menggunakan metode mereka sendiri untuk mendapatkan posisi kotak pembatas.


Memberikan nilai

Ukuran ekstensi Vector3 dari Model .

Contoh Kode

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

Ketika metode ini dianggil dari Script , itu mengembalikan semua objek Player yang bertahan untuk model ini. Saat dianggil dari LocalScript, metode ini hanya memeriksa apakah model ini bertahan untuk 1> Class.Players.LocalPlayer|LocalPlayer1> .


Memberikan nilai

Instances

Tabel dengan semua objek Player yang objek model ini bertahan.

GetScale

Model berisi skala skala persisten, yang dimulai dengan 1 untuk model baru yang dibuat dan perubahan saat model dibuat dengan menelepon Model/ScaleTo . Fungsi ini mengembalikan skala skala persisten model saat ini.

Faktor skala saat ini tidak langsung mempengaruhi ukuran Instans di bawah model. Ini digunakan untuk tujuan menulis dan mengekspor konten untuk menyimpan bagaimana model telah skal relatif terhadap ukurannya yang asli.

Dalam sesi yang diberikan, model akan menyimpan informasi ukuran asli yang tepat dari Instance descendant setelah panggilan pertama Model/ScaleTo . Ini berarti bahwa memanggil ScaleTo(x) setelah pangg

Faktor skala menghasilkan perilaku mesin secara satu cara: Faktor skala model akan diterapkan ke kompensasi bersama dari animations yang dimainkan di AnimationController di bawah model itu, sehingga animasi bermain animasi akan benar-benar bermain kembali bahkan ketika skala.


Memberikan nilai

Faktor skala kanonik saat ini dari model.

Contoh Kode

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

Pindahkan PrimaryPart ke posisi yang ditentukan. Jika bagian utama belum ditentukan, bagian akar model akan digunakan, tetapi bagian utama tidak deterministik dan direkomendasikan agar Anda selalu menetapkan bagian utama saat menggunakan MoveTo() .

Jika ada penghalang di mana model harus dipindahkan, seperti Terrain atau BaseParts, model akan dipindahkan secara vertikal ke atas sampai tidak ada yang menghalangi. Jika perilaku ini tidak diinginkan, PVInstance:PivotTo() harus digunakan.

Catat bahwa rotasi tidak dipertahankan saat mengubah model dengan MoveTo() . Diperlukan untuk menggunakan salah satu TranslateBy() atau PVInstance:PivotTo() jika rotasi saat ini model perlu dipertahankan.

Parameter

position: Vector3

The Vector3 the Model is moved to.


Memberikan nilai

void

Contoh Kode

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

Parameter

playerInstance: Player
Nilai Default: "nil"

Memberikan nilai

void

ScaleTo

void

Model berisi skala skala persisten, yang dimulai dengan 1 untuk model baru yang dibuat. Fungsi ini menyesuaikan model, di sekitar lokasi pivot, relatif terhadap bagaimana akan terlihat pada skala faktor 1. Untuk melakukan ini, melakukan dua hal:

  • Tetapkan skala faktor saat ini model ke nilai yang ditentukan
  • Mengubah dan menempatkan ulang semua Instans yang turun sesuai

Skalierung lokasi dilakukan di sekitar lokasi pivot.

Semua "geometrik" properti dari Instans turunan akan d skalakan. Itu jelas mencakup ukuran bagian, tetapi ini adalah beberapa contoh lain dari properti yang d skalakan:

  • Ujung panjang dari join seperti WeldConstraints dan Class.Rope|Ropes
  • Kecepatan dan kekuatan fisik seperti Hinge.MaxServoTorque
  • Proporsi visual seperti ukuran emitter partikel
  • Prop panjang lainnya seperti Sound.RollOffMinDistance

Parameter

newScaleFactor: number

Memberikan nilai

void

TranslateBy

void

Bergeser sebuah Model olehOffset yang diberikan Vector3 , menjaga orientasi model. Jika BasePart atau 1> Class.Terrain1> sudah ada di posisi baru maka 4> Class.Model4> akan menggeser objek yang dikatakan.

Terjemahan diterapkan di ruang dunia daripada ruang objek, yang berarti bahkan jika bagian model diberi orientasi secara berbeda, itu masih akan bergerak di sumbu standar.

Parameter

delta: Vector3

The Vector3 to translate the Model by.


Memberikan nilai

void

Contoh Kode

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)

Acara