PhysicsService
PhysicsService : Instance
Overview
PhysicsService는 물리 연산에서 객체 간 충돌 규칙을 세밀하게 제어하는 서비스로, 충돌 그룹을 생성하고 각 그룹 간의 상호작용 여부를 설정할 수 있습니다.
예를 들어, 플레이어의 레벨에 따라 특정 벽을 통과할 수 있도록 설정하는 방식으로 활용할 수 있습니다.
Properties
Methods
CollisionGroupSetCollidable
지정한 두 충돌 그룹이 서로 충돌할 수 있을지 여부를 결정합니다.
등록되지 않은 그룹에 설정을 시도하면 오류가 발생하므로, IsCollisionGroupRegistered() 메서드를 사용해 각 그룹의 존재 여부를 먼저 확인하는 것이 좋습니다.
Parameters
string
Group1
충돌 그룹1의 이름입니다.
string
Group2
충돌 그룹2의 이름입니다.
bool
bCollidable
그룹 간 충돌 여부입니다.
Return
void
Code Samples
local Part = script.Parent
local PhysicsService = game:GetService("PhysicsService")
local DefaultGroup = "Default"
local GroupA = "GroupA"
PhysicsService:RegisterCollisionGroup(GroupA)
Part.CollisionGroup = GroupA
local collidable = false
PhysicsService:CollisionGroupSetCollidable(DefaultGroup, GroupA, collidable)
CollisionGroupsAreCollidable
두 충돌 그룹 간의 충돌 가능 여부를 확인하는 기능을 제공합니다.
Parameters
string
Group1
충돌 그룹1의 이름입니다.
string
Group2
충돌 그룹2의 이름입니다.
Return
bool
Code Samples
GetMaxCollisionGroups
물리 엔진에서 동시에 생성할 수 있는 충돌 그룹의 최대 개수를 반환합니다.
현재 제한은 17개이며, 이를 초과하여 그룹을 만들 수 없으므로 복잡한 충돌 규칙을 설계할 때는 그룹 수를 효율적으로 관리하는 것이 중요합니다.
Parameters
Return
Value
생성 가능한 충돌 그룹의 최대 개수입니다.
Code Samples
local PhysicsService = game:GetService("PhysicsService")
print(PhysicsService:GetMaxCollisionGroups())
GetRegisteredCollisionGroups
등록된 모든 충돌 그룹을 테이블로 반환합니다.
Parameters
Return
Array
등록된 충돌 그룹의 목록입니다.
Code Samples
local PhysicsService = game:GetService("PhysicsService")
local CollisionGroups = PhysicsService:GetRegisteredCollisionGroups()
print(CollisionGroups)
IsCollisionGroupRegistered
특정 충돌 그룹이 등록되어 있는지를 검사합니다.
CollisionGroupSetCollidable() 등 충돌 그룹 설정과 관련된 메서드를 호출하기 전에, 해당 그룹이 등록되어 있는지 확인하여 오류를 방지할 수 있습니다.
Parameters
string
Group
검사할 충돌 그룹의 이름입니다.
Return
bool
등록되어있는지 여부입니다.
Code Samples
local PhysicsService = game:GetService("PhysicsService")
local DefaultGroup = "Default"
local IsRegistered = PhysicsService:IsCollisionGroupRegistered(DefaultGroup)
print(IsRegistered)
RegisterCollisionGroup
지정한 이름으로 충돌 그룹을 생성합니다.
Default, RootPart, BodyPart, Projectile처럼 이미 등록된 이름은 사용할 수 없습니다.
충돌 그룹 설정은 성능에 영향을 줄 수 있으므로, 런타임에서 생성하기보다는 스튜디오 편집 단계에서 미리 설계해 두고 사용하는 것이 권장됩니다.
Parameters
string
Group
등록할 충돌 그룹의 이름입니다.
Return
void
Code Samples
local Part = script.Parent
local PhysicsService = game:GetService("PhysicsService")
local GroupA = "GroupA"
PhysicsService:RegisterCollisionGroup(GroupA)
RenameCollisionGroup
지정한 충돌 그룹의 이름을 변경하는 기능으로, 다른 충돌 그룹과의 충돌 설정은 그대로 유지됩니다.
Default, RootPart, BodyPart, Projectile 등 기본 제공되는 충돌 그룹의 이름은 변경할 수 없습니다.
이름 변경은 성능에 영향을 줄 수 있으므로, 런타임에서 수정하기보다는 스튜디오 편집 단계에서 미리 설계해 두고 사용하는 것이 권장됩니다.
Parameters
string
FromGroup
이름을 변경할 충돌 그룹의 이름입니다.
string
ToGroup
변경할 이름입니다.
Return
void
Code Samples
local PhysicsService = game:GetService("PhysicsService")
local GroupA = "GroupA"
local NewName = "GroupNewName"
PhysicsService:RenameCollisionGroup(GroupA, NewName)
UnregisterCollisionGroup
지정한 충돌 그룹을 삭제하는 기능으로, 해당 그룹에 속해 있던 파트는 Default로 자동 변경됩니다.
Default, RootPart, BodyPart, Projectile 등 기본 제공되는 충돌 그룹은 삭제할 수 없습니다.
충돌 그룹 삭제는 성능에 영향을 줄 수 있으므로, 런타임에서 삭제하기보다는 스튜디오 편집 단계에서 미리 설계해 두고 사용하는 것이 권장됩니다.
Parameters
string
Group
삭제할 충돌 그룹의 이름입니다.
Return
void
Code Samples
local PhysicsService = game:GetService("PhysicsService")
local GroupA = "GroupA"
PhysicsService:UnregisterCollisionGroup(GroupA)
Events
See also
Collision GroupsLast updated