상호작용
개요
InteractionsSystem
은 엔티티들 간의 상호작용 메커니즘을 제공합니다.
설정
상호작용을 구현하는 방법에는 IInteractableObjectController
에 의존하는 직접 상호 작용 또는 IInteractableTriggerController
에 의존하는 트리거 콜라이더를 사용하는 두 가지가 있습니다. 이러한 접근 방식은 별도로 사용하거나 서로 조합하여 사용할 수 있습니다.
상호작용 할 수 있는 객체
IInteractableObjectController
는 상호 작용 가능한 엔티티의 엔티티 컨트롤러에 의해 구현됩니다. Interact()
메소드에서 true
를 반환하는 것은 상호 작용이 성공했음을 의미합니다.
C#
public interface IInteractableObjectController
{
bool Interact(Frame frame, EntityRef entity, EntityRef instigator);
}
Interactions
컴포넌트를 가진 모든 엔티티는 다음을 통해 상호작용을 할 수 있습니다:
InteractCommand
(플레이어) 전송 또는,InputDesires
(AI) 내의 속성 설정.
또는 InteractionsDesires
를 직접 설정할 수 있습니다.
상호작용 가능한 트리거
상호 작용 가능한 트리거를 생성하려면 객체에 트리거 PhysicsCollider
가 있어야 하며 엔티티 컨트롤러는 IInteractableTriggerController
를 구현해야 합니다. 비트리거 PhysicsCollider
그리고 PhysicsBody
를 가진 모든 엔티티가 이 단계내로 들어갈 수 있습니다.
C#
public interface IInteractableTriggerController
{
bool OnEnter(Frame frame, EntityRef entity, EntityRef instigator, TriggerInfo3D info);
void OnExit(Frame frame, EntityRef entity, EntityRef instigator, ExitInfo3D info);
}
OnEnter()
메소드에서 true
를 반환하면 상호 작용이 성공했음을 의미합니다. InteractableTrigger
컴포넌트에서 현재 상호 작용하는 지시자(엔티티) 목록을 얻을 수 있습니다. 엔티티(또는 모든 하위 부분)가 트리거 볼륨에서 이동되어 발생자 목록에서 제거되면 OnExit()
가 호출됩니다.
예제
PLAYGROUND_Interactions
씬에서 발견된 문은 몇 가지 상호작용을 나타냅니다. 예를 들어 DoorController
는 IInteractableObjectController
를 구현합니다. 그러나 에이전트가 문 자체와 직접 상호 작용하는 대신 에이전트는 버튼과 상호 작용하여 문과의 상호 작용을 발생시킵니다. 이 동작을 활성화하기 위해 Interactable Button
컴포넌트를 사용하며 SignalReceivers
목록 속성을 통해 DoorController
와 연결됩니다.
InteractableToggle
컴포넌트도 유사한 방식으로 동작합니다.