내일배움캠프 106일차 - AI 길찾기와 관련된 에셋, 명령어
NavMeshBoundsVolume
AI컨트롤러가 탑재된 캐릭터가 길을 찾게하는 볼륨.
프로젝트 세팅에서 Static / Dynamic / DynamicModifiersOnly 로 내비메시 사용방법을 설정 가능하다.
- Static
: 내비게이면 메시가 오프라인에 생성되어 레벨과 함께 저장.
: 런타임에 로드만 되며, 메시가 변경되지 않음.
- Dynamic
: 내비게이션 메시가 오프라인에 생성되어 저장되거나, 런타임에 새로 생성됨.
: 런타임 중 내비게이션 관련 데이터 변경 시, 변경된 타일에서 메시가 재생성되어 업데이트.
- DynamicModifiersOnly
: 내비게이션 메시는 오프라인에서 생성되어 레벨과 함께 저장.
: 런타임에서는 내비게이션 영역, 링크, 동적 오브젝트 등과 같이 메시의 일부만 수정하여 업데이트.
: 새로운 메시 표면은 생성되지 않음. 콜리전 데이터 캐시를 통해 타일 처리 비용을 최대 50% 절감.
주의) DynamicModifiersOnly는 영향을 줄 액터 내에 'NaviModifierVolume'이 존재해야 한다.
※ 세 가지 타입의 장단점을 신중히 고려하여 사용해야한다.
캐릭터의 이동에 따라 내비메시를 동적생성하는 방법
NavigationInvoker 컴포넌트는 이를 가진 액터의 주변에만 내비메시를 연산하도록 유도할 수 있다는 특징이 있다. 이를 통해 연산 비용을 절감할 수 있을 것이다.
내비게이션 메시에 장애물 등록
NavModifierVolume을 월드 내에 추가해 Movable로 설정하고, 영역 클래스를 Obstacle로 설정해주면 해당 영역의 이동비용이 증가하여 AI가 해당 영역으로의 이동을 피하게 할 수 있다.※ 특정 포인트를 가리키는 액터가 필요하다면 TargetPoint 액터를 배치할 수 있다.RVO(Reciprocal Velocity Obstacles) - 동적 장애물 충돌회피
다른 캐릭터 등 동적의 장애물의 충돌을 방지하기 위한 시스템. 아래와 같이 설정하면 RVO로 간단히 설정할 수 있다.
GetCharacterMovement()->bUseRVOAvoidance = true;
: RVO 설정 여부 true/false
GetCharacterMovement()->AvoidanceConsiderationRadius = 200.0f;
: 동적 장애물의 감지 범위
: 이 영역에 들어오면 회피를 시작한다.
: 값이 적을 수록 갑작스런 회피를 하여 충돌이 발생할 확률이 높아진다.
: 값이 높을 수록 멀리서부터 부드러운 회피를 하지만 반경이 넓어져 연산비용이 증가한다.
GetCharacterMovement()->AvoidanceWeight = 0.5f;
: 회피 우선순위를 결정한다.
: 0.0f에 가까울수록 이 캐릭터가 다른 캐릭터들을 먼저 회피한다. (낮은 계급이 됨)
: 1.0f에 가까울수록 다른 캐릭터들이 이 캐릭터를 먼저 회피한다. (높은 계급이 됨)
댓글
댓글 쓰기