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 cài đặ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 cài đặtphầ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 cài đặtrõ 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
  • 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):()

    Đặt mô hình này là vĩnh viễn cho người chơi được chỉ định.Model.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 cài đặ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.Model.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

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 ví dụ phát trực tiếp bật.

Khi được đặt thành StreamingMesh, một khối lưới "imposter" có độ phân giải thấp hơn (lưới thô sơ màu có bao quanh tất cả các phần con của mô hình) được hiển thị bên ngoài phạm vi phát trực tuyến.

Khi được đặt thành Disabled hoặc Automatic, lưới giải quyết thấp hơn sẽ không được hiển thị.

ModelStreamingMode

Đọc Song Song

Kiểm soát cách Models được phát trong và ra khi ví dụ phát trực tiếp được bật.Hành vi phụ thuộc vào enum được chọn.Không có hiệu lực khi phát trực tuyến không được bật.

Thuộc tính này chỉ nên được thay đổi trong Studio thông qua cửa sổ Tính năng khi bật phát trực tuyến, hoặc trong Scripts , nhưng không bao giờ trong LocalScripts (việc làm như vậy có thể dẫn đến hành vi không xác định).

PrimaryPart

Đọc Song Song

Chỉ vào phần chính của Model .Phần chính là BasePart đóng vai trò là tham chiếu vật lý cho trục của mô hình.Nghĩa là, khi các bộ phận trong mô hình được di chuyển do phân tích vật lý hoặc các phương tiện khác, trục sẽ di chuyển đồng bộ với bộ phận chính.

Lưu ý rằng Models không có PrimaryPart được đặt theo mặc định.Nếu bạn đang tạo một mô hình cần phải được thực hiện bởi vật lý, bạn nên thiết lập thuộc tính này thủ công trong Studio hoặc trong một kịch bản.Nếu phần chính không là không được cài đặt, trục sẽ vẫn ở cùng một vị trí trong không gian thế giới, ngay cả khi các bộ phận trong mô hình được di chuyển.

Cũng lưu ý rằng khi đặt tính chất này, nó phải là một BasePart mà là con cháu của mô hình.Nếu bạn cố gắng đặt Model.PrimaryPart đến một BasePartkhông một con cháu của mô hình, nó sẽ được đặt vào phần đó nhưng đặt lại thành nil trong bước tiếp theo phân tích — đây là hành vi kế thừa để hỗ trợ các kịch bản mà cho rằng chúng có thể tạm thời đặt phần chính thành một BasePart không phải là con cháu của mô hình.

Quy tắc chung cho các mô hình là:

  • Các mô hình mà các bộ phận của chúng được kết nối với nhau thông qua các khớp vật lý như WeldConstraints hoặc Motor6Ds nên có một phần chính được gán.Ví dụ, các mô hình nhân vật Roblox có set Model.PrimaryPart của họ thành HumanoidRootPart mặc định.
  • Các mô hình tĩnh (thường là Anchored ) ở một nơi nếu không có một kịch bản di chuyển chúng rõ ràng không cần phải có Model.PrimaryPart và có xu hướng không được hưởng lợi từ việc có một cài đặt

Mẫu mã

This code sample creates and throws a dice model, then outputs whether it landed with the blue side facing up. If Model.PrimaryPart was not set, the pivot / bounding box of the dice would rotate, as the parts inside of it are physically simulated during the roll.

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

Bằng cách thiết lập thuộc tính này trong cửa tính chất sẽ mở rộng mô hình như thể Model/ScaleTo đã được gọi trên nó, mở rộng tất cả các Instances con trong mô hình theo tỷ lệ phần trăm đã được xác định so với kích thước ban đầu của nó.

Tính năng này chỉ có sẵn trong Studio và sẽ xảy ra lỗi nếu được sử dụng trong Script hoặc LocalScript .Model/ScaleToModel/GetScale nên được sử dụng từ các kịch bản.

WorldPivot

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

Thuộc tính này xác định vị trí mà trục của một mà không có set nào được đặt tại.Nếu Model một PrimaryPart , trung tâm của Model là bằng với trung tâm của phần chính đó thay vào đó, và thuộc tính này WorldPivot bị bỏ qua.

Đối với một đối tượng được tạo mới Model, trục của nó sẽ được xử lý như trung tâm của hộp giới hạn của nội dung cho đến khi lần đầu tiên tài sản Model.WorldPivot của nó được cài đặt.Khi trục thế giới được thiết lập lần đầu tiên, không thể khôi phục hành vi ban đầu này.

Phổ biến nhất, di chuyển mô hình với các công cụ Studio, hoặc với chức năng di chuyển mô hình như PVInstance:PivotTo()Model:MoveTo(), sẽ đặt trục 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ã Luau có được một trục có ý nghĩa chỉ bằng cách tạo một mô hình mới và quản lý các đối tượng cho nó, tránh việc cần phải đặt rõ ràng Model.WorldPivot mỗi khi bạn tạo một mô hình trong mã.


local Workspace = game:GetService("Workspace")
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ã

This code sample shows a custom function for resetting the pivot of a model back to the center of that model's bounding box.

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: "nil"

Lợi Nhuận

()

GetBoundingBox

Chức năng này trả về một sự mô tả về một khối lượng chứa tất cả các BasePart con trong một Model .Hướng của volume dựa trên hướng của PrimaryPart , và phù hợp với hộp chọn được hiển thị trong Studio khi mô hình được chọn.Phản ánh hành vi của Terrain:FillBlock() , nó trả về một CFrame đại diện cho trung tâm của hộp giới hạn đó và một Vector3 đại diện cho kích thước của nó.

Nếu không có PrimaryPart cho mô hình, hộp gắn kết sẽ được căn chỉnh với trục thế giới.


local Workspace = game:GetService("Workspace")
local model = Workspace.Model
local part = Workspace.Part
local orientation, size = model:GetBoundingBox()
-- Thay đổi kích thước và vị trí phần 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 theo sau bởi một Vector3 đại diện cho kích thước của khối lượng.

GetExtentsSize

Trả về kích thước của hộp liên kết nhỏ nhất chứa tất cả các BaseParts trong Model.Nếu Model.PrimaryPart tồn tại thì hộp gắn kết sẽ được căn chỉnh với phần đó.Nếu một phần chính chưa được đặt thì chức năng sẽ chọn một phần trong mô hình để căn chỉnh hộp giới hạn.Vì lựa chọn phần này không xác định nên được đề xuất đặt một Model.PrimaryPart để có kết quả nhất quán với chức năng này.

Lưu ý chức năng này chỉ trả về kích thước của hộp gắn kết nhỏ nhất, và nhà phát triển phải sử dụng phương pháp riêng của họ để có được vị trí của hộp gắn kết.


Lợi Nhuận

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

Mẫu mã

The code sample below demonstrates how Model.GetExtentsSize can be used to get the size of the bounding box containing the parts.

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 phương pháp này được gọi từ một Script , nó trả lại tất cả các đối tượng Player mà mô hình này bền vững.Khi gọi từ một LocalScript , phương pháp này chỉ kiểm tra xem mô hình này có bền vững cho LocalPlayer không.


Lợi Nhuận

Instances

Một bảng với tất cả các đối tượng Player mà đối tượng mô hình này lưu trữ.

GetScale

Các mô hình có chứa một yếu tố phân mảng canon bền vững, bắt đầu tại 1 cho các mô hình được tạo mới và thay đổi khi mô hình được mở rộng bằng cách gọi Model/ScaleTo .Chức năng này trả về yếu tố phân mảng hiện tại của mô hình.

Hệ số thước đo hiện tại không trực tiếp ảnh hưởng đến kích thước của Instances dưới mô hình.Nó được sử dụng cho mục đích soạn thảo nội dung và lập trình để ghi nhớ cách mô hình đã được mở rộng so với kích thước ban đầu.

Trong một phiên nhất định, mô hình sẽ lưu thông tin kích thước ban đầu chính xác của các Instances con sau lần gọi đầu tiên Model/ScaleTo .Điều này có nghĩa là gọi ScaleTo(x) theo sau bởi ScaleTo(1) sẽ đưa bạn trở lại chính xác cấu hình ban đầu của mô hình mà không có sự trôi dạt điểm nổi.Tránh trôi dạt điểm phân cách là động lực để có chức năng Scale Đến thay vì chức năng Scale Bởi .

Yếu tố thước đo ảnh hưởng đến hành vi của động cơ theo một cách: Yếu tố thước đo của một mô hình sẽ được áp dụng cho sự chênh lệch chung của animations được chơi trên AnimationController dưới mô hình đó, do đó các phân đoạn hoạt hình sẽ được phát lại chính xác ngay cả khi được thay đổi kích thước.


Lợi Nhuận

Yếu tố phân mảng hiện tại của mô hình.

Mẫu mã

This code sample demonstrates substituting in a replacement for all the copies of a tree model using PivotTo and ScaleTo. The pivot and scale of the models are used as a reference ensuring that the relative sizes and locations of the replacement models match those of the originals.

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

()

Di chuyển PrimaryPart đến vị trí đã cho.Nếu một phần chính chưa được xác định, phần gốc của mô hình sẽ được sử dụng, nhưng phần gốc không phải là deterministic và được khuyến nghị rằng bạn luôn luôn đặt một phần chính khi sử dụng MoveTo() .

Nếu có bất kỳ chướng ngại vật nào mà mô hình cần được di chuyển, chẳng hạn như Terrain hoặc BaseParts khác, mô hình sẽ được di chuyển lên trên theo chiều đứng cho đến khi không có gì trong cách.Nếu hành vi này không mong muốn, PVInstance:PivotTo() nên được sử dụng thay thế.

Lưu ý rằng việc xoay không được lưu khi di chuyển mô hình với MoveTo() .Khuyến nghị sử dụng TranslateBy() hoặc PVInstance:PivotTo() nếu bản xoay hiện tại của mô hình cần được lưu giữ.

Tham Số

position: Vector3

The Vector3 the Model được di chuyển đến.

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

Lợi Nhuận

()

Mẫu mã

This sample demonstrates how Model:MoveTo avoids collisions.

A simple two part Model is created, and its PrimaryPart is set. An large obstruction part is placed next to it.

After 5 seconds Model:MoveTo is used to direct the model to move inside the obstruction part. However, as MoveTo will not move a model inside of an obstruction the Model is moved up on the Y axis and placed above the obstruction.

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: "nil"

Lợi Nhuận

()

ScaleTo

()

Các mô hình có chứa một yếu tố thước đo canon bền vững, bắt đầu từ 1 cho các mô hình được tạo mới.Chức năng này thay đổi mô hình, xung quanh vị trí trung tâm, so với cách nó sẽ xem xét một yếu tố thước đo là 1.Để hoàn thành điều này, nó làm hai việc:

  • Đặt hệ số thước đo hiện tại của mô hình lên giá trị được chỉ định
  • Thay đổi kích thước và vị trí tất cả các Instances con tương ứng

Việc tăng quy mô của các 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 các Instances con sẽ được thay đổi kích thước.Rõ ràng điều đó bao gồm các kích cỡ của các bộ phận, nhưng đây là một số ví dụ khác về các thuộc tính được thay đổi kích thước:

  • Chiều dài của các khớp như WeldConstraints , và Class.Rope|Ropes
  • Tốc độ và lực vật lý như Hinge.MaxServoTorque
  • Các thuộc tính hình ảnh như kích thước của các phát xạ viên hạt
  • Các thuộc tính chiều dài khác như Sound.RollOffMinDistance

Tham Số

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

Lợi Nhuận

()

TranslateBy

()

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.

Bản dịch được áp dụng trong không gian thế giới thay vì không gian đối tượng, có nghĩa là ngay cả khi các bộ phận của mô hình được xếp hướng khác nhau thì vẫn sẽ di chuyển theo trục tiêu chuẩn.

Tham Số

delta: Vector3

The Vector3 để dịch Model by.

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

Lợi Nhuận

()

Mẫu mã

This sample demonstrates how Model:TranslateBy ignores collisions and respects the orientation of the model.

A simple two part Model is created, rotated 45 degrees on the Y axis, and its PrimaryPart is set. An large obstruction part is placed next to it.

After 5 seconds Model:TranslateBy is used to direct the model to move inside the obstruction part. The model will move inside of the obstruction and maintain it's current orientation.

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