TriggerComponent

엔티티에 충돌 영역을 설정하고 충돌을 감지할 수 있는 기능을 제공합니다.

# Properties

[{"index":"Vector2 BoxOffset (Deprecated) (Sync)","0":"IsLegacy가 true인 이전 시스템에서 사용할 수 있습니다. 엔티티를 기준으로 충돌체 직사각형의 중심점 위치를 설정합니다."}]

[{"index":"Vector2 BoxSize (Sync)","0":"직사각형 충돌체의 너비와 높이를 지정합니다."}]

[{"index":"float CircleRadius (Sync)","0":"원형 충돌체의 반지름입니다. ColliderType이 Circle일 때 유효합니다."}]

[{"index":"string ColliderName (Deprecated) (ReadOnly) (HideFromInspector)","0":"더는 사용하지 않는 프로퍼티입니다. CollisionGroup을 사용하세요."}]

[{"index":"Vector2 ColliderOffset (Sync)","0":"엔티티를 기준으로 충돌체의 중심점 위치를 설정합니다. IsLegacy가 false인 신규 시스템에서 사용할 수 있습니다."}]

[{"index":"ColliderType ColliderType (Sync)","0":"충돌체의 타입을 설정합니다. IsLegacy가 false인 신규 시스템에서 사용할 수 있습니다."}]

[{"index":"CollisionGroup CollisionGroup (Sync)","0":"충돌 그룹을 설정합니다."}]

[{"index":"boolean IsLegacy (ReadOnly)","0":"이 컴포넌트가 이전의 시스템으로 동작할지를 설정합니다. 신규 시스템은 충돌체가 TransformComponent의 회전과 크기에 영향을 받습니다. 또한 ColliderType을 설정해 원 모양 충돌체를 사용할 수 있습니다."}]

[{"index":"boolean IsPassive (Sync)","0":"true인 경우 스스로 충돌 검사를 하지 않습니다. IsPassive가 true인 TriggerComponent끼리 충돌하면 이벤트가 발생하지 않습니다. 이벤트가 발생하기 위해선 적어도 TriggerComponent 중 하나는 IsPassive가 false여야 합니다. 불필요한 충돌 검사를 줄여 월드 성능을 개선할 수 있습니다."}]

[{"index":"SyncList PolygonPoints (Sync)","0":"다각형 충돌체를 이루는 점들의 위치입니다. ColliderType이 Polygon일 때 유효합니다."}]

##### inherited from Component:

[{"index":"boolean Enable (Sync)","0":"컴포넌트 활성화 여부를 확인합니다."}]

[{"index":"boolean EnableInHierarchy (ReadOnly) (HideFromInspector)","0":"계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다."}]

[{"index":"Entity Entity (ReadOnly)","0":"이 컴포넌트를 소유한 엔티티입니다."}]

# Methods

[{"index":"void OnEnterTriggerBody(TriggerEnterEvent enterEvent) (ScriptOverridable)","0":"트리거 영역에 진입했을 때 호출되는 함수입니다."}]

[{"index":"void OnLeaveTriggerBody(TriggerLeaveEvent leaveEvent) (ScriptOverridable)","0":"트리거 영역을 벗어날 때 호출되는 함수입니다."}]

[{"index":"void OnStayTriggerBody(TriggerStayEvent stayEvent) (ScriptOverridable)","0":"트리거 영역에 진입해서 남아있을 때 매 프레임마다 호출되는 함수입니다."}]

##### inherited from Component:

[{"index":"boolean IsClient()","0":"현재 실행 환경이 클라이언트인지 아닌지의 여부를 반환합니다."}]

[{"index":"boolean IsServer()","0":"현재 실행 환경이 서버인지 아닌지의 여부를 반환합니다."}]

# Events

[{"index":"TriggerEnterEvent","0":"TriggerComponent의 영역이 겹치는 순간 발생하는 이벤트입니다."}]

[{"index":"TriggerLeaveEvent","0":"겹쳐 있던 TriggerComponent의 영역이 떨어지는 순간 발생하는 이벤트입니다."}]

[{"index":"TriggerStayEvent","0":"TriggerComponent의 영역이 겹쳐 있는 동안 매 프레임마다 발생하는 이벤트입니다. 월드 성능 하락의 요인이 될 수 있으므로 사용 시 주의가 필요합니다."}]

# Examples

다음은 체력 회복 공간을 만드는 예제입니다. 플레이어가 `Heal`이라는 이름의 Entity의 트리거 영역 안에 있는 동안 Hp를 증가시킵니다. 플레이어가 트리거 영역 안에 들어와 있는지 알기 위해 `TriggerEnterEvent`, `TriggerLeaveEvent`를 사용할 수 있습니다.
    
    
    @Component
    script ZoneHealthRegenerator extends Component
        @Sync
        property boolean IsGettingHealed = false
        @Sync
        property number Hp = 1000
    
        @ExecSpace("ServerOnly")
        method void OnUpdate(number delta)
        if self.IsGettingHealed then
        	local player = self.Entity.PlayerComponent
    
        	self.Hp = self.Hp + (10.0 * delta)
        	player.Hp = math.floor(self.Hp)
        end
        end
    
        @ExecSpace("ServerOnly")
        @EventSender("Self")
        handler HandleTriggerEnterEvent(TriggerEnterEvent event)
        -- Parameters
        local TriggerBodyEntity = event.TriggerBodyEntity
        --------------------------------------------------------
    
        if TriggerBodyEntity.Name == "Heal" then
        	self.IsGettingHealed = true
        end
        end
    
        @ExecSpace("ServerOnly")
        @EventSender("Self")
        handler HandleTriggerLeaveEvent(TriggerLeaveEvent event)
        -- Parameters
        local TriggerBodyEntity = event.TriggerBodyEntity
        --------------------------------------------------------
    
        if TriggerBodyEntity.Name == "Heal" then
        	self.IsGettingHealed = false
        end
        end
    end
    

# SeeAlso

  * PlayerComponent
  * TriggerEnterEvent
  * TriggerLeaveEvent
  * math