모델은 컨테이너 개체이며 개체를 그룹화하는 데 사용됩니다. 그들은 일반적으로 BaseParts 의 컬렉션을 보관하는 데 사용됩니다. 그들은 기능을 확장하기 위해 여러 기능을 가지고 있습니다.
모델은 기하학적 그룹화를 나타내기 위한 것입니다. 그룹화에 기하학적 해석이 없는 경우, 예를 들어 Class.Script|Scripts 컬렉션 같이, Scripts를 대신 사용하십시오.
연결된 부품이 있는 모델의 경우 주어진 부품이 물리적 시뮬레이션을 통해 이동하거나 파괴될 수 있기 때문에 주로 PrimaryPart 를 설정합니다. 모델 내에서 피벗과 바인딩 상자가 "팔로우"하는 부품을 지정하는 주요
모델은 Roblox 플레이어 캐릭터를 포함한 다양한 애플리케이션을 사용합니다. 또한 중요한 사항을 유지하기 위해 다양한 고유한 동작을 가지고 있습니다.
- Class.Humanoid 및 Part의 이름이 머리 인 모델에 부모로 지정되면 모델 위에 이름/체력 GUI가 나타납니다. 자세한 내용은 1>캐릭터 이름/체력 표시1>에 참조하십시오.
- Class.Workspace.StreamingEnabled를 진실로 설정하면 ModelStreamingMode의 값이 클라이언트에서 모델과 모든 후손을 복제하고/또는 제거하는 방법에 대한 여러 가지 동작을 제어합니다. 또한 Class.Model.LevelOfDetail|LevelOfDetail
코드 샘플
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)
요약
속성
인스턴스 스트림이 활성화된 경험에 대한 모델의 세부 정보 수준을 설정합니다.
Class.Model|Models 인스턴스 스트림이 활성화된 경우 모델 스트림 동작을 제어합니다.
명시적으로 설정되지 않은 경우 Model 또는 nil입니다.
모델 주위의 피벗을 조정하는 편집기 전용 속성입니다. 이 속성을 설정하면 피벗이 있는 것처럼 Model/ScaleTo 가 호출됩니다.
Class.Model의 피벗이 어디에 있는지 결정합니다. 이 피벗은 아님 이 세트에 있는 Model.PrimaryPart입니다.
메서드
이 모델을 지정된 플레이어에게 영구적으로 유지하도록 합니다. Model.ModelStreamingMode 는 추가를 결과로 변경하는 동안 PersistentPerPlayer 에 설정해야 합니다.
모델의 모든 부분이 포함된 볼륨의 설명을 반환합니다.
Class.Model의 모든 Model를 포함하는 가장 작은 바인딩 상자의 크기를 반환합니다. Model.PrimaryPart가 설정된 경우 1>Class.Model1>와 함께.
이 모델 개체가 지속되는 모든 Player 개체를 반환합니다. 동작은 이 메서드가 Script 또는 LocalScript에서 호출되는지에 따라 변경됩니다.
새로 생성된 모델의 경우 기본적으로 1이 되지만 Model/ScaleTo 를 통해 크기를 조정하면 변경됩니다.
이동 하는 PrimaryPart 를 지정된 위치로. 주 부품이 지정되지 않은 경우 모델의 기본 부품이 사용됩니다.
이 모델은 더 이상 지속되지 않습니다. Model.ModelStreamingMode 는 제거된 플레이어의 동작에 대해 PersistentPerPlayer 로 설정해야 합니다.
모델의 크기 조정 요소를 설정하고, 모든 후손 인스턴스의 크기를 조정하여 크기 요소가 모델의 초기 크기와 위치에 비례하여 크기 요소가 1인 경우 모델의 크기를 조정합니다.
Class.Model을 주어진 Vector3 오프셋으로 이동하여 모델의 방향을 유지합니다. 다른 BasePart 또는 1>Class.Terrain1>이 이미 새로운 위치에 있으면 4>Class.Model4>는 해당 오프셋을
Class.PVInstance의 피벗을 가져옵니다.
모든 후손 PVInstance 과 함께 폼 PVInstances 으로 핵심이 이제 CFrame 에 위치 하도록 변환 합니다.
속성
LevelOfDetail
음성 스트리밍 이 활성화된 경험에 대한 모델의 세부 정보 수준을 설정합니다.
StreamingMesh 설정을 StreamingMesh 로 설정하면 모든 자식 부품의 둘레를 감싸는 색상, 거친 메쉬(색상, 거친 메쉬)가 스트리밍 범위 밖에 렌더링됩니다.
Entity.ModelLevelOfDetail|Disabled 또는 Automatic로 설정하면 해당 메쉬가 표시되지 않습니다.
ModelStreamingMode
Class.Model|Models 은 스트림이 활성화된 인스턴스에서 스트림을 수신하고 스트림을 수신하는 방식을 제어합니다. 이 동작은 선택된 열거형에 따라 다릅니다. 스트림이 활성화되지 않은 경우에는 효과가 없습니다.
이 속성은 스트리밍이 활성화된 때 Studio의 속성 창을 통해만 변경되어야 하며, Scripts 에서는 사용되지 않아야 합니다(정의된 동작을 결과로 할 수 있음).
PrimaryPart
Class.Model 의 주요 부분을 가리킵니다. 주요 부분은 BasePart 이며, 모델의 피벗을 물리적으로 참조하는 역할을 합니다. 즉, 모델 내의 부품이 물리적 시뮬레이션 또는 기타 방법으로 이동된 경우, 피벗은 주요 부분과 동기화됩니
참고 Models 에는 기본적으로 PrimaryPart 이 설정되지 않습니다. 물리학에서 작동해야 하는 모델을 생성하는 경우 Studio 또는 스크립트 내에서 이 속성을 수동으로 설정해야 합니다. 주요 부품이 아닌 경우 피벗은
또한 이 속성을 설정할 때 모델의 하위인 BasePart 이어야 합니다. Model.PrimaryPart 이 아닌
모델에 대한 일반적인 규칙은 다음과 같습니다:
- Class.WeldConstructor|WeldSeconds 또는 Motor6Ds와 같은 물리적 연결을 통해 부품이 함께 연결된 모델의 경우 주 부품이 할당되어야 합니다. 예를 들어, Roblox 캐릭터 모델의 경우
- 스크립트가 명시적으로 이동하지 않는 한 한 설정유지되는 정적(일반적으로 Class.BasePart.Anchored|Anchored) 모델은 Class.Model.PrimaryPart 이 필요하지 않습니다.
코드 샘플
-- 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
이 속성을 속성 창에 설정하면 Model/ScaleTo 가 호출된 것처럼 모델이 크기를 조정하고, 모델에 있는 모든 하위 인스턴스를 조정하여 모델이 원래 크기와 관련하여 지정된 크기 요소를 가지도록 합니다.
이 속성은 Studio에서만 사용할 수 있으며 Script 또는 LocalScript 에서 사용하면 오류가 발생합니다. Model/ScaleTo 및 2>Model/GetScale2> 스크립트에서는 사용하지 마십시오.
WorldPivot
이 속성은 Model 의 피벗이 어디에 있는지 결정합니다. 이 에 없음 이 세트 Class.
새로 생성된 Model 의 경우, 그 중심이 첫 번째 시간까지 Class.Model.WorldPivot 속성이 설정될 때까지 바인딩 상자의 중심으로 취급됩니다. 세계 중심이 처음 설정된 후, 이 초기 동작을 복원할 수 없습니다.
대부분의 경우 Studio 도구로 모델을 이동하거나 PVInstance:PivotTo() 및 Model:MoveTo()와 같은 모델 이동 함수를 사용하여 세계를 피벗하여 이 새로운 모델 행동을 종료합니다.
이 동작의 목적은 Lua 코드가 모델을 새로 만들고 부모 개체를 부모 개체에 지정하여 합리적인 피벗을 얻을 수 있도록 하는 것입니다, 모델을 코드에서 만들 때마다 Model.WorldPivot 을 명시적으로 설정할 필요가 없습니다.
local model = Instance.new("Model")workspace.BluePart.Parent = modelworkspace.RedPart.Parent = modelmodel.Parent = workspaceprint(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"
코드 샘플
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)
메서드
GetBoundingBox
이 함수는 BasePart 자식이 모두 포함된 볼륨의 설명을 반환합니다. 볼륨의 방향은 Class.Model.
모델에 대해 PrimaryPart가 없으면 바인딩 상자가 세계 축에 맞춰 맞춥니다.
local model = workspace.Modellocal part = workspace.Partlocal orientation, size = model:GetBoundingBox()-- 모델 바인딩 상자와 동일한 크기 및 위치의 부품 조정part.Size = sizepart.CFrame = orientation
반환
Datatype.CFrame 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향 복셀 음향
GetExtentsSize
Class.Model 에서 모든 Class.BasePart|BaseParts 을 포함하는 가장 작은 바인딩 박스의 크기를 반환합니다. 만약 Class.Model.PrimaryPart 가 존재한다면,
이 함수는 가장 작은 바인딩 박스의 크기만 반환하므로 개발자는 바인딩 박스의 위치를 얻기 위해 자체 메서드를 사용해야 합니다.
반환
코드 샘플
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
이 메서드를 Script에서 호출하면 이 모델이 지속되는 모든 Player 개체를 반환합니다. LocalScript에서 호출하면 이 메서드는 이 모델이 지속되는 경우에만 검사합니다.
반환
이 모델 개체가 지속되는 모든 Player 개체가 있는 테이블.
GetScale
모델에는 지속적인 캐논 크기 조정 요소가 포함되어 있으며, 새로 생성된 모델과 모델이 크기를 조정할 때 시작하는 1에 대한 캐논 크기 조정 요소가 포함되어 있습니다. 이 함수는 모델의 현재 캐논 크기 조정 요소를 반환합니다.
현재 크기 요소는 직접 모델 아래의 인스턴스 크기에 영향을 주지 않습니다. 이는 콘텐츠 작성 및 스크립트 작성 목적을 위해 모델의 크기를 원래 크기와 비교하여 기억하는 데 사용됩니다.
지정된 세션 내에서 모델은 첫 번째 Model/ScaleTo 호출 후 후손 인스턴스의 정확한 원래 크기 정보를 캐시합니다. 즉, ScaleTo(x)
크기 요소는 엔진 동작에 하나의 방법으로 영향을 미칩니다. 모델의 크기 요소는 animations 를 플레이하는 AnimationController 의 공동 오프셋에 적용되므로 애니메이션 리그가 크기를 조정할 때 올바르게 애니메이션을 재생할 수 있습니다.
반환
모델의 현재 캐논 크기 요소입니다.
코드 샘플
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 를 지정 된 위치로 이동합니다. 주 부품이 지정되지 않은 경우 모델의 기본 부품이 사용되지만, 기본 부품은 결정적이지 않으며 모델을 사용하는 경우 MoveTo() 에 주 부품을 항상 설정하는
모델이 이동되어야 하는 장애물이 있으면 이동 모델이 모두 올라갈 때까지 모델이 가로로 올라갈 수 있습니다. 이 동작이 원하지 않는 경우 Terrain 대신 BaseParts 이 사용됩니다.
Class.Model:MoveTo()|MoveTo() 로 모델을 이동할 때 회전은 유지되지 않습니다. 현재 모델의 회전을 유지해야 하는 경우 TranslateBy() 또는 PVInstance:PivotTo() 을 사용하는 것이 좋습니다.
매개 변수
Class.Model 의 다음에 이동합니다.
반환
코드 샘플
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)
ScaleTo
모델에는 지속적인 캐논 크기 조정 요소가 포함되어 있으며, 새로 생성된 모델의 경우 1로 시작합니다. 이 함수는 모델을 조정하고, 피벗 위치에 대해 1의 크기 조정 요소에 대해 스케일링합니다. 이를 수행하려면 다음을 두 가지 수행합니다.
- 모델의 현재 크기 조정 요소를 지정된 값으로 설정합니다.
- 모든 후손 인스턴스는 해당 크기로 다시 조정됩니다.
위치 크기 조정은 피벗 위치에서 수행됩니다.
하위 인스턴스의 "기하학적"속성은 모두 크기를 조정합니다. 여기에는 부품의 크기가 포함되지만, 다음은 크기를 조정하는 다른 속성의 예입니다.
- 길이가 WeldConstraints 및 Class.Rope|Ropes와 같은 연결의 길이
- 물리적 속도 및 힘, 예를 들어 Hinge.MaxServoTorque
- 입자 방출기의 크기와 같은 시각적 속성
- 다른 길이 속성, Sound.RollOffMinDistance
매개 변수
반환
TranslateBy
Class.Model을 주어진 Vector3 오프셋으로 이동하여 모델의 방향을 유지합니다. 다른 BasePart 또는 1>Class.Terrain1>이 이미 새로운 위치에 있으면 4>Class.Model4>는 해당 오프셋을
세계 공간에 번역이 적용되므로 모델의 부품이 다르게 정렬되더라도 표준 축을 따라 여전히 이동합니다.
매개 변수
반환
코드 샘플
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)