본문 바로가기

블루프린팅/10. AI적

[10.AI적업그레이드] 노이즈 이벤트 데이터 해석및 저장

BP_EnemyController에 추가한 폰 감지 컴포넌트는 적 AI에서 시각및 청각 감지를 모두 구축할 수 있는 기반을 제공한다.

폰 감지 컴포넌트가 감지할 때마다 활성화되는 노이즈 청취시 이벤트를  사용한다.

다음 단계에서 적들이 가가운 거리에서만 노이즈를 감지하도록 할 것이다.

PawnSensing에서 On Hear Noise는 OnSeePawn이 작동하지 않을 경우에만 동작되도록 되어 있다. 

 

BP_EnemyController를 연다

1. 컴포넌트 패널에서 폰감지 컴포넌트를 선택한다. 디테일 패널에서 이벤트 카테고리를 살펴보고 노이즈 청취시 이벤트의 녹색 버튼을 클릭해서 이벤트그래프에 추가한다.

2. 노이즈 청취시 에는 사운드위치와 적 사이의 거리가 HearingDistance의 값보다 작은 경우  UpdateSoundBB 매크로를 호출한다.

2-1. 노이즈 청취시 (PawnSensing)노드의 흰색 핀에서 와이어를 끌어서 Branch노드를 추가한다. 현재 소리감지가 안되는 이유가 PawnSensingComponent를 추가했는데도 OnHearNoise(PawnSending)이 안되어 Branch노드로 출력이 전혀 안된다. 원인은 자중에 찾아 보겠습니다. ㅠㅠ

 

3. Vector Length 함수를 사용해서 사운드 위치와 적 위치 사이의 거리를 계산하는 표현식을 만든다. 이 표현식의 결과가Hearing Distance값보다 작으면 Branch 노드의 True핀이 실행된다. True를 끌어 Update SoundBB를 추가한다. Location도 On Hear Noise에서 연결한다.

4.Branch  노드의  Condition핀에서 Less 노드를 만들고 아래쪽입력에 Get Hearing Distance를 연결한다.

5. 빈곳에 우클릭해서 Get Controlled Pawn노드를 추가하고  Return Value핀에서 GetActor Location노드를 추가해 적 위치를 가져온다.

6. On Hear Noise노드의 Location 핀에서 - 노드를 추가하고 아래핀에 Get Actor Location노드의 Return Value를 연결한다.

7. 빼기 노드의 출력핀에서 와이어를 끌어서 Vector Length 노드를 추가한다.

8. Vector Length 노드의 Return Value을 작음 노드의 상단 입력 핀에 연결한다.

Vector Length노드의 Return Value는 사운드의 위치와 적 위치 사이의 거리이다.

9. 블루프린트를 컴파일하고 저장한다.

10. 이벤트 그래프는 소리를 감지하면 매크로 UpdateSoundBB를 이용 블랙보드의 LocationOfSound,HasHeardSound를 갱신한다. 조건의 적과 나의 위치가 Hearing Distance보다 작을 경우 이다.

이제 소리를 감지할 수 있도록 적 AI를 수정했으므로 FirstPersonCharacter블루프린트에 청력반응을 트리거하고 플레이어 동작에 연결할 노드를 만들어야 한다.