▣ Wait
Wait Time
설명: 이 노드가 실행되었을 때 얼마나 기다릴지를 초 단위로 설정합니다.
예: 3.0으로 설정하면, AI는 이 노드에서 3초 동안 대기합니다.
▣ Random Deviation
설명: 설정된 Wait Time에 무작위로 더해질 수 있는 시간의 최대값입니다.
예: Wait Time이 3.0이고, Random Deviation이 1.0이면, 실제 대기 시간은 3.0~4.0초 사이가 됩니다.
▣ Task
Ignore Restart Self
설명: 이 옵션은 Behavior Tree가 자기 자신을 다시 시작할 때 이 Task를 무시할지 여부를 결정합니다.
체크 시: 트리가 다시 시작될 때 이 노드는 건너뜁니다.
일반적으로 이 옵션은 루프가 있는 Behavior Tree에서 무한 대기를 방지하는 데 사용됩니다.
▣ Description
Node Name
설명: 노드의 이름입니다. Behavior Tree 내에서 노드를 구분할 수 있도록 사용자 지정 이름을 줄 수 있습니다.
기본값은 Wait이며, 필요에 따라 변경 가능.
▣ void AAIController::SetFocus(AActor* NewFocus, EAIFocusPriority::Type Priority = EAIFocusPriority::Gameplay);
- 이 함수는 AI의 "시선(Focus)"을 특정 Actor로 고정합니다.
그럼 AI의 회전 방향이 자동으로 그 Actor를 향하게 됩니다.
▣ 함께 쓰이는 함수들
SetFocus(AActor*) | 해당 Actor를 바라보도록 지정 |
ClearFocus() | 현재 바라보고 있던 Focus를 해제 |
GetFocusActor() | 현재 Focus 중인 Actor 반환 |
SetFocalPoint(FVector) | Actor가 아닌 좌표를 바라보게 할 때 |
▣ EQS Generator란?
Generator는 AI가 탐색하거나 판단할 수 있도록 점(Point) 또는 Actor 후보군을 생성하는 역할을 합니다.
▣ 1. Actors Of Class
특정 클래스의 액터들을 찾습니다 (예: HealthPack, Enemy, PlayerStart 등).
이 Generator는 지정된 클래스의 모든 액터를 환경 쿼리 항목으로 사용합니다.
설정 가능: 클래스 타입, 검색 반경
▣ 2. Composite
여러 Generator를 조합해서 하나의 Generator처럼 사용할 수 있습니다.
복잡한 조건의 포인트 생성이 필요한 경우 유용합니다.
예: Grid + Cone → 특정 방향성 있는 영역 내 포인트 생성
▣ 3. Current Location
현재 AI의 위치 하나만을 쿼리 항목으로 사용합니다.
대개 다른 위치와의 거리 평가 등에 사용합니다.
예: 자기 자신 기준 거리 테스트용
▣ 4. Perceived Actors
AI Perception 시스템을 통해 감지된 액터들을 가져옵니다.
예: 시야, 청각, 피격 등으로 감지된 대상들
AI가 인지한 객체들만 대상으로 삼기 때문에 실시간 반응에 적합합니다.
▣ 5. Points: Circle
원형 형태로 점들을 생성합니다.
중심점(주로 AI 위치)을 기준으로 일정 반지름의 원을 그리며 포인트 배치
사용 예시: 방어 포지션 배치, 둘러싸기 등
▣ 6. Points: Cone
부채꼴(원뿔) 형태로 점들을 생성합니다.
특정 방향(Forward Vector)을 기준으로 좌우 각도 제한이 있습니다.
사용 예시: 시야 범위 내 탐색, 특정 방향 경계
▣ 7. Points: Donut
도넛(링) 형태로 점들을 생성합니다.
내부 반지름과 외부 반지름 사이의 영역에 점이 생성됩니다.
사용 예시: AI가 일정 거리 떨어진 범위 안에서만 탐색하게 할 때
▣ 8. Points: Grid
평면 위에 격자 형태로 점 생성
넓은 지역을 포괄적으로 검사하고자 할 때 유용
사용 예시: AI가 넓은 범위를 샅샅이 수색할 때
▣ 9. Points: Pathing Grid
Points: Grid와 유사하지만, 내비게이션 가능 여부(NavMesh)에 따라 생성
AI가 실제로 이동할 수 있는 경로 위의 점만 생성됩니다.
사용 예시: 경로 탐색 기반의 전략적 위치 선정
▣ Points: Circle Generator 옵션 상세 설명
Circle Radius | 생성되는 원의 반지름. 예: 1000이면 원의 크기는 지름 2000cm (20m) |
Point on Circle Spacing Method | 점 간의 간격 계산 방법. By Space Between: 일정 거리 간격으로 점 생성 By Number: 점 개수로 생성 |
Space Between | 점 사이의 거리 (위에서 Spacing Method를 By Space Between으로 설정한 경우 사용됨). 예: 50.0이면 각 점 간의 간격이 50cm |
Arc Direction | 선택 시, 두 컨텍스트 간의 방향 기준으로 반원(호) 만들기 가능. (기본 비활성화됨) |
Arc Angle | 점을 생성할 각도. 360.0: 원 전체, 180.0: 반원, 90.0: 사분원 |
Circle Center | 원의 중심이 될 컨텍스트. 기본값은 EnvQueryContext_Querier, 즉 AI 자기 자신 기준 |
Ignore Any Context Actors when Generating Points | 체크 시, 컨텍스트 액터와 충돌되는 점은 무시됨. (주로 겹침 방지용) |
Circle Center ZOffset | 원의 중심 기준으로 Z축(높이) 오프셋 적용. 예: ZOffset = 100이면 중심보다 100cm 위에서 원 생성 |
Trace Data | 점 생성 시 탐색 가능한 지형(NavMesh) 위에 있는지를 판단할 Trace 설정. navmesh trace: 내비게이션 가능한 영역 위에서만 생성 |
Projection Data | 점 생성 후 지형에 투영할지 여부. trace disabled: 투영 안 함. 예: 지형에 맞게 점을 Y축 방향으로 내려 정렬하고 싶을 때 사용 |
▣ EQS Test 옵션 설명
Distance | 특정 컨텍스트(예: AI 자신, 목표 등)와의 거리 계산. 가까울수록 좋거나, 멀수록 좋도록 설정 가능 |
Dot | 방향성 테스트. 포인트가 특정 방향과 얼마나 일치하는지 평가함 (Forward Vector와의 내적) |
Gameplay Tags | 포인트나 액터에 부여된 Gameplay Tag를 조건으로 평가 (예: "Cover", "Enemy") |
Overlap | 포인트가 특정 영역 또는 컴포넌트와 겹치는지를 판단 (콜리전 테스트 기반) |
Pathfinding | 경로 탐색 가능성 테스트. AI가 이 포인트까지 길 찾기가 가능한지 평가 |
Pathfinding Batch | 여러 포인트를 한 번에 경로 탐색 평가. 성능 최적화 버전 |
Project | 포인트를 지정된 지형에 투영하여 유효성 평가. (예: 지면에 투사되었는지) |
Trace | 라인 트레이스를 통해 가시성, 장애물 등을 평가. 예: AI와 포인트 사이에 장애물이 있는지 |
Volume | 포인트가 특정 볼륨 액터 내부에 있는지를 테스트 (예: 특정 영역 안에 있어야 하는 경우) |
▣ EQS 컨텍스트란?
EQS에서 점을 생성하거나 테스트할 때 기준이 되는 참조 위치입니다.
예: Querier(질의자, AI 본인), Player, CoverLocation 등
▣ 오버라이드 가능한 함수들 설명
Provide Actors Set | TArray<AActor*> | 여러 액터들을 컨텍스트로 제공. 예: 모든 적 유닛들, 팀원들 등 |
Provide Locations Set | TArray<FVector> | 여러 위치를 반환. 예: 커버 지점들, 경유지 리스트 등 |
Provide Single Actor | AActor* | 하나의 액터를 컨텍스트로 제공. 예: 플레이어 캐릭터, 리더 유닛 등 |
Provide Single Location | FVector | 하나의 위치를 반환. 예: 플레이어 위치, 타겟 포지션 등 |
▣ Querier Object: 쿼리를 수행하는 AI 또는 객체
▣ Querier Actor: 쿼리를 수행하는 액터 (보통 AI Pawn)
▣ Get All Actors Of Class
선택된 액터 클래스(BP_NormalZor)의 모든 인스턴스를 월드에서 가져옵니다.
출력값: Out Actors 배열
▣ Test
Trace: to Querier on Visibility
AI 자신(Querier)을 기준으로 각 점(Point)까지 Visibility 채널로 라인 트레이스(시야 검사) 실행
가려져 있으면 제외, 보이면 점수를 줌
▣ Test Purpose: Filter and Score
이 테스트는 필터링(통과/탈락)과 점수 부여(스코어링) 둘 다 수행합니다.
Test Comment: 주석용 필드 (빈 상태)
▣ Trace Data
Trace Mode | Geometry by Channel: 콜리전 채널을 사용한 물리 트레이스 |
Trace Channel | Visibility: 가시성 채널을 기준으로 검사 |
Trace Shape | Line: 점과 컨텍스트 간에 선형(Line) 트레이스 수행 |
Trace Complex | ❌ 체크 안 함: 단순 콜리전 사용 (성능 우선) |
Only Blocking Hits | ✅ 체크됨: Block 충돌만 고려 (Overlap 무시) |
▣ Trace from Context
체크 안 됨
기본적으로는 점(Item)에서 컨텍스트(AI) 방향으로 트레이스
체크하면 방향이 컨텍스트 → 점으로 바뀜
Context: EnvQueryContext_Querier
트레이스 대상이 되는 기준 액터 → AI 자신
▣ Advanced
Item Height Offset / Context Height Offset
각각 Z축 위치 보정
예: 캐릭터의 눈높이에 맞춰서 트레이스하려면 +80 등으로 조정
▣ Filter
Bool Match: ✅ 체크됨
트레이스 성공(True) 항목만 필터 통과
즉, 가시성이 있는 점들만 선택
▣ Advanced > Multiple Context Filter Op
All Pass: 모든 컨텍스트 기준에서 필터 통과해야 점 유지됨 (현재는 하나만 있어 의미 없음)
▣ Score
Scoring Factor: 1.0
점수 부여 시 가중치. 클수록 더 높은 영향력
Data Binding: None (동적 데이터 사용 안 함)
▣ Scoring Factor의 의미
1.0 → 점수를 그대로 사용
-1.0 → 점수를 반전해서 사용 (낮은 값일수록 더 좋음)
10.0 → 다른 테스트보다 더 강한 영향을 줌 (우선순위 높음)
▣ 예시 상황
은신 | Trace (가려진 위치 찾기) | Scoring Factor: -1.0 (안 보이는 점 우선) |
공격 | Distance (타겟과 거리) + Trace (시야 있음) | 가까우면서 보이는 점에 높은 점수 |
커버 선택 | Overlap + Trace | 커버랑 겹치고, 시야에서 숨을 수 있는 점만 점수 부여 |
▣ EQSRequest
Query Template | 실제로 실행할 EQS 쿼리 애셋을 지정하는 곳입니다. → 앞서 만든 Donut + Trace 쿼리를 여기 연결해야 합니다. |
Query Config | (선택적) 런타임 시 쿼리에 사용할 추가 파라미터를 배열로 전달 가능 (ex: Query Param 이름에 따라 값 전달) |
Run Mode | 쿼리 실행 결과 중 어떤 항목을 쓸 것인지 설정 |
- Single Best Item | 가장 점수가 높은 항목 1개만 선택 (AI가 주로 사용하는 기본 설정) |
- All Matching | 필터를 통과한 모든 항목 반환 (경로 여러 개 등 상황에 따라 사용) |
Update BBOn Fail | EQS 실행에 실패해도 블랙보드 값을 업데이트할지 여부 ✅ 체크: 실패 시 기존 값 유지 |
EQSQuery Blackboard Key | (체크 시 사용 가능) 쿼리 자체를 블랙보드에서 참조하게 함 (고급 기능) |
▣ Blackboard
Blackboard Key | EQS 결과를 저장할 블랙보드 키 지정 예: TargetLocation → 가장 좋은 위치를 이 변수에 저장 |
▣ Task
- Ignore Restart Self
- 체크 시: 트리가 재시작될 때 이 Task는 무시됨
- 기본값은 꺼져 있음
▣ Description
- Node Name: BT 노드 이름으로, 에디터에서 표시되는 명칭입니다 (예: Run EQS Query)
▣ Run Mode 항목별 설명
Single Best Item | 점수가 가장 높은 단 하나의 항목만 선택 ➡️ 가장 일반적인 선택 방식 (AI가 최적의 위치/대상을 목표로 삼을 때 사용) |
Single Random Item from Best 5% | 상위 5% 이내 항목 중에서 무작위로 하나를 선택 ➡️ AI의 행동에 약간의 무작위성을 주어 예측 불가능성 추가 |
Single Random Item from Best 25% | 상위 25% 항목 중 무작위 선택 ➡️ 더욱 다양한 선택 가능성, 더 부드러운 AI 동작 |
All Matching | 필터를 통과한 모든 항목을 반환 ➡️ 일반적인 AI MoveTo에는 잘 안 쓰이지만, 복수의 위치/대상을 다룰 때 사용 (예: 여러 대상에 순차적으로 작업할 때 등) |
▣ Test
Test Purpose | Filter and Score → 거리 기반으로 필터링도 하고 점수도 부여 |
Test Mode | Distance 3D → 3차원 거리 계산 (XY + Z) |
Distance To | 기준이 되는 대상 (보통 EnvQueryContext_Querier, 즉 AI 자신) |
▣ Filter (필터 조건)
Filter Type | Range → 거리가 특정 범위(최소~최대) 안에 있어야 통과 |
Float Value Min / Max | 거리 필터의 허용 범위 설정 예: Min = 300, Max = 1000이면 300~1000cm 사이만 통과 |
현재는 Min/Max가 둘 다 0으로 설정되어 있어 필터가 실질적으로 비활성화 상태입니다.
▣ Advanced
Multiple Context Filter Op | All Pass: 여러 컨텍스트가 있을 경우 모두 필터 통과해야 함 |
▣ Score (점수 계산)
Clamp Min/Max Type | 점수의 최소/최대값을 강제로 제한할지 여부 (지금은 None, 제한 없음) |
Scoring Equation | Linear → 거리와 점수 간의 선형 관계 사용 |
Scoring Factor | 1.0 → 점수에 곱해지는 가중치. -1.0이면 가까운 게 더 좋은 점수 |
Normalization Type | Absolute → 거리 값을 절대값 기준으로 정규화 |
Reference Value | 기준 거리값으로 비교할 수 있음 (체크 시 활성화) |
▣ 블랙보드 키 예시
TargetLocation | Vector | EQS에서 생성된 이동 위치 |
TargetActor | Object (Actor) | 포커스를 줄 대상 (ex. 플레이어) |
기능사용 키 타입블랙보드 키 예시이유
Move To / EQS 이동 | Vector | TargetLocation | EQS가 생성한 좌표 위치로 이동해야 하므로 |
Set Focus | Object (AActor*) | TargetActor | 플레이어 같은 대상에게 포커스를 주기 위해 필요 |
'[ Unreal5 ] > - 언리얼엔진5 실습' 카테고리의 다른 글
언리얼엔진5 c++ 플레이어 방향으로 수평 회전 (0) | 2025.04.05 |
---|---|
언리얼엔진5 c++ AI 간의 충돌 방지 코드 (0) | 2025.03.29 |
언리얼엔진5 c++ Animistance 데이터 ABP에서 바인딩 사용 (0) | 2025.03.27 |
언리얼엔진5 c++ Random함수 (0) | 2025.03.27 |
언리얼엔진5 c++ EndPlay(Actor 종료시점 호출함수) (0) | 2025.03.22 |
댓글