Model
*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ę:
- Gdy Humanoid i Part o nazwie Głowa są powiązane z modelem, pojawi się nazwa/wyświetlenie zdrowia GUI nad modelem; zobacz Wyświetlanie nazwy/zdrowia postaci dla szczegółów.
- Jeśli pozycja części na osi Y dotknie wartości Workspace.FallenPartsDestroyHeight, a była ostatnim obiektem wewnątrz Model, model zostanie również zniszczony.
- Gdy jest używany w miejscu z Workspace.StreamingEnabled ustawionym na prawdę, wartość ModelStreamingMode kontroluje różne zachowania wokół tego, jak model i wszystkie jego potomki są replikowane i/lub usuwane z klientów.Ponadto wartość LevelOfDetail wpływa na renderowanie modelu.
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.
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
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.
Główna część Model lub nil jeśli nie jest wyraźnie ustawiona.
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.
Określa, gdzie znajduje się osiować punkt obrotowy , który nie ma ustawionego zestawu.
Właściwości
Metody
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.
Przesuwa PrimaryPart do określonej pozycji. Jeśli nie zaznaczono głównej części, zostanie użyta część korzenna modelu.
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.
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.
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
Otrzymuje pivot z PVInstance .
Przekształca PVInstance wraz z całym jego potomkiem PVInstances tak, że osie zostaną teraz umieszczone w określonym CFrame .
Właściwości
LevelOfDetail
ModelStreamingMode
PrimaryPart
Przykłady kodu
-- 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
WorldPivot
Przykłady kodu
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
GetExtentsSize
Zwroty
Przykłady kodu
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
Zwroty
GetScale
Zwroty
Przykłady kodu
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
Zwroty
Przykłady kodu
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)
TranslateBy
Parametry
Zwroty
Przykłady kodu
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)