🎮Unreal4/Blueprint 47

[UE4] Enemy AI -7 : 장거리(Range) AI Avoid 기능 (EQS_Avoid, Warp)

🔥 장거리(Range) AI Avoid 기능 플레이어가 장거리 AI에게 가까이 다가갔을 때 플레이어의 시야에 보이지 않게 도망가는 회피 기능을 구현해보았다. 가장먼저, EQS를 이용하여 800~1200 크기의 랜덤한 Circle을 Player 중앙에 그려주고, 해당 위치에서 Player->Querier 방향과, Player->Item 방향을 내적하여 Player와 Item 사이의 각도를 구한다. 즉, AI에서 Player 방향이면 1을 반환하는 결과가 나온다. 장거리 AI가 움직이는 비헤이비어 트리에 Avoid를 추가하였다. 500 거리 안으로 들어오면 Equip을 통해 AI의 Warp 모드를 실행시키고, EQS를 통해 플레이어의 뒷방향으로 도망갈 위치를 찾는다. 이후 Action을 통해 해당 위치로 회..

[UE4] Enemy AI -6 : EQS를 이해하기 위한 예제 (Distance, Dot, Trace/Visibility)

💡 EQS를 이해하기 위한 예제 EQS의 테스트를 작성할 땐 처음에 무조건 점수(Score)값이 Test Purpose에 하나 존재해야 한다. 점수가 안나오면 Filter Only를 맨위에 쓸 수 없다. 🚩 예제1 - Distance. Filter와 Score를 적용하고 2D 거리를 측정하여 거리 300 이하는 자르기 🚩 예제2 - Dot. Enemy AI(Querier)와 Item 간의 내적 값 중 0.3 ~ 0.75 사이의 값만 선정하기 🚩 예제3 - Trace (Visible). Line 충돌을 이용하여 전 채널의 위치를 검사하여 가려진 곳을 1로 출력 🚩 예제4. 위 3개의 예제를 모두 적용하여 AI가 볼 수 없는 벽 뒤에 위치를 반환하도록 설정 EnvQueryContext Distance나 Do..

[UE4] Enemy AI -5 : 장거리(Range) AI, EQS란?(Environment Query System)

🔥 장거리 AI : BT_Range 장거리 Enemy AI 를 구현해보았다. 근접 AI 였던 BT_Melee와 거의 비슷하지만 몇몇 다른부분만 살펴보도록 하자. 1. 장거리 공격 기능 (BT_Range) 장거리 AI는 감지범위(1000)에 들어오면 감지를 시작하고, Avoid Distance(500) 밖에 위치하면 장거리 공격으로 FireBall을 쏘도록 구현하였다. 반대로 Avoid Distance안에 위치하면 Enemy가 플레이어와 가까워지지 않도록 회피하는 기능을 구현하였다. 장거리 AI는 순찰이나 추적기능을 전부 제외하고, 위치에 서있다가 범위에 들어오면 플레이어를 공격하고, 가까워지면 회피하는 구조로 구현하였기 때문에 비헤이비어 트리도 위와 같이 작성하였다. 다음과 같이 일정범위 안에 들어가면 ..

[UE4] Enemy AI -4 : 근접(Melee) AI 완성 (Equip Task, Action Task, Hitted Task)

👊 완성된 근접(Melee) 비헤이비어 트리 : BT_Melee Enemy가 플레이어를 감지하고 추적할 때 일정거리 안에 도달하면 Enemy를 공격(Action) 상태로 만들어 공격하는 AI 기능을 구현하였다. ( 이전에 AI 와 플레이어의 거리가 150 이하이면 Action 상태로 변화하도록 구현해놓았다. ) 공격을 하기에 앞서 Enemy가 먼저 Weapon을 장착(Equip)해야 하기 때문에 장착을 먼저 구현하였다. 1. 무기 장착하기 - Equip Task : BTTask_Equip Equip Task가 실행되면 무기 장착에 관한 조건문이 차례로 실행된다. 이미 무기가 장착되어있다면 바로 성공을 반환하는 Finish 함수를 호출하고, 장착되어있지 않다면 Sword, Warp, FireBall 종류에..

[UE4] Enemy AI -3 : 경로 순찰 (Spline Component, Spline Point)

Enemy AI가 Random 위치로 이동하며 순찰하는 기능을 구현했었는데, 이번에는 정해진 경로를 순찰하도록 구현해보았다. 🛣️ 경로 액터 만들기 : BP_PatrolPath 블루프린트 Actor 클래스(BP_PatrolPath)를 하나 생성하여, 컴포넌트로 Spline을 추가해주었다. Spline은 곡선을 의미하는데, 커브를 구현할 때 곡선을 꺾어 만드는것이 베지에 곡선(Bezier Curves)이었다. 또 그렇게 만들어진 경로를 실제로 렌더링해서 만들어 보여줄땐 캣멀롬 방식(Catmull-Romm)을 사용한다. 베지에 곡선과 캣멀롬 방식은 아래 게시글에 정리해두었다. 2023.02.22 - [Unreal4] - [UE4] 베지에 곡선(Bezier Curves), 에르밋/허밋 곡선(Hermite Cu..

[UE4] Enemy AI -2 : 랜덤 순찰, 근접 추적 (서비스, Task(Speed, Patrol))

Enemy가 순찰하다가, 플레이어를 발견하면 추적을 시작하고, 일정 거리 안으로 들어오면 공격을 수행하는 Enemy AI를 만들어보았다. 이때, 순찰은 랜덤한 위치로의 순찰 경로를 가지고, 해당 경로를 따라 움직이도록 구현하였다. 📚 Class 생성 먼저, BT_Melee(근접)이라는 비헤이비어 트리와, AI Controller, Enemy AI 블루프린트를 각각 생성해주었다. 비헤이비어 트리에서는 서비스라는 기능을 사용할 수 있는데, 서비스는 무언가 값을 제공하기 위해 사용된다. 블루프린트 클래스에 BTService_BlueprintBase를 상속받아 서비스 클래스를 생성해주었다. 🚩 Service Class 서비스는 Composites 노드에도 붙을 수 있고, Task에도 붙을 수 있는데 어디에 붙는..

[UE4] Enemy AI -1 : 감지기능 (AIController, AIPerception, 디버그모드, On Possess, 내비게이션 메시, Task)

AIController와 비헤이비어 트리, 블랙보드를 이용한 Enemy AI 기능을 하나씩 구현해보았다. 가장 먼저 언리얼의 막강한 기능인 "감지" 기능을 구현해보았다. 🔦 감지 기능 AIController를 상속받아 생성한 블루프린트 클래스에서, AIPerception 컴포넌트를 추가한 뒤, 디테일 패널의 AI Perception 값들을 수정하면 감지 기능을 구현할 수 있다. AI Damage sense config - AI가 데미지를 받는 순간 데미지를 준 객체를 감지하기 시작한다. - Apply Damage로 데미지 주면 사용 가능하다. AI Hearing config - 소리가 들리면 감지하기 시작한다. - 이때 소리는 mp3, wav 파일같은 사운드를 듣는것이 아니라 Make Noise 함수를 ..

[UE4] AIController, Behavior Tree, 블랙보드(Blackboard)

Behavior Tree를 이용하여 몬스터 AI를 구현하는 방법에 대해 공부해보았다. 👤 AIController 몬스터 AI를 구현할 때 컨트롤러라는게 필요하다. 명령의 주체는 캐릭터가 아니라 컨트롤러이다. 언리얼에서는 빙의라는 표현을 사용하여 게임 플레이 시 자동으로 플레이어에게 빙의되어 플레이어를 움직이거나 입력받는다. Player Controller를 생각하면, 플레이어를 움직이다가 말을 타면, 말이 움직이게 된다. 그럼 말이 Controller에 빙의된 것이다. 반대로, 말에서 내리면 다시 플레이어가 Controller에 빙의되는것이다. 이후 Controller가 키보드 입력이나 네트워크 입력등을 받아서 Controller가 빙의한 캐릭터에게 전달하여 제어하는 것이다. AI도 마찬가지고, AI C..

[UE4] Parkour 기능 -3 (Slide, Short/Normal/Wall)

🏃‍♀️ 파쿠르 Type별 체크하기 : Slide Do Parkour 함수에서 Climb 파쿠르가 아니라면 다음으로는 Slide 모드가 가능한지를 검사한다. 슬라이드를 실행할때는 캐릭터의 발 앞에 붙어있는 Floor Arrow에 충돌되는 장애물이 있는지 검사해야 한다. 발 앞에 무언가가 있다면 슬라이딩이 불가능하기 때문에, 충돌되는 장애물이 없는 경우 Slide Mode 설정을 시작한다. Slide 모드도 Climb와 마찬가지로 일정 거리 안에 위치하는 경우에만 파크루를 실행할 수 있도록 조건문을 수행해주었다. Slide Mode는 캐릭터가 슬라이드할 수 있는 장애물 아래의 공간을 Box Trace로 검사하였다. 캐릭터 발 앞에 위치하는 Floor Arrow를 장애물의 Extent 값인 높이만큼 위로 올..

[UE4] Parkour 기능 -2 (Climb, Set Movement Mode, 루트 모션)

Parkour 기능을 구현하기 위해 이전 게시글에서 파쿠르가 가능한지 판별하는 검증절차 코드들을 작성하였다. 이제는 파쿠르가 가능한 상황일 때, 다양한 종류의 파쿠르를 실행하도록 실질적인 플레이부분을 구현할 것이다. 🔎 Parkour Data 만들기 파쿠르 데이터를 만들기 위해, 파쿠르의 종류를 먼저 생성해주었다. 파쿠르는 총 7가지의 열거형 변수를 만들어 구현하였다. 파쿠르의 종류로는 Climb, Slide, Short, Normal, Wall이 있고 Fall은 캐릭터가 높은곳에서 아래로 떨어졌을 때 구르기를 위한 Type이다. Max는 파쿠르 상태가 아닌 경우(Idle 일때) 설정할 Type으로 생성하였다. 만들어진 Parkour 열거형을 기반으로 실행될 몽타주와, 파쿠르 실행 가능한 최소/최대 거리..

728x90