Model
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Mô hình là đối tượng container, có nghĩa là chúng tập hợp các đối tượng lại với nhau. Chúng được tốt nhất để đựng các bộ sưu tập của BaseParts và có một loạt các chức năng mở rộng chức năng của chúng.
Mô hình được thiết kế để diễn tả các hợp nhóm geometrical . Nếu nhóm của bạn không có giải thích geometrical, ví dụ một bộ sưu tập của Scripts, hãy sử dụng một Folder thay vào đó.
Những mô hình có các bộ phận của chúng được kết hợp với nhau bằng các khớp nối (để chúng có thể di chuyển hoặc bị phá hủy bằng cách sim hóa vật lý) thường có một bộ PrimaryPart được cài đặt, vì nó xá
Các mô hình có một loạt các ứng dụng, bao gồm các nhân vật người chơi Roblox. Chúng cũng có một loạt các hành vi độc đáo mà làm cho nổi bật:
- Khi một Class.Humanoid và một Class.Part có tên là Part xuất hiện dưới một mô hình, một GUI tên/sức khỏe sẽ xuất hiện trên mô hình; xem Tên/sức khỏe hiển thị để biết chi tiết.
- Nếu vị trí của một phần trên trục Y bị đến giá trị Workspace.FallenPartsDestroyHeight và nó là đối tượng cuối cùng trong một Model , model sẽ bị phá hủy cũng.
- Khi được sử dụng ở một nơi có Workspace.StreamingEnabled đặt thành true, giá trị của ModelStreamingMode điều khiển các hành vi khác nhau xung quanh cách mà mô hình và bất kỳ con cháu n
Giống như với tất cả các loại Instance
Mẫu mã
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)
Tóm Tắt
Thuộc Tính
Đặt cấp độ chi tiết trên mô hình cho các trải nghiệm có hỗ trợ dòng chảy trên tài nguyên.
Xác định hành vi phát sóng mô hình trên Models khi mô hình phát sóng được bật.
Phần chính của Model , hoặc nil nếu không được cài đặtmột cách rõ ràng.
Đối tượng chỉnh sửa được sử dụng để thay đổi kích thước mô hình xung quanh cầu nối của nó. Việc cài đặt đối tượng này sẽ di chuyển kích thước như thể Model/ScaleTo đã được gọi trên nó.
Xác định vị trí pivot của một Model có pivot không có set Model.PrimaryPart được đặt.
Phương Pháp
Đặt mô hình này để trở nên bền vững cho người chơi được chỉ định. Model.ModelStreamingMode phải được đặt để PersistentPerPlayer để hành động được thay đổi khi kết hợp với nhau.
Trả lại một mô tả của một khối lượng có chứa tất cả các bộ phận của một Mô hình.
Trả lại kích thước của chiếc hộp giới hạn nhỏ nhất mà chứa tất cả các BaseParts trong Model, bên cạnh với Model.PrimaryPart nếu nó được cài đặt.
Điều tra tất cả các Player đối tượng mà đối tượng này được duy trì cho. Hành vi biến đổi dựa trênWhether this method is called from a Script or a LocalScript .
Trả lại kích thước tham chiếu của mô hình, mặc định là 1 cho những mô hình mới tạo và sẽ thay đổi khi nó được thiết lập thông qua Model/ScaleTo .
Di chuyển PrimaryPart đến vị trí đã định. Nếu một phần chính chưa được xác định, phần chính của model sẽ được sử dụng.
Làm cho mô hình này không còn bền vững cho người chơi được chỉ định. Model.ModelStreamingMode phải được cài đặt thành PersistentPerPlayer để hành động này được thay đổi khi kết thúc.
Điều chỉnh yếu tố thước đo của mô hình, điều chỉnh kích thước và vị trí của tất cả các Instance con cháu của mô hình để có được yếu tố thước đo tương ứng với kích thước và vị trí ban đầu của mô hình khi yếu tố thước đo được 1.
Đổi một Model bằng cách đưa ra một Vector3 Offset, giữ gìn hướng của mô hình. Nếu một BasePart hoặc 1> Class.Terrain1> đã tồn tại ở vị trí mới thì
Nhận pivot của một PVInstance .
Biến hình PVInstance cùng với tất cả các con cháu của nó PVInstances để pivot được đặt ở CFrame đã định.
Thuộc Tính
LevelOfDetail
Đặt cấp độ chi tiết trên mô hình cho trải nghiệm với streaming hỗ trợ.
Khi đặt vào StreamingMesh, một màn hình "imposter" độ phân giải thấp (màu, mạng lưới thô thiết kế nhằm xung quanh tất cả các bộ phận con của mô hình) hiện thị bên ngoài vùng phát sóng.
Khi đặt để Disabled hoặc Automatic, thì các mạng lưới độ phân giải thấp sẽ không được hiển thị.
ModelStreamingMode
Điều khiển cách Models được phát sóng vào và ra khi phát sóng được bật. Hành vi phụ thuộc vào danh mục đã chọn. Không có hiệu lực khi phát sóng không được bật.
Điều này chỉ nên được thay đổi trong Studio qua cửa sổ Thông tin hữu dụng khi phát sóng được bật, hoặc ở Scripts , nhưng không bao giờ ở LocalScripts (điều này có thể dẫn đến hành vi không rõ định).
PrimaryPart
Chỉ mang đến phần chính của Model . Phần chính là BasePart , mà hoạt động như một tham chiếu vật lý cho trục của mô hình. Đó là, khi các bộ phận trong mô hình được di chuyển do simulazione hoặc các phương tiện khác, trục sẽ di
Lưu ý rằng Models không có PrimaryPart được cài đặt mặc định. Nếu bạn đang tạo một mô hình cần phải được hành động bởi vật lý, bạn nên thiết lập thuộc tính này trong
Lưu ý cũng rằng khi cài đặt thuộc tính này, nó phải là một BasePart đang là con cháu c
Quy tắc chung cho các mô hình là:
- Các mô hình có các bộ phận được kết hợp với nhau bằng các mối hàn vật lý như WeldConstraints hoặc Motor6Ds nên có một phần chính được giao. Ví dụ
- Các mô hình tĩnh (thường là Anchored ) mà ở một nơi nào đó trừ khi một script chuyển đến nó một cách rõ ràng không cần thiết phải có một Model.PrimaryPart và thường không bị hưởng lợi từ việc có một cài đặt.
Mẫu mã
-- 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
Đặt thuộc tính này vào các cấu hình trong các cấu hình sẽ thiết lập mô hình như thể Model/ScaleTo đã được gọi trên nó, thiết lập tất cả các Instances con cháu trong mô hình để mô hình có thể có mức độ mở rộng tương đương với kích thước nguyên bản của nó.
Đặc tính này chỉ có sẵn trong Studio và sẽ thả một lỗi nếu được sử dụng trong một Script hoặc LocalScript . Model/ScaleTo và 1> Model/GetScale1> nên được sử dụng từ các script.
WorldPivot
Điều này xác định vị trí pivot của một Model đó có không có set Model.PrimaryPart
Đối với một Model mới tạo, pivot của nó sẽ được điều trị như là trung tâm của hộp giới hạn của nội dung của nó cho đến khi lần đầu tiên tài sản Model.WorldPivot của nó được cài đ
Phổ biến nhất, di chuyển mô hình với các công cụ Studio, hoặc với các chức năng di chuyển mô hình như PVInstance:PivotTo() và Model:MoveTo() , sẽ thiết lập trụ cầu thế giới và do đó kết thúc hành vi mô hình mới này.
Mục đích của hành vi này là để cho phép mã Lua có được một pivot hợp lý chỉ bằng cách tạo một mô hình mới và phục vụ nó, tránh cần phải thiết lập Model.WorldPivot mỗi lần bạn tạo một mô hình trong mã.
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"
Mẫu mã
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)
Phương Pháp
GetBoundingBox
Hàm này trả lại một mô tả của một khối lượng mà chứa tất cả các con BasePart trong một
Nếu không có PrimaryPart cho mô hình, hộp giới hạn sẽ được thiết lập theo các trụ cơ giới hạn.
local model = workspace.Modellocal part = workspace.Partlocal orientation, size = model:GetBoundingBox()-- Thay đổi kích thước và vị trí của bộ phận bằng cách tương ứng với hộp giới hạn của mô hìnhpart.Size = sizepart.CFrame = orientation
Lợi Nhuận
GetExtentsSize
Điều chỉnh kích thước của hộp giới hạn nhỏ nhất mà chứa tất cả các BaseParts trong Model . Nếu Class.Model
Ghi chú rằng chức năng này chỉ trả về kích thước của chiếc hộp giới hạn nhỏ nhất, và nhà phát triển phải sử dụng phương pháp của riêng họ để có được vị trí của chiếc hộp giới hạn.
Lợi Nhuận
Mẫu mã
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
Khi gọi phương thức này từ một Script , nó sẽ trả lại tất cả các Player đối tượng mà mô hình này bền vững cho. Khi gọi từ một LocalScript, phương thức này chỉ kiểm tra nếu mô hình này bề
Lợi Nhuận
Một bảng với tất cả các Player đối tượng mà mô hình này đối tượng đều kiên trì.
GetScale
Các mô hình có một yếu tố thước đo liên tục, bắt đầu ở 1 cho các mô hình mới tạo và thay đổi khi mô hình được mở rộng bằng cách gọi Model/ScaleTo . Điều này trả lại yếu tố thước đo liên tục của mô hình hiện tại.
Tham số thước đo hiện tại không ảnh hưởng trực tiếp đến kích thước của Instances dưới mô hình. Nó được sử dụng cho mục đích lập trình và lập trình nội dung để nhớ rằng mô hình đã được thiết lập theo kích thước nguyên bản của nó.
Trong một phiên bản nhất định, mô hình sẽ lưu các thông tin kích thước chính xác của những Instances con cháu sau khi gọi đầu tiên Model/ScaleTo .
Yếu tố thước ảnh hưởng đến hành vi của động cơ một cách: Yếu tố thước của một mô hình sẽ được áp dụng cho các độ lùi dự phòng của animations được chơi trên một AnimationController dưới cùng đó, để các rạch động v
Lợi Nhuận
Tỷ lệ thước đo phổ biến hiện tại của mô hình.
Mẫu mã
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
Di chuyển PrimaryPart đến vị trí đã được xác định. Nếu một phần chính chưa được xác định, phần chính của mô hình sẽ được sử dụng, nhưng phần chính không định dạng và được khuyến nghị bạn lu
Nếu có bất kỳ rào chắn nào mà mô hình được di chuyển, chẳng hạn như Terrain hoặc các bộ phận BaseParts khác, mô hình sẽ được di chuyển theo chiều dọc cho đến khi không có gì trên
Lưu ý rằng không phải tất cả các lần di chuyển một mô hình với MoveTo() đều được giữ lại. Nên sử dụng TranslateBy() hoặc PVInstance:PivotTo() nếu bạn cần phải giữ lại
Tham Số
Lợi Nhuận
Mẫu mã
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
Các mô hình có một yếu tố thước đo duy nhất, bắt đầu ở 1 cho các mô hình mới tạo. Điều này kéo dài mô hình, xung quanh vị trí pivot, so với cách nó sẽ xem một yếu tố thước đo 1. Để làm điều này, nó làm hai điều:
- Điều chỉnh hệ số thước đo hiện tại của mô hình đến giá trị được xác định
- Thay đổi kích thước và định vị lại tất cả các Instances con của nó theo thứ tự
Điều chỉnh vị trí được thực hiện xung quanh vị trí trung tâm.
Tất cả các thuộc tính "geometric" của Instances con cháu sẽ được thiết lập lại. Điều này rõ ràng bao gồm các kích thước của các bộ phận, nhưng đây là một số ví dụ khác của các thuộc tính được thiết lập lại:
- Độ dài của các khớp nối như WeldConstraints và Class.Rope|Ropes
- Tốc độ và lực lý vật lý như Hinge.MaxServoTorque
- Các thuộc tính thị giác như kích thước của các thiết bị phát hạt
- Các thuộc tính khác như Sound.RollOffMinDistance
Tham Số
Lợi Nhuận
TranslateBy
Đổi một Model bằng cách đưa ra một Vector3 Offset, giữ gìn hướng của mô hình. Nếu một BasePart hoặc 1> Class.Terrain1> đã tồn tại ở vị trí mới thì
Việc dịch được áp dụng trong không gian thế giới chứ không phải trong không gian mô hình, ngay cả khi các bộ phận của mô hình được xoay theo nhiều hướng khác nhau nó vẫn sẽ di chuyển theo trục tiêu chuẩn.
Tham Số
Lợi Nhuận
Mẫu mã
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)