Blueprint 공부 일기 5 ( Pawn Sensing 기반 몬스터 탐지 Behavior Tree, Debug 명령어)

2026. 3. 19. 14:03·Unreal Project/Blueprint

Pawn Sensing Component

오늘은 언리얼 엔진에서 몬스터가 플레이어를 탐지하고 공격하도록 만드는 기능을 구현해보겠습니다.

 

다음의 빨간색 박스는 Pawn Sensing의 옵션 값을 의미하며, 

각 값을 조정함으로써 AI가 플레이어를 인식하는 범위(시야,청각)등을 상황에 맞게 설정할 수 있습니다.

Pawn Sensing이란? 

  • Pawn Sensing은 Unreal Engine에서 AI가 주변의 플레이어(Pawn)을 감지할 수 있도록 해주는 컴포넌트이다.
  • Pawn Sensing Component는 두 가지 감지 기능을 제공한다.
    • Sight ( 시야 감지 ) 
      • 일정 거리 안에 있는 Pawn을 감지
      • 시야각(Fov)안에 들어와야 감지됨
      • 벽 등에 가려지면 감지 불가 
    • Hearing ( 소리 감지 )
      • Pawn이 발생시킨 Noise 감지
      • 거리 기반으로 감지 여부 결정

 

Pawn Sensing을 이용하여 Monster가 Player 감지해보기

 

  • Pawn Sensing을 BP_Bear의 Component로 추가하기 

BP_Bear에 Pawn Sensing Component 추가

 

다음으로 OnSeePawn을 Event를 추가해준다.

 

해당 이벤트는 Pawn Sensing Component가 일정 주기마다 주변을 검사하여, 시야 범위 내에 Pawn이 감지되었을 때 엔진에 의해 자동으로 호출된다. 

 

  • 시야 감지 로직 관련

시야 감지 로직

시야 감지 로직의 순서는 다음과 같다.

1. 현재 몬스터의 State가 현재 Locomotion State 상태 인지 확인한다. 

2. Has Tag를 통해 감지된 Pawn이 Player 인지 판별한다. 

3. 감지된 대상을 Blackboard의 Object 타입 Key에 참조 형태로 저장한다.  

4. 이후 AI 상태를 탐지 상태에 맞게 갱신한다.

 

몬스터 상태 변경 이벤트(Custom Event UpdateState)

 

1. 먼저 몬스터의 현재 상태가 Dead 상태인지 확인한다.

2. Dead 상태가 아니라면, Blackboard의 Enum 타입 Key를 State Key의 기본값(Default)으로 초기화 한다. 

3. 이후 해당 State 값을 기준으로 Switch 문을 통해 각 상태별 Max Walk Speed를 설정한다. 

 

BehaviorTree 노드 수정

 Behavior Tree가 어떻게 수정되었는지 설명해보자면

 

Blackboard Decorator 추가하기

 

Blackboard Decorator를 추가하여 Blackboard에 저장된 데이터(변수)들을 통해 조건을 체크하여 해당 시퀀스의 실행 여부를 결정한다.

 

Blackboard의 어떤 변수를 사용할 지 및 여러 비교 옵션들

 

 

Blackboard Decorator의 Detail에 대해 설명해 보고자한다. 

  • Notify Observer : Blackboard 값이 변경될 때 Decorator가 다시 평가되도록 하는 옵션이다.
    • On Value Change : Blackboard에 저장된 값 자체가 변경될 때마다 Decorator를 재평가하는 방식이다.
    • On Result Change : Blackboard 값의 변화로 인해 조건의 결과(True/False)가 바뀌었을 때만 Decorator를                                                   재평가하는 방식이다.
  • Observer Abort : 조건이 바뀌었을 때, 현재 실행 중인 Behavior를 중단(Abort)할 범위를 결정하는 옵션
    • None : 아무 것도 중단 안함
    • Self : 현재 실행 중인 자기 노드만 중단
    • Lower Priority : 자기보다 우선순위 낮은 노드들을 중단
    • Both : Self의 성격 + Lower Priority 성격 으로 현재 실행중인 노드 중단 + 낮은 우선순위 노드 전부 중단

BlackBoard 의 Tab에서는 Blackboard Key를 설정하고 Key value를 설정해주자. 

그리고 조건문을 Key Query에서 조정해 주면 된다. 

 

Dead 상태일 시 발생하는 행동트리의

 

Monster의 State가 Dead일 때면 몬스터가 죽은 상태이므로 더 이상 행동트리를 바꿔 줄 필요가 없으므로 

Notify Observer는 On Result Change로 그리고 Observer aborts는 None으로 설정한다.

Dead 상태에서 다른 행동트리로 옮겨갈 경우가 없기 때문이다.

 

State가 Chase일 시 발생하는 행동트리

 

Monster의 상태가 Chase일 시 Attack 상태로 전이될 수 도 있기 때문에 Notify Observer는 On Value Change 혹은 On Result Change 둘 중 하나를 사용해도 문제없다. 

 

다만 Observer aborts에서는 Both를 선택하여 해당 상태가 아니라면 다른 상태로 넘어갈 수 있도록 즉시 중단하도록 설정해야 한다.

State가 Attack일 시 발생하는 행동트리

Monster의 상태가 Attack에서 Chase, Dead 상태로 전이될 수 도 있기 때문에 Notify Observer는 On Value Change 혹은 On Result Change 둘 중 하나를 사용해도 문제없다. 

 

다만 Observer aborts에서는 Both를 선택하여 해당 상태가 아니라면 다른 상태로 넘어갈 수 있도록 즉시 중단하도록 설정해야 한다.

 

Set State Task Blue Print

 

여기서는 해당 행동트리가 완료된다면 다음 상태로 전이시켜주기 위해 Blackboard의 Enum 변수 state값과 BP_Bear에 있는 state값을 변경해주기 위해 만든 Task이다.

 

해당 Task가 끝나면 Finish Execute를 해주는 것을 잊지 말자!

 

BP_Bear의 Update State(Custom Event)

 

다음과 같이 BP_Bear에서의 state enum값과 blackboard에서의 enum key값을 통해 접근하여 state값을 바꾸어준다.

 

 

(Tmi. 구현 중 발생한 이슈들) 

게임 실행 도중 Blueprint의 변수값을 바꿀경우

 

Health Power의 값을 게임 실행 도중 바꾸었더니 이벤트 Call 호출은 되지만 Bind 해준 Event가 호출이 안되는 에러가 발생했다. 

Chatgpt에 물어보니 다음과 같이 대답이다.

오류 발생 원인

다음과 같으니 게임 도중 변수값을 바꾸지 않도록 하자.

 

 

몬스터의 패턴 복귀 설정해보기 ( 추적->거리이탈 -> 정찰 복귀 흐름) 

 

몬스터의 경우 플레이어와 너무 멀어지면 플레이어를 계속 쫓아오는 것이 아닌 일정이상 거리가 차이가 난다면,

다시 정찰 페이즈로 넘어가도록 설정해보겠다. 

 

BP_Bear의 Event Graph

 

Event Graph에서 Event Tick함수를 활용하여 현재 상태에 따라 각각의 함수를 실행하도록 설정하였다.

그 중 Chase 상태일때 플레이어와의 거리가 멀면 다시 Locomotion(정찰)로 넘어가도록 설정해보겠다.

 

BP_Bear의 OnChase 함수

 

해당 함수 구현을 살펴보면 플레이어의 위치를 Get Location으로 받아오고 해당 몬스터도 마찬가지로 위치를 가져와

두 벡터의 distance를 계산하여 현재 몬스터와 플레이어 사이의 거리를 구하고 현재 감지되는 pawn Sensing의 반지름보다 떨어진 거리가 더 길다면 현재 Chase state에서  Locomotion으로 변하도록 설정하였다. 

 

구현 영상

 

 

Debug할 때 알면 좋은 명령어들

  • Show Collision

Show Collision을 통해 게임 실행 중에 콜라이더의 상태를 확인할 수 있다.

 

  • ShowDebug Collision 
    • 현재 해당하는 엑터와 충돌되고 있는 정보를 디버깅할 수 있다.
  •  Stat FPS 
    • 현재 FPS 정보를 알려준다.

 

  • Stat Game
    • 게임 로직이 실행 되는 시간 (cpu game thread)을 분석하는 명령어 

 

  • Stat sceneRendering
    • 화면을 그리는 과정(Rendering)의 세부 비용을 보여주는 명령어

'Unreal Project > Blueprint' 카테고리의 다른 글

Blueprint 공부 일기 7 (Camera Shake, State Alias(점프), UI 이벤트)  (0) 2026.03.23
Blueprint 공부 일기 6 (AI Perception, UI , Billboard , Data Table)  (2) 2026.03.20
Blueprint 공부 일기 2 (플레이어 움직임 및 애니메이션, Level Streaming)  (0) 2026.03.16
Blueprint 공부 일기 1 ( 오브젝트 생성 및 충돌 상호작용 )  (1) 2026.03.13
'Unreal Project/Blueprint' 카테고리의 다른 글
  • Blueprint 공부 일기 7 (Camera Shake, State Alias(점프), UI 이벤트)
  • Blueprint 공부 일기 6 (AI Perception, UI , Billboard , Data Table)
  • Blueprint 공부 일기 2 (플레이어 움직임 및 애니메이션, Level Streaming)
  • Blueprint 공부 일기 1 ( 오브젝트 생성 및 충돌 상호작용 )
seonhwan2547
seonhwan2547
seonhwan2547 님의 블로그 입니다.
  • seonhwan2547
    seonhwan2547 님의 블로그
    seonhwan2547
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Unreal Project (17)
        • Khazan 모작 프로젝트 (2)
        • Unreal Study (10)
        • Blueprint (5)
      • Directx11 Project (11)
        • Thymesia 팀 프로젝트 (8)
        • Kaku Ancient Seal 개인 프로젝트 (2)
        • Thymesia Animation Tool 개발 (0)
      • Algorithm (6)
        • Binary_Search (2)
        • Greedy (1)
        • Dynamic Programming (1)
        • A-star (1)
      • Coding Test (31)
        • Brutal Force (2)
        • Sort (5)
        • DFS (3)
        • Binary_Search (4)
        • BFS (6)
        • Hash (2)
        • Dynamic Programming (6)
        • Greedy (1)
        • BackTracking (1)
        • Binary_Tree (1)
      • STL Container (1)
        • unorded_set (0)
        • priority_queue (1)
      • C++ 공부 및 몰랐던점 (8)
        • Smart pointer (1)
      • Visual Studio 설정관련 공부 (1)
      • Console Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 블로그 소개
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Game Programming
    hash
    Unreal
    blueprint
    GameProgramming
    CodingTest
    Unreal Engine
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
seonhwan2547
Blueprint 공부 일기 5 ( Pawn Sensing 기반 몬스터 탐지 Behavior Tree, Debug 명령어)