This document is about: QUANTUM 2
SWITCH TO

HFSM

개요

FPS 템플릿은 AI 기능, 특히 HFSM을 위해 Bot SDK 추가 기능에 의존하여 AI 에이전트에 대한 조치와 결정을 구축합니다. 이 페이지에서는 FPS 템플릿 내에서 기본 HFSM을 설정하는 방법과 가장 중요한 작업 및 결정에 대한 개요를 제공합니다.

HFSM

HFSM을 구축할 때 유휴 상태는 일반적으로 서로 다른 상태 간의 시작 및 연결 지점으로 사용됩니다. 예를 들어, 에이전트가 공격을 마치면 다음에 수행할 작업을 확인하기 전에 유휴 상태로 돌아갑니다. 그러나 이 접근 방식에는 단점이 있습니다. 즉, HFSM은 다음 가능한 접근 방식으로 이동하기 전에 적어도 한 틱 동안 이 전환/더미 상태를 유지합니다. FPS 템플릿에서 최적화하면 HFSM이 모든 틱에서 실행되지 않습니다. 자세한 내용은 Ticking 및 최적화 챕터를 참조하십시오. 이러한 최적화의 부작용으로 에이전트는 원치 않는 유휴 시간을 발생시킬 수 있는 더미 상태에 적어도 순간적으로 머무를 수 있습니다. 이러한 이유로 FPS 템플릿 예제 HFSM은 전환 세트를 많이 사용합니다. 전환 세트를 사용하면 의사결정 프로세스 중에 더미 상태를 건너뛰고 다음 작업을 즉시 실행하여 중복 전환을 방지하고 앞서 언급한 유휴 문제를 해결할 수 있습니다. 따라서 Attack → Idle → Pickup과 같이 HFSM이 직접 다음 Attack → Pickup 상태로 전환될 수 있습니다. 전환 세트에 대한 자세한 내용은 Bot SDK 설명서를 참조하십시오.

fps template ai hfsm overview
FPS Template Overview of the Solider AI HFSM

SoldierHFSM 예제에는 유휴 상태가 있지만 에이전트에 다른 옵션이 없는 경우에만 폴백 상태로 작동합니다.

액션

SetWeaponRangeDestination

SetWeaponRangeDestination은 공격 위치를 설정하는 주요 작업입니다. 이 작업을 수행할 때 공격자의 사거리가 고려됩니다. RandomizeApproachAngle 이 활성화된 경우 보다 신뢰할 수 있는 위치 선택을 위해 각도 간격이 사용됩니다. 즉, 공격자가 대상과의 거리뿐만 아니라 공격 각도도 변경되어 대상의 왼쪽에서 오른쪽으로 위치가 변경되고 그 반대의 경우도 미리 정의된 각도 제한 내에서 변경됩니다.

성능상의 이유로 NavMesh 라인 캐스트를 수행하여 적이 레이 캐스트 대신 새 위치의 시야상에 있는지 확인합니다.

SetStrafeDestination

SetStrafeDestination은 스트랩의 대상 위치를 설정하기 위한 작업입니다. 이 작업을 수행한 후 AI 에이전의 위치가 왼쪽에서 오른쪽으로 이동하며, 대상자의 입장에서는 반대로 이동하게 됩니다. 이 작업을 사용하여 스트래핑 랜덤화에 사용되는 최소 및 최대 거리를 설정할 수 있습니다. 각도 간격은 에이전트가 스트래핑하는 각도를 랜덤화하는 데 사용됩니다.

SetWaypointDestination

SetWaypointDestination은 씬에서 웨이포인트 객체를 사용하여 레벨을 돌아다니는 데 사용됩니다. 다음 경유지 도착지는 현재 경유지까지의 거리와 각도를 기준으로 선택되며, 가중치는 한 메트릭의 우선순위를 다른 메트릭보다 정하는 데 사용됩니다. SelectRandomFromFirst 메소드는 우선순위별로 정렬된 후 첫 N 경유지에서 임의의 경유지를 선택합니다. 이렇게 하면 에이전트가 항상 동일한 상황에서 동일한 경로를 사용하지 않음으로써 다양한 동작을 수행할 수 있습니다.

SetRotationTypeAI

SetRotationTypeAI는 에이전트 순환을 설정하는 기본 작업입니다. 이 작업은 HFSM을 통해 직접 회전을 설정하는 것이 아니라 회전 유형을 설정하고 이 유형에 연결된 특정 회전 동작이 애니메이션 상태에서 실행됩니다. 회전 유형에 대한 자세한 내용은 회전 챕터를 참조하세요.

SetFocusPointFromMemory

예를 들어 무기가 발사된 경우와 같이 메모리 이벤트가 기록될 때 AI 에이전트는 이 이벤트가 발생한 위치를 볼 수 있어야 합니다. SetFocusPointFromMemory 작업은 포커스 포인트를 메모리 소스의 위치로 설정합니다. 회전 유형을 FocusPoint로 설정하면 에이전트가 이 위치를 찾습니다. EnemyLost 메모리의 경우 속도에 따른 간단한 적 위치 추론을 적용할 수 있습니다. 이렇게 하면 에이전트가 적이 마지막으로 목격된 지점을 직접 쳐다보지 않고 예상된 적의 위치에 따라 위치를 조정할 수 있습니다.

결정

HasMemoryRecord

HasMemoryRecord는 에이전트에서 특정 메모리를 기록했는지를 확인하기 위한 기본적인 결정입니다. 예를 들어 에이전트에 EnemyLost 메모리 레코드가 있는 경우 추적 상태로 전환하여 적을 추격하도록 선택할 수 있습니다.

Back to top