PhysicsService 主要包含用於與 衝突群 交互的方法,定義是否有一組零件可能或不可能與其他衝突群中的零件碰撞。您可以通過 RegisterCollisionGroup() 註冊碰撞群,並將零件配置給碰撞群,設置這些零件的 CollisionGroup 屬性為碰撞群組的 名稱 。
創建、刪除和修改衝突群之間的衝突關係受到服務器側限制 Scripts 。
請參閱碰撞過濾以獲得 Studio 和腳本中的使用細節。
概要
方法
設置兩個群組之間的碰撞狀態。
返回兩個群組是否會碰撞。
返回最大數量的衝突群。
返回包含所有場空間碰撞群資訊的表。
檢查是否已註冊衝突群。
註冊新的碰撞群組,使用指定的名稱。
重命名指定的碰撞群組。
取消指定名稱的衝突群的註冊。
屬性
方法
CollisionGroupSetCollidable
設置兩個群組之間的碰撞狀態。如果任何一個群組未註冊,這個方法將發生錯誤,因此建議您在 PhysicsService:IsCollisionGroupRegistered() 之前確認每個群組的註冊,然後才能呼叫此方法。
參數
返回
CollisionGroupsAreCollidable
返回兩個指定衝突群是否會碰撞。此方法也會返回真值,如果任何一個群組未註冊,因為預設碰撞面罩與所有群組碰撞。
參數
返回
GetRegisteredCollisionGroups
返回包含所有場空間碰撞群的表,每個值在返回的表中都是一個表,包含兩個成員:
<th>類型</th><th>說明</th></tr></thead><tbody><tr><td>面具</td><td>整數</td><td>衝突群組的面具;僅供內部使用。</td></tr><tr><td>名稱</td><td>字串</td><td>衝突群組的名稱。</td></tr></tbody>
會員 |
---|
返回
IsCollisionGroupRegistered
檢查是否已註冊衝突群。建議您在呼叫未註冊衝突群組的錯誤方法之前呼叫此方法,例如 PhysicsService:CollisionGroupSetCollidable() 。
參數
返回
RegisterCollisionGroup
註冊新的碰撞群組以指定名稱。名稱不能是 "Default" 。
請注意,此方法基於工作區中的 BaseParts 數量有一點性能過載,因此建議您在編輯時通過 Studio 編輯器 註冊所有碰撞組,並盡量少呼叫 UnregisterCollisionGroup() 和 RenameCollisionGroup() 以降低頻率。
參數
返回
範例程式碼
This example demonstrates one basic use of collision groups. It assigns BallPart to "CollisionGroupBall" and DoorPart to "CollisionGroupDoor", then makes the two groups non-collidable using PhysicsService:CollisionGroupSetCollidable().
local PhysicsService = game:GetService("PhysicsService")
local collisionGroupBall = "CollisionGroupBall"
local collisionGroupDoor = "CollisionGroupDoor"
-- Register collision groups
PhysicsService:RegisterCollisionGroup(collisionGroupBall)
PhysicsService:RegisterCollisionGroup(collisionGroupDoor)
-- Assign parts to collision groups
script.Parent.BallPart.CollisionGroup = collisionGroupBall
script.Parent.DoorPart.CollisionGroup = collisionGroupDoor
-- Set groups as non-collidable with each other and check the result
PhysicsService:CollisionGroupSetCollidable(collisionGroupBall, collisionGroupDoor, false)
print(PhysicsService:CollisionGroupsAreCollidable(collisionGroupBall, collisionGroupDoor)) --> false
RenameCollisionGroup
重命名指定的註冊碰撞群組,但不會重命名使用該群組的零件的 屬性。此方法的第一個參數是要重命名的群組名稱,第二個參數是群組的新名稱。如果指定的群組不存在,此方法將無法執行任何操作。新名稱的命名規則與如果使用 RegisterCollisionGroup() 創建群組時相同。
在下列情況下,此方法將在運行時發生錯誤:
- 提供的名稱無效或為空的任何一個引數數。
- 方法從客戶端呼叫。
請注意,此方法基於工作區中的 BaseParts 數量有一點性能上升,因此建議您在編輯時通過 Studio 編輯器 註冊所有碰撞群,並盡可能地重命名它們。