Model

Hiển Thị Bản Đã Lỗi Thời

*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ã

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)

Tóm Tắt

Thuộc Tính

  • Bảo Mật Plugin
    Đọc Song Song

    Đặ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.

  • Đọc Song Song

    Phần chính của Model , hoặc nil nếu không được cài đặtmột cách rõ ràng.

  • Không Sao Chép
    Không Thể Viết Kịch Bản
    Đọc Song Song

    Đố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ó.

  • Không Sao Chép
    Đọc Song Song

    Xác định vị trí pivot của một Model có pivot không có set Model.PrimaryPart được đặt.

Thuộc Tính kế thừa từ PVInstance
  • Không Sao Chép
    Không Thể Viết Kịch Bản
    Đọc Song Song
  • Không Sao Chép
    Không Thể Viết Kịch Bản
    Đọc Song Song

Phương Pháp

  • AddPersistentPlayer(playerInstance : Player):void

    Đặ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 .

  • MoveTo(position : Vector3):void

    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.

  • RemovePersistentPlayer(playerInstance : Player):void

    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.

  • ScaleTo(newScaleFactor : number):void

    Đ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.

  • TranslateBy(delta : Vector3):void

    Đổ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ì

Phương Pháp kế thừa từ PVInstance

Thuộc Tính

Bảo Mật Plugin
Đọc Song Song

Đặ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

Đọc Song Song

Đ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

Đọc Song Song

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ã

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

Không Sao Chép
Không Thể Viết Kịch Bản
Đọc Song Song

Đặ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

Không Sao Chép
Đọc Song Song

Đ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()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 = 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"

Mẫu mã

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)

Phương Pháp

AddPersistentPlayer

void

Tham Số

playerInstance: Player
Giá Trị Mặc Định: "nil"

Lợi Nhuận

void

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.Model
local part = workspace.Part
local 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ình
part.Size = size
part.CFrame = orientation

Lợi Nhuận

Một CFrame đại diện cho hướng của khối lượng được theo sau bởi một Vector3 đại diện cho kích thước của khối lượng.

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

Kích thước Vector3 của Class.Model .

Mẫu mã

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

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

Instances

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ã

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

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ố

position: Vector3

The Vector3 the Model is moved to.


Lợi Nhuận

void

Mẫu mã

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

Tham Số

playerInstance: Player
Giá Trị Mặc Định: "nil"

Lợi Nhuận

void

ScaleTo

void

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ư WeldConstraintsClass.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ố

newScaleFactor: number

Lợi Nhuận

void

TranslateBy

void

Đổ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ố

delta: Vector3

The Vector3 to translate the Model by.


Lợi Nhuận

void

Mẫu mã

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)

Sự Kiện