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 Groups

Last updated