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.

Các mô hình là đối tượng thùng chứa, có nghĩa là chúng tổ chức các đối tượng lại với nhau.Chúng được sử dụng tốt nhất để giữ bộ sưu tập của BaseParts và có một số chức năng mở rộng chức năng của chúng.

Các mô hình được dự định để đại diện cho nhóm hình học .Nếu phân nhóm của bạn không có giải thích hình học, ví dụ một bộ sưu tập của Scripts , hãy sử dụng Folder thay thế.

Các mô hình mà các bộ phận thành phần được kết hợp với các khớp (để chúng có thể di chuyển xung quanh hoặc bị phá hủy thông qua mô phỏng vật lý) thường có một bộ PrimaryPart được đặt, vì nó xác định phần nào trong mô hình mà bánh xe và hộp giới hạn sẽ "theo dõi" như mô hình di chuyển.Các mô hình tĩnh ở một nơi không được hưởng lợi từ việc có một bộ phần chính.

Các mô hình có phạm vi ứng dụng rộng, bao gồm cả nhân vật người chơi Roblox.Họ cũng có một số hành vi độc đáo cần lưu ý:

  • Khi một Humanoid và một Part có tên là Đầu được gá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/Hiển thị sức khỏe nhân vật để biết chi tiết.
  • Nếu vị trí của một phần trên trục Y bị ảnh hưởng bởi giá trị Workspace.FallenPartsDestroyHeight , và nó là đối tượng cuối cùng bên trong một Model, mô hình cũng sẽ bị phá hủy.
  • 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ô hình và bất kỳ con cháu nào được sao chép và/hoặc xóa khỏi khách hàng.Ngoài ra, giá trị của LevelOfDetail ảnh hưởng đến việc hiển thị mô hình.

Như với tất cả các loại Instance kiểu, thực tế là một cha mẹ Model được sao lưu cho một khách hàng không đảm bảo rằng tất cả con của nó được sao lưu.Điều này rất quan trọng nếu các ví dụ này được truy cập bởi mã chạy trên máy khách, chẳng hạn như trong một LocalScript .Sử dụng ModelStreamingMode với các giá trị như Atomic có thể đảm bảo rằng toàn bộ mô hình và tất cả con cháu của nó hiện diện nếu mô hình cha hiện diện trên máy khách, hoặc bạn có thể sử dụng WaitForChild() khi sự nhất quán không được mong muốn.

Mẫu mã

The following sample includes a basic function that takes a table of objects and parents them into a new Model, returning that Model.

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ó bật phát trực tiếp cơ sở dữ liệu.

  • Kiểm soát hành vi phát trực tiếp mô hình trên Models khi bật phát trực tiếp instancia.

  • Đọc Song Song

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

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

    Tính năng chỉ dành cho biên tập viên được sử dụng để mở rộng mô hình xung quanh trục của nó. Việc đặt tính năng này sẽ di chuyển quy mô như thể Model/ScaleTo đã được gọi trên nó.

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

    Xác định nơi mà trục của một Model mà không có không có một bộ Model.PrimaryPart nằm.

Thuộc Tính kế thừa từ PVInstance

Thuộc Tính

  • 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):()

    Bộ này đặt mô hình này là vĩnh viễn cho người chơi được chỉ định. ModelStreamingMode phải được đặt thành PersistentPerPlayer để hành vi được thay đổi là kết quả của việc thêm.

  • Trả về một mô tả về một khối lượng chứa tất cả các phần của một mô hình.

  • Trả về kích thước của hộp gắn kết nhỏ nhất chứa tất cả các BaseParts trong Model, cùng với Model.PrimaryPart nếu nó được đặt.

  • Trả lại tất cả các đối tượng Player được vật phẩm mô hình này lưu trữ.Hành vi thay đổi tùy thuộc vào việc phương pháp này được gọi từ một Script hoặc một LocalScript .

  • Trả về thước đo chính thống của mô hình, mặc định là 1 cho các mô hình được tạo mới và sẽ thay đổi khi nó được thu nhỏ qua Model/ScaleTo .

  • MoveTo(position : Vector3):()

    Di chuyển PrimaryPart đến vị trí đã cho. Nếu một phần chính chưa được xác định, phần rễ của mô hình sẽ được sử dụng.

  • RemovePersistentPlayer(playerInstance : Player):()

    Làm cho mô hình này không còn lưu trữ cho người chơi được chỉ định.ModelStreamingMode phải được đặt thành PersistentPerPlayer để hành vi được thay đổi là kết quả của việc loại bỏ.

  • ScaleTo(newScaleFactor : number):()

    Đặt 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 Instances con cháu sao cho có yếu tố thước đo tương đối với kích thước và vị trí ban đầu của chúng khi yếu tố thước đo là 1.

  • TranslateBy(delta : Vector3):()

    Thay đổi một Model bởi độ trừ Vector3 cho được, giữ nguyên hướng của mô hình.Nếu một BasePart hoặc Terrain đã tồn tại ở vị trí mới thì Model sẽ chồng lên đối tượng đã nói.

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

Phương Pháp

Thuộc Tính

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

ModelStreamingMode

Đọc Song Song

PrimaryPart

Đọc Song Song

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

WorldPivot

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

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

()

Tham Số

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

Lợi Nhuận

()

GetBoundingBox


Lợi Nhuận

GetExtentsSize


Lợi Nhuận

Mẫu mã

Mô hình 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

Lợi Nhuận

Instances

GetScale


Lợi Nhuận

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

()

Tham Số

position: Vector3
Giá Trị Mặc Định: ""

Lợi Nhuận

()

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

()

Tham Số

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

Lợi Nhuận

()

ScaleTo

()

Tham Số

newScaleFactor: number
Giá Trị Mặc Định: ""

Lợi Nhuận

()

TranslateBy

()

Tham Số

delta: Vector3
Giá Trị Mặc Định: ""

Lợi Nhuận

()

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