WorldRoot
*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.
Lớp cơ sở này cung cấp một API cho bất kỳ instance nào dự định xử lý các truy vấn không gian 3D và mô phỏng, chẳng hạn như Workspace và WorldModel .
Tóm Tắt
Thuộc Tính
Thuộc Tính kế thừa từ ModelĐặ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.
Phần chính của Model , hoặc nil nếu không được đặt rõ ràng.
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ó.
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.
Phương Pháp
Trả về true nếu bất kỳ phần nào trong số được cung cấp BasePart đang chạm vào bất kỳ phần nào khác.
Thả một hình khối theo một hướng nhất định và trả về một RaycastResult nếu hình dạng đánh vào một BasePart hoặc Terrain tế bào.
Trả về một array các phần có hộp liên kết chồng lên một hộp dữ liệu đã cho.
Trả về một array các phần có hộp liên kết chồng lên nhau trên một cạnh tròn nhất định.
Trả về một array các bộ phận có không gian chiếm chung với bộ phận được cung cấp.
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
Di chuyển phần được chỉ định đến vị trí được chỉ định thông qua kinh tế ngược chứ không phải di chuyển trực tiếp đến đó, để đảm bảo các khớp, hạn chế hoặc va chạm mà phần tham gia vào vẫn được hài lòng về mặt vật lý.
Phát ra một tia bằng cách sử dụng một nguồn, hướng và tùy chọn RaycastParams , sau đó trả về một RaycastResult nếu một đối tượng hoặc khu vực có thể kết nối với tia.
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
Thả một hình cầu theo một hướng nhất định và trả về một RaycastResult nếu hình dạng đánh vào một tế bào BasePart hoặc Terrain .
Tiến bộ hóa mô phỏng cho các bộ phận trên thế giới dựa trên tăng thời gian được xác định và một bộ tùy chọn BaseParts .
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 .
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.
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ỏ.
Đặ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.
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.
Nhận trung tâm của một PVInstance .
Biến đổi PVInstance cùng với tất cả con cháu của nó PVInstances như vậy mà trục trung tâm bây giờ được đặt tại điểm CFrame được chỉ định.
Thuộc Tính
Phương Pháp
ArePartsTouchingOthers
ArePartsTouchingOthers trả về true nếu ít nhất một trong các BasePart được cho là đang chạm vào bất kỳ phần nào khác.Hai phần được coi là "chạm" nếu chúng nằm trong giới hạn khoảng cách, overlapIgnored .
Nếu không có bất kỳ phần nào được cung cấp, false được trả về.
Tham Số
Một danh sách kiểm tra các bộ phận để xem liệu có bất kỳ bộ phận nào trong danh sách chạm vào bất kỳ bộ phận nào không có trong danh sách không.
Ngưỡng chồng lấp phần trong đinh tán bị bỏ qua trước khi các phần được coi là tiếp xúc.
Lợi Nhuận
Mẫu mã
Khối mã bên dưới minh họa cách sử dụng WorldRoot:ArePartsTouchingOthers() để kiểm tra xem các bộ phận trong danh sách có chạm vào bất kỳ bộ phận nào trong không gian làm việc không có trong danh sách hay không.
Trước tiên, kịch bản tạo ra hai phần vuông chồng lấp 1 đinh tán, Part1 và Part2 .Sau đó, nó in giá trị được trả bởi ArePartsTouchingOthers() khi Part1 được chuyển trong partList tại ba giá trị chồng lấp khác nhau: 0 , 0.999 và 1 .Lần đầu tiên hai lần ArePartsTouchingOthers() được gọi trả về false vì giá trị chồng lấp nhỏ hơn khoảng cách mà Part1 và Part2 chồng lấp.Cuộc gọi thứ ba trả về true vì giá trị chồng lấp bằng khoảng cách mà các bộ phận chồng lấp.
local part1 = Instance.new("Part")
part1.Name = "Part1"
part1.Anchored = true
part1.Transparency = 0.5
part1.Color = Color3.fromRGB(185, 100, 38)
part1.Size = Vector3.new(2, 2, 2)
part1.Position = Vector3.new(0, 4, 0)
part1.Parent = workspace
local part2 = Instance.new("Part")
part2.Name = "Part2"
part2.Anchored = true
part2.Transparency = 0.5
part2.Color = Color3.fromRGB(200, 10, 0)
part2.Size = Vector3.new(2, 2, 2)
part2.Position = Vector3.new(0, 5, 0)
part2.Parent = workspace
local partList = { part1 }
print(workspace:ArePartsTouchingOthers(partList, 0)) -- Đúng
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- Đúng
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False
Blockcast
Phát hình một khối hình dạng theo một hướng nhất định và trả về va chạm đầu tiên với một tế bào BasePart hoặc Terrain .Điều này tương tự như cách WorldRoot:Raycast() phát sóng một đường tròn trong một hướng để tìm một va chạm, nhưng nó sử dụng một hình dạng 3D thay vì một tia.
Không giống như WorldRoot:GetPartsInPart() , phương pháp này không phát hiện BaseParts rằng ban đầu không giao nhau hình dạng.
Nếu một hit được phát hiện, một RaycastResult được trả về chứa thông tin hit.Thuộc tính Distance đại diện cho khoảng cách mà hình dạng phải di chuyển để tìm một hit, và thuộc tính Position đại diện cho điểm giao lộ gây ra hit.
Phương pháp này ném lỗi nếu nó được truyền không hợp lệ CFrame , kích thước hoặc đầu vào hướng.
Tham Số
Vị trí ban đầu và độ xoay của hình dạng khối ném.
Kích thước của khối phát trong đinh tán. Kích thước tối đa là 512 đinh tán.
Hướng của shapecast, với độ lớn đại diện cho khoảng cách tối đa mà hình dạng có thể di chuyển. Khoảng cách tối đa là 1024 đinh tán.
Lợi Nhuận
Mẫu mã
Casts a block and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castBlock()
-- The initial position and rotation of the cast block shape
local originCFrame = CFrame.new(Vector3.new(0, 50, 0))
-- The size of the cast block shape
local size = Vector3.new(6, 3, 9)
-- The direction the block is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the block and create a visualization of it
local raycastResult = Workspace:Blockcast(originCFrame, size, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Block intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between block's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a block every 2 seconds
while true do
castBlock()
task.wait(2)
end
BulkMoveTo
Chức năng này di chuyển một bảng của BaseParts sang một bảng của CFrames mà không cần bắn sự kiện mặc định Changed mặc định.Điều này cung cấp một cách nhanh chóng để di chuyển một lượng lớn các bộ phận, bởi vì bạn không phải trả chi phí cho các bộ sưu tập tài sản riêng biệt cho mỗi bộ phận.
Các tham số thứ ba cho phép bạn tối ưu hóa thêm hoạt động di chuyển.Mặc định, sự kiện Changed của mỗi phần bắt lửa cho Position , Orientation và CFrame .Tuy nhiên, nếu bạn xác định FireCFrameChanged như là tham số thứ ba, chỉ sự kiện Changed cho thuộc tính CFrame sẽ bắn.
Lưu ý rằng bạn chỉ nên sử dụng chức năng này nếu bạn chắc chắn rằng phần di chuyển là một chai cổ trong mã của bạn.Chỉ cần đặt thuộc tính CFrame của các bộ phận riêng lẻ và mô hình hàn là nhanh đủ trong hầu hết các trường hợp.
Tham Số
Lợi Nhuận
GetPartBoundsInBox
WorldRoot:GetPartBoundsInBox() trả về một array các bộ phận có hộp giới hạn chồng lên một hộp có âm lượng được mô tả bằng cách sử dụng trung tâm được cung cấp ( CFrame ) và kích thước ( Vector3 ).
Như đã nhấn mạnh, phương pháp truy vấn không gian này hiệu quả xem xét khối lượng hộp gắn kết của các bộ phận chứ không phải khối lượng thực sự chiếm của chúng.Điều này có thể quan trọng khi xem xét xi lanh, cầu, liên minh và MeshParts những thứ có hình dạng không khối.Đối với các trường hợp mà độ chính xác đặc biệt quan trọng, hãy sử dụng WorldRoot:GetPartsInPart() thay vào đó, hoặc lọc thêm kết quả của phương pháp này bởi chính bạn.
Phương pháp này sử dụng một đối tượng để mô tả các phần có thể tái sử dụng trong truy vấn không gian, chẳng hạn như một danh sách bao gồm hoặc loại trừ, số lượng phần tối đa để truy vấn, những gì nhóm va chạm để sử dụng và liệu truy vấn có ưu tiên giá trị của phần chồng lấp trên giá trị của nó hay không.
Tham Số
Vị trí của trung tâm của khối lượng hộp được truy vấn.
Kích thước của khối lượng hộp được truy vấn.
Bao gồm các phần có thể tái sử dụng của các tham số truy vấn không gian.
Lợi Nhuận
Một mảng của BaseParts mà phù hợp với truy vấn không gian.
GetPartBoundsInRadius
WorldRoot:GetPartBoundsInRadius() trả về một mảng các bộ phận mà hộp giới hạn của chúng chồng lên một cạnh tròn có khối lượng được mô tả bằng cách sử dụng trung tâm được cung cấp ( Vector3 ) và bán kính (number).
Như đã nhấn mạnh, phương pháp truy vấn không gian này hiệu quả xem xét khối lượng hộp gắn kết của các bộ phận chứ không phải khối lượng thực sự chiếm của chúng.Điều này có thể quan trọng khi xem xét xi lanh, cầu, liên minh và MeshParts những thứ có hình dạng không khối.Đối với các trường hợp mà độ chính xác đặc biệt quan trọng, hãy sử dụng WorldRoot:GetPartsInPart() thay vào đó, hoặc lọc thêm kết quả của phương pháp này bởi chính bạn.
Phương pháp này sử dụng một đối tượng để mô tả các phần có thể tái sử dụng trong truy vấn không gian, chẳng hạn như một danh sách bao gồm hoặc loại trừ, số lượng phần tối đa để truy vấn, những gì nhóm va chạm để sử dụng và liệu truy vấn có ưu tiên giá trị của phần chồng lấp trên giá trị của nó hay không.
Tham Số
Vị trí của trung tâm của khối lượng cạnh tròn được truy vấn.
Bán kính của khối lượng cạnh tròn được truy vấn.
Bao gồm các phần có thể tái sử dụng của các tham số truy vấn không gian.
Lợi Nhuận
Một mảng của BaseParts mà phù hợp với truy vấn không gian.
GetPartsInPart
WorldRoot:GetPartsInPart() trả về một array các bộ phận có không gian chiếm chỗ được chia sẻ với bộ phận được cung cấp (phải tồn tại trong cùng WorldRoot như các bộ phận được truy vấn).Phương pháp này có thể được sử dụng thay cho BasePart:GetTouchingParts() và thường là lựa chọn tốt hơn.
Như đã lưu ý, phương pháp truy vấn không gian này xem xét chính xác khối lượng được chiếm bởi phần được cung cấp bằng cách kiểm tra va chạm định hình đầy đủ.Ví dụ, một phần lõm/trống sẽ không phù hợp với các phần được truy vấn trong nó trừ khi chúng thực sự chồng lấp/chạm vào một phần như vậy.Đối với các khối lượng đơn giản hơn, hãy xem xét sử dụng WorldRoot:GetPartBoundsInBox() hoặc WorldRoot:GetPartBoundsInRadius(), vì chúng ít chính xác hơn nhưng thực hiện hiệu quả hơn.
Phương pháp này sử dụng một đối tượng để mô tả các phần có thể tái sử dụng trong truy vấn không gian, chẳng hạn như một danh sách bao gồm hoặc loại trừ, số lượng phần tối đa để truy vấn, những gì nhóm va chạm để sử dụng và liệu truy vấn có ưu tiên giá trị của phần chồng lấp trên giá trị của nó hay không.
Tham Số
Phần có âm lượng phải được kiểm tra so với các phần khác.
Bao gồm các phần có thể tái sử dụng của các tham số truy vấn không gian.
Lợi Nhuận
Một mảng của BaseParts mà phù hợp với truy vấn không gian.
IKMoveTo
Chức năng này di chuyển phần được chỉ định đến vị trí được chỉ định thông qua kinh tế đảo ngược thay vì di chuyển trực tiếp ở đó, để đảm bảo các khớp, constraints hoặc va chạm mà phần tham gia vào vẫn được hài lòng về mặt vật lý.Hiện tại chức năng này chỉ có sẵn trong Studio đến plugins, vì nó hiện đang xung đột với vật lý của một trò chơi đang chạy.
Biến độ cứng là một số từ 0 đến 1 để xác định mức độ tấn công để phù hợp với vị trí của phần với vị trí của mục tiêu CFrame. Độ cứng quay là một số từ 0 đến 1 chỉ định mức độ xâm lược để phù hợp với sự xoay của phần với phần xoay của mục tiêu CFrame.
Ví dụ:
- Nếu độ cứng dịch và độ cứng quay cả hai bằng nhau là 1, thì phần sẽ được di chuyển chính xác đến CFrame mục tiêu bất kể có bao nhiêu hạn chế vật lý trên nó.
- Nếu độ cứng dịch và độ cứng xoay cả hai bằng nhau là 0.5, thì phần sẽ cố gắng di chuyển chính xác đến CFrame mục tiêu, nhưng có thể bị đẩy ra khỏi đường bởi các hạn chế vật lý trên nó.
- Nếu độ cứng dịch và độ cứng quay bằng nhau là 0, thì CFrame mục tiêu sẽ bị bỏ qua và các hạn chế vật lý sẽ được giải quyết cho đối tượng ở vị trí nó đã ở.
Tham Số
Phần được di chuyển.
Vị trí để di chuyển phần được chỉ định.
Một số từ 0 đến 1 xác định mức độ hung hăng mà phải phù hợp vị trí của phần với vị trí của mục tiêu CFrame .
Một số từ 0 đến 1 xác định mức độ xâm lược để phù hợp với phần xoay của mục tiêu với phần xoay của mục tiêu CFrame .
Cho phép bạn xác định các đối tượng nên bị ảnh hưởng bởi độ phân giải vật lý.
Lợi Nhuận
Raycast
Phát ra một tia sử dụng một nguồn, hướng và tùy chọn RaycastParams .Nếu nó tìm thấy một tế bào hợp lệ BasePart hoặc Terrain , một RaycastResult được trả về chứa kết quả của hoạt động.Nếu không có đối tượng RaycastParams được cung cấp, các giá trị mặc định sẽ được sử dụng (tất cả các bộ phận được xem xét và Terrain nước không bị bỏ qua).
Lưu ý rằng chiều dài (mức độ) của vector hướng là quan trọng, vì các đối tượng/địa hình cách xa hơn chiều dài của nó sẽ không được kiểm tra.Nếu bạn đang sử dụng một CFrame để giúp tạo các thành phần của tia, hãy xem xét sử dụng CFrame.LookVector làm vectơ hướng và nhân nó với chiều dài mong muốn như được hiển thị trong ví dụ bên dưới.Chiều dài tối đa của vectơ hướng là 15,000 đinh tán.
Phương pháp này không sử dụng một đối tượng nhưng thành phần nguồn gốc và hướng có thể được lấy từ và .
Tham Số
Điểm nguồn của tia.
Vectơ hướng của tia. Lưu ý rằng chiều dài của vector này là quan trọng, bởi vì các bộ phận/địa hình cách xa hơn chiều dài của nó sẽ không được kiểm tra.
Một đối tượng được sử dụng để xác định điều kiện đủ điều kiện trong hoạt động raycast.Nếu không được cung cấp, các giá trị mặc định được sử dụng nơi tất cả các bộ phận được xem xét và Terrain nước không bị bỏ qua.
Lợi Nhuận
Mẫu mã
Casts a ray and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castRay()
-- The origin point of the ray
local originPosition = Vector3.new(0, 50, 0)
-- The direction the ray is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the ray
local distance = 50
-- Cast the ray and create a visualization of it
local raycastResult = Workspace:Raycast(originPosition, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Ray intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between ray origin and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a ray every 2 seconds
while true do
castRay()
task.wait(2)
end
Shapecast
Tham Số
Lợi Nhuận
Spherecast
Thực hiện hình dạng cầu tròn theo một hướng nhất định và trả lại va chạm đầu tiên với một tế bào BasePart hoặc Terrain .Điều này tương tự như cách WorldRoot:Raycast() phát sóng một đường tròn trong một hướng để tìm một va chạm, nhưng nó sử dụng một hình dạng 3D thay vì một tia.
Không giống như WorldRoot:GetPartsInPart() , phương pháp này không phát hiện BaseParts rằng ban đầu không giao nhau hình dạng.
Nếu một hit được phát hiện, một RaycastResult được trả về chứa thông tin hit.Thuộc tính Distance đại diện cho khoảng cách mà hình dạng phải di chuyển để tìm một hit, và thuộc tính Position đại diện cho điểm giao lộ gây ra hit.
Phương thức này ném lỗi nếu nó được truyền đầu vào bán kính hoặc hướng không hợp lệ.
Tham Số
Vị trí ban đầu của hình cầu phẳng.
Bán kính của hình cầu phát trong đinh tán. Bán kính tối đa là 256 đinh tán.
Hướng của shapecast, với độ lớn đại diện cho khoảng cách tối đa mà hình dạng có thể di chuyển. Khoảng cách tối đa là 1024 đinh tán.
Lợi Nhuận
Mẫu mã
Casts a sphere and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castSphere()
-- The initial position of the cast spherical shape
local originPosition = Vector3.new(0, 50, 0)
-- The radius of the cast spherical shape in studs
local radius = 10
-- The direction the sphere is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the sphere and create a visualization of it
local raycastResult = Workspace:Spherecast(originPosition, radius, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Sphere intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between sphere's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a sphere every 2 seconds
while true do
castSphere()
task.wait(2)
end
StepPhysics
Tiến bộ hóa mô phỏng cho các bộ phận trên thế giới dựa trên tăng thời gian được xác định và một bộ tùy chọn BasePart .Khi một bộ phận được định nghĩa, chỉ những phần này sẽ được mô phỏng và tất cả các phần khác trên thế giới sẽ được xử lý như neo.Khi các tham số này bị bỏ lượt, tất cả các bộ phận trên thế giới sẽ được bao gồm trong phần mô phỏng.Tăng thời gian được chỉ định có thể là bất kỳ số dương nào, với các giá trị lớn hơn tăng thời gian chạy của chức năng.Tùy thuộc vào giá trị tăng thời gian, hệ thống vật lý có thể chia nó thành nhiều bước riêng biệt để duy trì độ chính xác và ổn định của mô phỏng.Ngay cả khi chức năng thực hiện nhiều bước thay thế, kết quả của mô phỏng chỉ được xem một lần khi chức năng hoàn thành.Để hiển thị các bước cụ thể của một mô phỏng, chức năng có thể được gọi một lần mỗi RenderStep thông qua sự kiện RunService.RenderStepped.
Tham Số
Số thời gian sẽ được mô phỏng. Các tham số này phải là một số dương. Các giá trị lớn hơn sẽ tăng thời gian chạy của chức năng này.
Mảng tùy chọn các bộ phận sẽ được mô phỏng. Bộ này phải chứa các ví dụ là của loại BasePart ; bất kỳ loại khác sẽ bị bỏ qua.
Lợi Nhuận
Mẫu mã
Simulates the parts in the workspace for a fixed period of time by calling the StepPhysics function once per frame until a specified time has elaspsed.
local RunService = game:GetService("RunService")
-- Optional array of parts to simulate; otherwise all parts will be simulated
local partsToSimulate = {
workspace.Part,
}
local function simulateParts(duration)
local time = 0.0
local stepJob
stepJob = RunService.RenderStepped:Connect(function(dt)
if time + dt > duration then
dt = duration - time
end
workspace:StepPhysics(dt, partsToSimulate)
time = time + dt
if time >= duration then
stepJob:Disconnect()
end
end)
end
-- Simulate workspace parts for 5 seconds, stepping the parts once per frame
simulateParts(5.0)