1. 트레이스 방법
생각할 점
- single / multi
- 아이템 여러 개가 겹쳐 있는 경우
- NPC가 여러명 인데 대화 할 때
- line / sphere / capsule
- Overlap Sphere
의사결정
- 스피디한 게임에서 라인 트레이스로 정교한 상호작용을 하면 게임의 템포가 늦어질 수 있음
- 오버랩의 경우 주변에 있는 물체를 넓게 탐지하기에 좋아 여유로운 판정이 가능
- 비용적 측면에서도 오버랩이 훨씬 가벼움
- 대신 여러 물체가 오버랩 되었을 경우를 위해 일정 시간마다 대상 오브젝트를 선정
2. 상호작용 부드럽게 보정
생각할 점
캐릭터 특정 위치로 이동 후 상호작용
- 순간이동(엘든링)
- 특정 위치까지 걸어서 이동(스텔라블레이드)
의사결정
- 먼 거리에서 순간이동 하면 캐릭터가 끊겨서 부자연스럽게 보임
- 특정 위치까지 이동 후 상호작용은 대부분의 경우에서 부드럽게 연출 가능
- 거리가 너무 가까울 시에만 회전을 제한하여 캐릭터를 자연스럽게 움직임
3. 상호작용 오브젝트
생각할 점
- 상호작용 오브젝트 동작
- GameplayAbility vs 인터페이스
의사결정
- 모든 액터에 ASC를 부여하는 건 성능적 측면에서 좋은 선택이 아님
- 인터페이스로 해당 액터의 동작을 정의
- 느슨한 구조를 유지하여 가볍고 확장성이 높은 결과로 이어짐
4. 상호작용 어빌리티 실행
생각할 점
- 각 주체의 동작 시점이 상호작용 마다 서로 다름
- 캐릭터 상호작용 동작 시점
- 캐릭터 위치로 이동 시점
- 상호작용 오브젝트 동작 시점
- UI 표시 및 해제 시점
- 상호작용 전/후 공통 로직 존재
의사결정
- 추상 클래스 + 템플릿 매서드를 선택
- 공통 기능은 부모 클래스에서 정의
- 자식 클래스에서 템플릿의 함수를 재사용 또는 재정의
- ActiveAbility에서 템플릿 함수를 조합하여 원하는 순서로 동작을 구성하면 되는 편리한 구조
- 재사용성, 확장성 측면에서 유리한 설계