PhysicsService 主要包含與 碰撞群組 相關的方法,以確定是否要在一組零件與其他碰撞群組中碰撞。您可以通過 Class.PhysicsService:RegisterCollisionGroup()|Register
創建、刪除和修改碰撞群之間的衝突關係是 Scripts 側的。
請參閱 撞擊過濾 以取得 Studio 和內部指令碼的使用說明。
概要
方法
設定兩個群組之間的衝突狀態。
返回兩個群組是否會碰撞。
返回最大碰撞群數。
返回一個包含所有空間方碰撞群組的資訊的表。
檢查是否有衝突群組已註冊。
註冊一個新的衝突群組,並且以指定的名稱。
重新命名指定的衝突群組。
不再為指定名稱註冊衝突群組。
屬性
方法
CollisionGroupSetCollidable
設定兩個群組之間的碰撞狀態。此方法將在兩個群組之一未註冊時發生錯誤,因此建議您在 PhysicsService:IsCollisionGroupRegistered() 之前確認每個群組的註冊。
參數
返回
CollisionGroupsAreCollidable
返回兩個指定的衝突群是否會相互碰撞。此方法將返回 true ,如果兩個群組未註冊,因為預設的衝突面具會與所有群組碰撞。
參數
返回
GetRegisteredCollisionGroups
返回一個包含所有空間方碰撞群組的資訊的表。每個值在返回的表中都是自己的表,並且包含兩個成員:
<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 編輯器 註冊所有衝突群組,並且 Class.PhysicsService
參數
返回
範例程式碼
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
重新命名指定註冊的衝突群組,但不會 不 重新命名 CollisionGroup 的零件。 此方法的第一個參數是群組的名稱,第二個參數是新名稱群組。
此方法在下列情況下會發生時間錯誤:
- 提供兩個引數數的名稱無效或為空。
- 方法從客戶端呼叫。
注意,此方法有一些微的性能擁有率,因為在工作區中有 BaseParts 的數量,因此建議您在 Studio 編輯器 上註冊所有衝突群組,並且盡可能頻繁地重命名它們。
參數
返回
UnregisterCollisionGroup
為指定名稱取消衝突群組的註冊,並且執行以下行為:
- 如果提供了無效的名稱,方法將無法執行任何操作。
- 如果提供了預留名稱 "Default" 或 #number1</number1> ,如果方法從客戶端呼叫,將發生錯誤。
- 當它移除時,如果有任何部分在衝突群中,那些部分仍然會保持相同的衝突群名稱。物理上,在移除群中的任何部分都是未定義的,因此建議將任何部分移動到另一個群組,例如 "Default" 群組。
注意,此方法有一些微的性能上限,取決於工作區內的 BaseParts 數量,因此建議您在編輯時通過 Studio 編輯器 註冊所有衝突群,並且盡可能在 Studio 編輯器 呼叫此方法。