Model

แสดงที่เลิกใช้งานแล้ว

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

โมเดลเป็นวัตถุคอนเทนเนอร์ หมายถึงพวกเขาจะรวมวัตถุกัน พวกเขาดีที่สุดในการใช้คอลเลกชันของ BaseParts และมีตัวอักษรที่ขยายความสามารถ

โมเดลถูกออกแบบมาเพื่อรวมกลุ่ม ภาพเรขา หากกลุ่มของคุณไม่มีการใช้ภาพเรขาใด ๆ โปรดใช้ Scripts แทน

โมเดลที่มีส่วนประกอบของโมเดลเชื่อมต่อกันด้วยข้อต่อ (ติดตาม) มักมี PrimaryPart ชุ

โมเดลมีการใช้งานที่หลากหลายรวมถึงตัวละครผู้เล่น Roblox พวกเขายังมีพฤติกรรมที่หลากหลายซึ่งเป็นสิ่งสำคัญที่จะจำไว้:

  • เมื่อ Humanoid และ Part ที่มีชื่อว่า หัว ปรากฏใต้รุ่น ชื่อ/สุขภาพ GUI จะปรากฏขึ้นเหนือรุ่น ดู 2>ชื่อ/สุขภาพแสดงผล2> สำหรับรายละเอียด
  • หากตําแหน่งของชิ้นส่วนบนแกน Y ถูกสนับสนุนด้วยมูลค่า Workspace.FallenPartsDestroyHeight และมันเป็นวัตถุสุดท้ายใน Model จะถูกทําลายด้วย
  • เมื่อใช้ในสถานที่ที่มี Workspace.StreamingEnabled ตั้งค่าให้เป็น true สิ่งที่ควบคุม ModelStreamingMode จะควบคุมพฤติกรรมต่างๆ รอบ ๆ ว

เช่นเดียวกับการเคลื่อนย้ายทั้งหมด <

ตัวอย่างโค้ด

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)

สรุป

คุณสมบัติ

  • การรักษาความปลอดภัยของปลั๊กอิน
    อ่านพร้อมๆ กัน

    ตั้งค่าระดับรายละเอียดในแบบจำลองสำหรับประสบการณ์ที่มีการเปิดใช้งานการสตรีมมิ่งด้วยตัวอย่าง

  • อ่านพร้อมๆ กัน

    ควบคุมพฤติกรรมการสตรีมโมเดลบน Models เมื่อการสตรีมเครื่องมือเปิดใช้งาน

  • อ่านพร้อมๆ กัน

    ส่วนหลักของ Model หรือ nil ถ้าไม่ได้ตั้งค่าไว้อย่างชัดเจน

  • ไม่ซ้ำ
    ไม่สามารถเขียนสคริปต์
    อ่านพร้อมๆ กัน

    สมบัติสินค้าเฉพาะที่ใช้เพื่อปรับแต่งรุ่นรอบ ๆ แกนของมัน การตั้งค่าคุณสมบัตินี้จะย้ายความเคลื่อนไหวของเครื่องชั่งเมื่อ Model/ScaleTo ถูกเรียกบนมัน

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    กำหนดตำแหน่งที่โค้งของ Model ซึ่ง ไม่ มีชุด Model.PrimaryPart ตั้งอยู่

คุณสมบัติรับทอดมาจากPVInstance
  • ไม่ซ้ำ
    ไม่สามารถเขียนสคริปต์
    อ่านพร้อมๆ กัน
  • ไม่ซ้ำ
    ไม่สามารถเขียนสคริปต์
    อ่านพร้อมๆ กัน

วิธีการ

  • AddPersistentPlayer(playerInstance : Player):void

    ตั้งค่ารุ่นนี้ให้เป็นรุ่นที่แข็งแกร่งสำหรับผู้เล่นที่กำหนด Model.ModelStreamingMode ต้องถูกตั้งไว้ให้เป็น PersistentPerPlayer เพื่อให้การเปลี่ยนแปลงพฤติกรรมเป็นผลมาจากการเพิ่ม

  • รวมถึงคำอธิบายของระดับที่มีทุกส่วนของแบบ

  • กลับขนาดของกล่องชุดที่เล็กที่สุดที่มี BaseParts ใน Model ที่ตรงกับ Model.PrimaryPart ตั้งค่า

  • กลับสิ่งที่เป็น Player วัตถุทั้งหมดที่วัตถุนี้มีความยืนยันสำหรับ การเรียกคืนของวิธีนี้จาก Script หรือ LocalScript ต่างกันไปตามว่าวิธีนี้เรียกได้จาก

  • กลับขนาดเครื่องชี้วัดที่กำหนดไว้ของแบบจำลองซึ่งเริ่มต้นด้วย 1 สำหรับแบบจำลองที่สร้างขึ้นใหม่และจะเปลี่ยนแปลงเมื่อมันถูกเคลื่อนผ่านโดย Model/ScaleTo

  • MoveTo(position : Vector3):void

    ย้าย PrimaryPart ไปยังตำแหน่งที่กำหนด หากไม่มีส่วนหลักได้ระบุไว้ จะใช้ส่วนหลักของแบบจำลอง

  • RemovePersistentPlayer(playerInstance : Player):void

    ทำให้รุ่นนี้ไม่มีอยู่ต่อไปสำหรับผู้เล่นที่กำหนด Model.ModelStreamingMode ต้องการตั้งค่าให้เป็น PersistentPerPlayer เพื่อให้พฤติกรรมเปลี่ยนแปลงเป็นผลมาจากการลบ

  • ScaleTo(newScaleFactor : number):void

    ตั้งค่าตัวปรับขนาดของแบบจำลองโดยปรับขนาดและตำแหน่งของบรรพบุรุษทั้งหมดให้มีตัวปรับขนาดของแบบจำลองที่สมเหตุสมผลเมื่อตัวปรับขนาดอยู่ที่ 1

  • TranslateBy(delta : Vector3):void

    เปลี่ยน Model โดยใช้การเคลื่อนที่ Vector3 ที่กำหนดไว้ เพื่อเก็บความตรงของโมเดล หาก BasePart หรือ 1> Class.Terrain1> ม

วิธีการรับทอดมาจากPVInstance
  • เขียนพร้อมๆ กัน

    รับ pivot ของ Class.PVInstance

  • PivotTo(targetCFrame : CFrame):void

    แปลง PVInstance พร้อมกับบรรพบุรุษทั้งหมดของมัน PVInstances เพื่อให้ pivot ตอนนี้อยู่ที่ CFrame ที่กำหนด

คุณสมบัติ

การรักษาความปลอดภัยของปลั๊กอิน
อ่านพร้อมๆ กัน

ตั้งระดับรายละเอียดในแบบจำลองสำหรับประสบการณ์ที่เปิดใช้งานการสตรีมมิง สตรีม เปิด

เมื่อตั้งค่าไว้ที่ StreamingMesh คุณสามารถเห็นเมชชี้นำทาง (สี คุณภาพสูง ที่หุ้มรอบทุกส่วนของเด็กของแม่มด) ได้อยู่นอกสถานที่สตรีมมิ่ง

เมื่อตั้งค่าเป็น Disabled หรือ Automatic จะไม่แสดงเมชรุ่นด้านล่าง

ModelStreamingMode

อ่านพร้อมๆ กัน

ควบคุมวิธีที่ Models ถูกสตรีมเข้าและออกเมื่อมีการเปิดใช้งานการสตรีม สตรีม เป็นเวลา การกระทําขึ้นอยู่กับ枚ที่เลือก ไม่มีผลเมื่อการสตรีมไม่เปิดใช้งาน

คุณสมบัตินี้ควรเปลี่ยนแปลงได้เฉพาะใน Studio ผ่านหน้าต่าง คุณสมบัติ เมื่อการสตรีมเปิดใช้งานได้หรือใน Scripts เท่านั้น แต่ไม่เคยใน LocalScripts (ทำให้เกิดพ�

PrimaryPart

อ่านพร้อมๆ กัน

ชี้ไปที่ส่วนหลักของ Model ส่วนหลักคือ BasePart ซึ่งเป็นที่อ้างอิงทางกายภาพสำหรับการเคลื่อนย้ายของแบบจำลองหรือวิธีการอื่น ๆ เมื่อส่วนภายในข

หมายเหตุว่า Models ไม่มี PrimaryPart ตั้งค่าโดยปกติ หากคุณกำลังสร้างโมเดลที่ต้องการให้ดำเนินการโดยการทำลายฟิสิกส์คุณควรตั้งค่

โปรดทราบว่าเมื่อการตั้งค่าสมบัตินี้กำหนดไว้ มันจะต้องเป็น Class.BasePart

กฎทั่วไปสำหรับโมเดลคือว่า:

  • โมเดลที่มีชิ้นส่วนรวมกันโดยผ่านการเชื่อมต่อทางกายภาพเช่น WeldConstraints หรือ Motor6Ds ควรมีส่วนหลักที่กำหนด
  • ตั้งค่า(โดยปกติจะเป็น Anchored ) โมเดลที่อยู่ในที่เดียวยกเว้นสคริปต์จะย้ายพวกเขาไปยังสถานที่ที่ไม่ได้อยู่ในที่เดียวกันไม่ต้องการ Model.PrimaryPart และมักจะ

ตัวอย่างโค้ด

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

ไม่ซ้ำ
ไม่สามารถเขียนสคริปต์
อ่านพร้อมๆ กัน

การตั้งค่าค่านี้ในแถบโปรพี่สามารถปรับแต่งรุ่นโดยใช้เครื่องชี้วัดที่เรียกว่า Model/ScaleTo โดยการเรียกรุ่นทั้งหมดในแบบของมันเพื่อให้มันมีขนาดเครื่องชี้วัดที่กำหนดเองโดยเฉลี่ย

สมบัตินี้สามารถใช้ได้ใน Studio เท่านั้นและจะแสดงข้อผิดพลาดหากใช้ใน Script หรือ LocalScript นอกจากนี้ Model/ScaleTo และ 1> Model/GetScale1> จะต้องใช้จากสคริป

WorldPivot

ไม่ซ้ำ
อ่านพร้อมๆ กัน

สมบัตินี้กำหนดตำแหน่งของ pivot ของ Model ซึ่งทำ ไม่ มี set

สำหรับ Model ที่เพิ่งสร้างขึ้นใหม่ จะมีการปรับแต่งพิเศษในกลางของกล่องเกณฑ์ของเนื้อหาจนกว่าสมบัติของเนื้อหาจะตั้งค่าคุณสมบัติ Class.Model.WorldPivot

โดยทั่วไป, การย้ายรุ่นด้วยเครื่องมือ Studio หรือการเคลื่อนที่รุ่นด้วยคุณสมบัติการเคลื่อนที่เช่น PVInstance:PivotTo() และ Model:MoveTo() จะตั้งโลก pivot และจบการเปลี่ยนแปลงรุ่นน

วัตถุประสงค์ของการกระทำนี้คือเพื่อให้ Lua รหัสModel.WorldPivot ทุกครั้งที่คุณสร้


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"

ตัวอย่างโค้ด

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)

วิธีการ

AddPersistentPlayer

void

พารามิเตอร์

playerInstance: Player
ค่าเริ่มต้น: "nil"

ส่งค่ากลับ

void

GetBoundingBox

ฟังก์ชันนี้กลับคำอธิบายของระดับที่มีลูกหลานทั้งหมดของ BasePart ภาย

หากไม่มี PrimaryPart สำหรับโมเดล ก็จะตรงสำหรับเกียรติยศโลก


local model = workspace.Model
local part = workspace.Part
local orientation, size = model:GetBoundingBox()
-- ปรับขนาดและตำแหน่งชิ้นส่วนให้เท่ากับกล่องเข็มขัดของแบบ
part.Size = size
part.CFrame = orientation

ส่งค่ากลับ

A CFrame ที่แทนที่ตำแหน่งของเสียงตามด้วย a Vector3 ที่แทนที่ขนาดของเสียง

GetExtentsSize

กลับขนาดของกล่องจำกัดขนาดเล็กสุดที่มีทั้งหมดของ BaseParts ใน Model หาก Class.Model

โปรดทราบว่าคุณสมบัตินี้สร้างขนาดของกล่องชุดขนาดเล็กสุดเท่านั้น และผู้พัฒนาจะต้องใช้วิธีการของตัวเองเพื่อรับตำแหน่งของกล่องชุด


ส่งค่ากลับ

ขนาด Vector3 ของ Model

ตัวอย่างโค้ด

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

เมื่อใช้วิธีนี้จาก Script จะส่งคืนวัตถุทั้งหมดของ Player ที่เป็นรุ่นที่มีอยู่ เมื่อใช้วิธีนี้จาก LocalScript จะตรวจสอบว่ารุ่นนี้มีควา


ส่งค่ากลับ

Instances

ตารางที่มีทุก Player วัตถุที่ตัวนี้มีความยืนยันสำหรับ

GetScale

รุ่นมีตัวชี้วัดขนาดเค้าโครงที่คงที่ซึ่งเริ่มต้นที่ 1 สำหรับรุ่นที่สร้างขึ้นใหม่และเปลี่ยนแปลงเมื่อรุ่นถูกขนาดโดยการโทร Model/ScaleTo ฟังก์ชันนี้กลับค่าตัวชี้วัดขนาดเค้าโครงของรุ่

ตัวปรับแต่งขนาดปัจจุบันไม่ส่งผลกระทบโดยตรงต่อขนาดของตัวอินสแตนซ์ภายใต้แบบจำลอง มันใช้สำหรับการเขียนโค้ดและการจัดการเนื้อหาเพื่อจำได้ว่าโมเดลถูกขนาดเคลื่อนเคลื่อนตามขนาดเดิมของมัน

เซสชันModel/ScaleTo ครั้งแรก โมเดลจะเก็บข้อมูลขนาดที่แน่นอนของ Instances ลูกหลังจากกา

ตัวปรับขนาดส่งผลการปฏิสัมพันธ์ของเครื่องยนต์ในหนึ่งวิธี: ตัวปรับขนาดของโมเดลจะถูกประยุกต์ให้กับของเล่นที่เล่นใน animations ที่เล่นใน AnimationController ภายใ


ส่งค่ากลับ

ตัวปรับเครื่องชี้วัดที่กำหนดของโมเดล

ตัวอย่างโค้ด

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

ย้าย PrimaryPart ไปยังตำแหน่งที่กำหนด หากไม่มีส่วนหลักที่ระบุไว้ส่วนหลักของแบบจะถูกใช้ แต่ส่วนหลักไม่ได้เป็นสถานะที่แน่นอนและแนะนำให้ติดตั้

หากมีอุปสรรคใด ๆ ที่ผู้เรียนต้องย้ายโมเดล, เช่น Terrain หรืออื่น ๆ BaseParts โมเดลจะย้ายได้ตามแนวตั้งจนกว่าจะไม่มีอะไรใ

หมุนไม่ได้รับการเก็บรักษาเมื่อย้ายโมเดลด้วย MoveTo() หากคุณต้องการใช้ TranslateBy() หรือ PVInstance:PivotTo() หากคุณต้องการให้การ

พารามิเตอร์

position: Vector3

The Vector3 ที่ Model ย้ายไป


ส่งค่ากลับ

void

ตัวอย่างโค้ด

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

พารามิเตอร์

playerInstance: Player
ค่าเริ่มต้น: "nil"

ส่งค่ากลับ

void

ScaleTo

void

แบบจำลองมีตัวชี้วัดขนาดเค้าโครงที่คงที่ซึ่งเริ่มต้นที่ 1 สำหรับแบบจำลองที่สร้างขึ้นใหม่ ฟังก์ชันนี้ขยายแบบจำลองไปรอบตำแหน่ง pivot โดยเฉพาะเกี่ยวกับวิธีที่จะดูที่ปัจจัยการเคลื่อนไหวข

  • ตั้งค่าปัจจุบันของตัวแบ่งเครื่องชี้วัดให้เป็นค่าที่กำหนด
  • ปรับขนาดและเรียงลำดับตัวอันลูกสุดท้ายตามลำดับ

การเพิ่มขนาดสถานที่จะทำได้รอบตำแหน่ง pivot

คุณสมบัติ "เรขาคณิต" ของต้นไม้ลูกหลานจะถูกปรับขนาด ซึ่งแสดงให้เห็นว่ารวมถึงขนาดของชิ้นส่วน แต่นี่คือตัวอย่างบางส่วนของคุณสมบัติที่ปรับขนาด:

  • ความยาวของข้อต่อเช่น WeldConstraints และ Class.Rope|Ropes
  • ความเร็วและแรงทางกายภาพเช่น Hinge.MaxServoTorque
  • สมบัติข้อมูลทางสายตาเช่นขนาดของอิเล็กตรอน
  • คุณสมบัติความยาวอื่น ๆ เช่น Sound.RollOffMinDistance

พารามิเตอร์

newScaleFactor: number

ส่งค่ากลับ

void

TranslateBy

void

เปลี่ยน Model โดยใช้การเคลื่อนที่ Vector3 ที่กำหนดไว้ เพื่อเก็บความตรงของโมเดล หาก BasePart หรือ 1> Class.Terrain1> ม

การแปลได้ใช้ในพื้นที่โลกมากขึ้นที่จะได้รับการปรับแต่งในพื้นที่วัตถุ แม้ว่าส่วนของแบบจะเป็นไปในทิศทางที่แตกต่างกันก็จะยังคงเคลื่อนที่ตามแกนหลัก

พารามิเตอร์

delta: Vector3

The Vector3 เพื่อแปล Class.Model โดย.


ส่งค่ากลับ

void

ตัวอย่างโค้ด

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)

อีเวนต์