Model

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Modele są obiektami pojemników, co oznacza, że grupują przedmioty razem.Najlepiej używać ich do przechowywania kolekcji BaseParts i mają wiele funkcji, które rozszerzają ich funkcjonalność.

Modele mają reprezentować geometryczne grupy.Jeśli twoja grupacja nie ma interpretacji geometrycznej, na przykład kolekcja Scripts, użyj Folder zamiast tego.

Modele, których części składowe są połączone za pomocą stawów (aby mogły się poruszać lub zostać zniszczone za pomocą symulacji fizycznej), zwykle mają ustawienie PrimaryPart, ponieważ określa, która część modelu będzie "podążać" za modelem, gdy się porusza.Statyczne modele, które pozostają w jednym miejscu, nie korzystają z posiadania zestawu części pierwszorzędnych.

Modele mają szeroką gamę zastosowań, w tym postacie graczy Roblox.Mają one również szereg unikalnych zachowań, które należy wziąć pod uwagę:

Podobnie jak w przypadku wszystkich typów Instance rodzice, fakt, że rodzic Model zostanie replikowany do klienta, nie gwarantuje, że wszystkie jego dzieci zostaną również replikowane.Jest to szczególnie ważne, jeśli instancje te są uzyskiwane przez kod uruchamiany na klientzie, tak jak w przypadku LocalScript .Użycie ModelStreamingMode z wartościami takimi jak Atomic może zapewnić, że cała model i wszystkie jego potomki są obecne, jeśli model rodzic istnieje na klientzie, lub możesz użyć WaitForChild() gdy nie chcesz, aby atomowość była pożądana.

Przykłady kodu

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)

Podsumowanie

Właściwości

  • Zabezpieczenia dodatku plug-in
    Odczyt równoległy

    Ustawia poziom szczegółowości na modelu dla doświadczeń z włączonym strumieniem instancji.

  • Kontroluje zachowanie przesyłania modelu na Models gdy włączono przesyłanie instancji.

  • Odczyt równoległy

    Główna część Model lub nil jeśli nie jest wyraźnie ustawiona.

  • Bez replikacji
    Brak możliwości dodawania do skryptu
    Odczyt równoległy

    Własność tylko dla edytora używana do skalowania modelu wokół jego osi. Ustawienie tej właściwości przeniesie skalę tak, jakby Model/ScaleTo została wezwana na niej.

  • Bez replikacji
    Odczyt równoległy

    Określa, gdzie znajduje się osiować punkt obrotowy , który nie ma ustawionego zestawu.

Właściwości odziedziczeni z: PVInstance

Właściwości

  • Bez replikacji
    Brak możliwości dodawania do skryptu
    Odczyt równoległy
  • Bez replikacji
    Brak możliwości dodawania do skryptu
    Odczyt równoległy

Metody

  • AddPersistentPlayer(playerInstance : Player):()

    Ustawia ten model, aby był trwały dla określonego gracza. ModelStreamingMode musi zostać ustawione na PersistentPerPlayer , aby zachowanie zostało zmienione w wyniku dodania.

  • Zwraca opis woluminu, który zawiera wszystkie części modelu.

  • Zwraca rozmiar najmniejszego pudełka ograniczającego, które zawiera wszystkie BaseParts w Model, zgodnie z Model.PrimaryPart, jeśli jest ustawione.

  • Zwraca wszystkie obiekty Player , które ten obiekt modelowy jest trwały dla.Zachowanie różni się w zależności od tego, czy metoda ta jest wywoływana z Script lub LocalScript.

  • Zwraca kanoniczną skalę modelu, która domyślnie wynosi 1 dla nowo utworzonych modeli i zmieni się, gdy zostanie skalowana za pomocą Model/ScaleTo.

  • MoveTo(position : Vector3):()

    Przesuwa PrimaryPart do określonej pozycji. Jeśli nie zaznaczono głównej części, zostanie użyta część korzenna modelu.

  • RemovePersistentPlayer(playerInstance : Player):()

    Sprawia, że ten model nie jest już trwały dla określonego gracza.ModelStreamingMode musi zostać ustawione na PersistentPerPlayer aby zachować się zmieniło w wyniku usunięcia.

  • ScaleTo(newScaleFactor : number):()

    Ustawia czynnik skali modelu, dostosowując rozmiar i lokalizację wszystkich potomnych instancji tak, aby miały ten czynnik skali w stosunku do ich początkowych rozmiarów i lokalizacji, gdy czynnik skali wynosił 1.

  • TranslateBy(delta : Vector3):()

    Przesuwa Model przez podany odległość Vector3, zachowując orientację modelu.Jeśli istnieje już inny BasePart lub Terrain w nowej pozycji, wtedy Model pokryje powiedziany obiekt.

Metody odziedziczeni z: PVInstance

Metody

Właściwości

Zabezpieczenia dodatku plug-in
Odczyt równoległy

ModelStreamingMode

Odczyt równoległy

PrimaryPart

Odczyt równoległy

Przykłady kodu

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

Bez replikacji
Brak możliwości dodawania do skryptu
Odczyt równoległy

WorldPivot

Bez replikacji
Odczyt równoległy

Przykłady kodu

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)

Metody

AddPersistentPlayer

()

Parametry

playerInstance: Player
Wartość domyślna: ""

Zwroty

()

GetBoundingBox


Zwroty

GetExtentsSize


Zwroty

Przykłady kodu

Model uzyskiwania rozmiaru rozszerzeń GetExtents

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

Zwroty

Instances

GetScale


Zwroty

Przykłady kodu

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

()

Parametry

position: Vector3
Wartość domyślna: ""

Zwroty

()

Przykłady kodu

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

()

Parametry

playerInstance: Player
Wartość domyślna: ""

Zwroty

()

ScaleTo

()

Parametry

newScaleFactor: number
Wartość domyślna: ""

Zwroty

()

TranslateBy

()

Parametry

delta: Vector3
Wartość domyślna: ""

Zwroty

()

Przykłady kodu

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)

Zdarzenia