Model
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
โมเดลเป็นวัตถุคอนเทนเนอร์ หมายถึงพวกเขาจะรวมวัตถุกัน พวกเขาดีที่สุดในการใช้คอลเลกชันของ BaseParts และมีตัวอักษรที่ขยายความสามารถ
โมเดลถูกออกแบบมาเพื่อรวมกลุ่ม ภาพเรขา หากกลุ่มของคุณไม่มีการใช้ภาพเรขาใด ๆ โปรดใช้ Scripts แทน
โมเดลที่มีส่วนประกอบของโมเดลเชื่อมต่อกันด้วยข้อต่อ (ติดตาม) มักมี PrimaryPart ชุ
โมเดลมีการใช้งานที่หลากหลายรวมถึงตัวละครผู้เล่น Roblox พวกเขายังมีพฤติกรรมที่หลากหลายซึ่งเป็นสิ่งสำคัญที่จะจำไว้:
- หากตําแหน่งของชิ้นส่วนบนแกน Y ถูกสนับสนุนด้วยมูลค่า Workspace.FallenPartsDestroyHeight และมันเป็นวัตถุสุดท้ายใน Model จะถูกทําลายด้วย
- เมื่อใช้ในสถานที่ที่มี Workspace.StreamingEnabled ตั้งค่าให้เป็น true สิ่งที่ควบคุม ModelStreamingMode จะควบคุมพฤติกรรมต่างๆ รอบ ๆ ว
เช่นเดียวกับการเคลื่อนย้ายทั้งหมด <
ตัวอย่างโค้ด
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 ตั้งอยู่
วิธีการ
ตั้งค่ารุ่นนี้ให้เป็นรุ่นที่แข็งแกร่งสำหรับผู้เล่นที่กำหนด Model.ModelStreamingMode ต้องถูกตั้งไว้ให้เป็น PersistentPerPlayer เพื่อให้การเปลี่ยนแปลงพฤติกรรมเป็นผลมาจากการเพิ่ม
รวมถึงคำอธิบายของระดับที่มีทุกส่วนของแบบ
กลับขนาดของกล่องชุดที่เล็กที่สุดที่มี BaseParts ใน Model ที่ตรงกับ Model.PrimaryPart ตั้งค่า
กลับสิ่งที่เป็น Player วัตถุทั้งหมดที่วัตถุนี้มีความยืนยันสำหรับ การเรียกคืนของวิธีนี้จาก Script หรือ LocalScript ต่างกันไปตามว่าวิธีนี้เรียกได้จาก
กลับขนาดเครื่องชี้วัดที่กำหนดไว้ของแบบจำลองซึ่งเริ่มต้นด้วย 1 สำหรับแบบจำลองที่สร้างขึ้นใหม่และจะเปลี่ยนแปลงเมื่อมันถูกเคลื่อนผ่านโดย Model/ScaleTo
ย้าย PrimaryPart ไปยังตำแหน่งที่กำหนด หากไม่มีส่วนหลักได้ระบุไว้ จะใช้ส่วนหลักของแบบจำลอง
ทำให้รุ่นนี้ไม่มีอยู่ต่อไปสำหรับผู้เล่นที่กำหนด Model.ModelStreamingMode ต้องการตั้งค่าให้เป็น PersistentPerPlayer เพื่อให้พฤติกรรมเปลี่ยนแปลงเป็นผลมาจากการลบ
ตั้งค่าตัวปรับขนาดของแบบจำลองโดยปรับขนาดและตำแหน่งของบรรพบุรุษทั้งหมดให้มีตัวปรับขนาดของแบบจำลองที่สมเหตุสมผลเมื่อตัวปรับขนาดอยู่ที่ 1
เปลี่ยน Model โดยใช้การเคลื่อนที่ Vector3 ที่กำหนดไว้ เพื่อเก็บความตรงของโมเดล หาก BasePart หรือ 1> Class.Terrain1> ม
รับ pivot ของ Class.PVInstance
แปลง PVInstance พร้อมกับบรรพบุรุษทั้งหมดของมัน PVInstances เพื่อให้ pivot ตอนนี้อยู่ที่ CFrame ที่กำหนด
คุณสมบัติ
LevelOfDetail
ตั้งระดับรายละเอียดในแบบจำลองสำหรับประสบการณ์ที่เปิดใช้งานการสตรีมมิง สตรีม เปิด
เมื่อตั้งค่าไว้ที่ StreamingMesh คุณสามารถเห็นเมชชี้นำทาง (สี คุณภาพสูง ที่หุ้มรอบทุกส่วนของเด็กของแม่มด) ได้อยู่นอกสถานที่สตรีมมิ่ง
เมื่อตั้งค่าเป็น Disabled หรือ Automatic จะไม่แสดงเมชรุ่นด้านล่าง
ModelStreamingMode
ควบคุมวิธีที่ Models ถูกสตรีมเข้าและออกเมื่อมีการเปิดใช้งานการสตรีม สตรีม เป็นเวลา การกระทําขึ้นอยู่กับ枚ที่เลือก ไม่มีผลเมื่อการสตรีมไม่เปิดใช้งาน
คุณสมบัตินี้ควรเปลี่ยนแปลงได้เฉพาะใน Studio ผ่านหน้าต่าง คุณสมบัติ เมื่อการสตรีมเปิดใช้งานได้หรือใน Scripts เท่านั้น แต่ไม่เคยใน LocalScripts (ทำให้เกิดพ�
PrimaryPart
ชี้ไปที่ส่วนหลักของ Model ส่วนหลักคือ BasePart ซึ่งเป็นที่อ้างอิงทางกายภาพสำหรับการเคลื่อนย้ายของแบบจำลองหรือวิธีการอื่น ๆ เมื่อส่วนภายในข
หมายเหตุว่า Models ไม่มี PrimaryPart ตั้งค่าโดยปกติ หากคุณกำลังสร้างโมเดลที่ต้องการให้ดำเนินการโดยการทำลายฟิสิกส์คุณควรตั้งค่
โปรดทราบว่าเมื่อการตั้งค่าสมบัตินี้กำหนดไว้ มันจะต้องเป็น Class.BasePart
กฎทั่วไปสำหรับโมเดลคือว่า:
- โมเดลที่มีชิ้นส่วนรวมกันโดยผ่านการเชื่อมต่อทางกายภาพเช่น WeldConstraints หรือ Motor6Ds ควรมีส่วนหลักที่กำหนด
- ตั้งค่า(โดยปกติจะเป็น Anchored ) โมเดลที่อยู่ในที่เดียวยกเว้นสคริปต์จะย้ายพวกเขาไปยังสถานที่ที่ไม่ได้อยู่ในที่เดียวกันไม่ต้องการ 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 และ 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 = 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 ภาย
หากไม่มี PrimaryPart สำหรับโมเดล ก็จะตรงสำหรับเกียรติยศโลก
local model = workspace.Modellocal part = workspace.Partlocal orientation, size = model:GetBoundingBox()-- ปรับขนาดและตำแหน่งชิ้นส่วนให้เท่ากับกล่องเข็มขัดของแบบpart.Size = sizepart.CFrame = orientation
ส่งค่ากลับ
GetExtentsSize
กลับขนาดของกล่องจำกัดขนาดเล็กสุดที่มีทั้งหมดของ BaseParts ใน Model หาก Class.Model
โปรดทราบว่าคุณสมบัตินี้สร้างขนาดของกล่องชุดขนาดเล็กสุดเท่านั้น และผู้พัฒนาจะต้องใช้วิธีการของตัวเองเพื่อรับตำแหน่งของกล่องชุด
ส่งค่ากลับ
ตัวอย่างโค้ด
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 ฟังก์ชันนี้กลับค่าตัวชี้วัดขนาดเค้าโครงของรุ่
ตัวปรับแต่งขนาดปัจจุบันไม่ส่งผลกระทบโดยตรงต่อขนาดของตัวอินสแตนซ์ภายใต้แบบจำลอง มันใช้สำหรับการเขียนโค้ดและการจัดการเนื้อหาเพื่อจำได้ว่าโมเดลถูกขนาดเคลื่อนเคลื่อนตามขนาดเดิมของมัน
เซสชันModel/ScaleTo ครั้งแรก โมเดลจะเก็บข้อมูลขนาดที่แน่นอนของ Instances ลูกหลังจากกา
ตัวปรับขนาดส่งผลการปฏิสัมพันธ์ของเครื่องยนต์ในหนึ่งวิธี: ตัวปรับขนาดของโมเดลจะถูกประยุกต์ให้กับของเล่นที่เล่นใน 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 ไปยังตำแหน่งที่กำหนด หากไม่มีส่วนหลักที่ระบุไว้ส่วนหลักของแบบจะถูกใช้ แต่ส่วนหลักไม่ได้เป็นสถานะที่แน่นอนและแนะนำให้ติดตั้
หากมีอุปสรรคใด ๆ ที่ผู้เรียนต้องย้ายโมเดล, เช่น Terrain หรืออื่น ๆ BaseParts โมเดลจะย้ายได้ตามแนวตั้งจนกว่าจะไม่มีอะไรใ
หมุนไม่ได้รับการเก็บรักษาเมื่อย้ายโมเดลด้วย MoveTo() หากคุณต้องการใช้ TranslateBy() หรือ PVInstance:PivotTo() หากคุณต้องการให้การ
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
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 สำหรับแบบจำลองที่สร้างขึ้นใหม่ ฟังก์ชันนี้ขยายแบบจำลองไปรอบตำแหน่ง pivot โดยเฉพาะเกี่ยวกับวิธีที่จะดูที่ปัจจัยการเคลื่อนไหวข
- ตั้งค่าปัจจุบันของตัวแบ่งเครื่องชี้วัดให้เป็นค่าที่กำหนด
- ปรับขนาดและเรียงลำดับตัวอันลูกสุดท้ายตามลำดับ
การเพิ่มขนาดสถานที่จะทำได้รอบตำแหน่ง pivot
คุณสมบัติ "เรขาคณิต" ของต้นไม้ลูกหลานจะถูกปรับขนาด ซึ่งแสดงให้เห็นว่ารวมถึงขนาดของชิ้นส่วน แต่นี่คือตัวอย่างบางส่วนของคุณสมบัติที่ปรับขนาด:
- ความยาวของข้อต่อเช่น WeldConstraints และ Class.Rope|Ropes
- ความเร็วและแรงทางกายภาพเช่น Hinge.MaxServoTorque
- สมบัติข้อมูลทางสายตาเช่นขนาดของอิเล็กตรอน
- คุณสมบัติความยาวอื่น ๆ เช่น Sound.RollOffMinDistance
พารามิเตอร์
ส่งค่ากลับ
TranslateBy
เปลี่ยน Model โดยใช้การเคลื่อนที่ Vector3 ที่กำหนดไว้ เพื่อเก็บความตรงของโมเดล หาก BasePart หรือ 1> Class.Terrain1> ม
การแปลได้ใช้ในพื้นที่โลกมากขึ้นที่จะได้รับการปรับแต่งในพื้นที่วัตถุ แม้ว่าส่วนของแบบจะเป็นไปในทิศทางที่แตกต่างกันก็จะยังคงเคลื่อนที่ตามแกนหลัก
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
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)