언리얼 엔진 5/개발 일지 65

[UE5] 블루아카이브 TPS게임 개발일지 (24) - EQS를 이용한 엄폐 AI 1

적 AI의 엄폐 시스템을 만들기 위해서는 EQS를 사용할 것이다. EQS는 Environment Query System의 약자이다.직역하면 환경에 질의를 한다는 뜻이 된다. 즉 AI가 주변 환경에 맞춰 최선의 선택을 할 수 있게 해주는 시스템이다. 공식 문서의 설명은 여기를 참고하면 될 것같다.https://docs.unrealengine.com/5.3/ko/environment-query-system-in-unreal-engine/ 인바이런먼트 쿼리 시스템인바이런먼트 쿼리 시스템(EQS)이 무엇인지, 이 시스템으로 어떻게 환경 데이터를 쿼리하는지 설명합니다. 그런 다음 이 데이터를 AI가 취할 행동을 결정하는 프로세스에 사용하도록 제공할 수docs.unrealengine.com 이 시스템을 활용하여 적..

[UE5] 블루아카이브 TPS게임 개발일지 (23) - 비헤이비어 트리를 이용한 적 AI 제작 4

이번엔 촉각, 예측 AI 기능을 추가할 것이다.  AI_Enemy (AI Controller) 블루프린트의 AIPerception에 또 새로운 config을 추가해주었다. 이것들은 둘다 딱히 내부적으로 설정할 건 없다. 그냥 추가만 해주면 된다.  AI에 촉각이 생겼으므로 촉각을 인지하여 블랙보드 키를 세팅해주는 함수를 만들 차례이다.위의 이미지의 좌측 Functions 섹션에 Handle Touch Event를 추가해둔 것이 그것이다.  함수 내부는 기존 것들과 거의 비슷해서, 설명은 주석이 달려있는 블루프린트 이미지 한 장이면 충분할 것 같다.   이제 플레이어의 위치를 예측하는 함수, Handle Prediction의 내부를 구현할 차례이다. (마찬가지로 AI_Enemy 블루프린트 이미지를 보면 이..

[UE5] 블루아카이브 TPS게임 개발일지 (22) - 비헤이비어 트리를 이용한 적 AI 제작 3

시작에 앞서, 비헤이비어 트리의 Chase Selector 부분을 조금 수정했다. 플레이어가 숨어도 확실하게 접근해서 확인하도록 하기 위해서이다.   이제 비헤이비어 트리에서 쓴 BTTask를 만드는 과정을 담을 것이다.BTTask 역시 블루프린트 에셋으로, 다음과 같이 만들 수 있다. BTTask_MoveRandomLocation 이름으로 블루프린트를 만들어 이벤트 그래프를 열면, 좌측의 My Blueprint 탭의 Functions 섹션에 (5 Overridable) 표시가 있을 것이다. 말그대로 BTTask Blueprint Base 부모클래스에 정의되어있는 함수를 재정의할 수 있는 것이다. Override 버튼을 눌러, Receive Execute AI를 만들고 노드를 다음과 같이 짜주었다.  G..

[UE5] 블루아카이브 TPS게임 개발일지 (21) - 비헤이비어 트리를 이용한 적 AI 제작 2

지난 포스팅에 이어서 BB_Enemy와 BT_Enemy의 내용을 작성하고자 한다. SelfActor는 기본적으로 있는 키이고, 나머지 3개는 New Key 버튼을 통해 직접 추가한 것이다.각각의 의미는 다음과 같이 사용할 것이다.SelfActor: 말그대로 자기자신을 의미. 여기서는 Actor로써의 BP_Enemy이다.TargetActor: 인지할 대상인 액터를 의미. 여기서는 Actor로써의 BP_KannaCharacter가 될 것이다.TargetLocation: AI가 타깃이 있을 것으로 추정하는 위치를 나타낼 것이다.LastKnownLocation: 타깃이 시야에 있다가 사라졌을 때, 사라지기 전 마지막 위치를 나타낼 것이다.  비헤이비어 트리에서 이 키들을 사용할 것이다. 참고로 아래 이미지들에서..

[UE5] 블루아카이브 TPS게임 개발일지 (20) - 비헤이비어 트리를 이용한 적 AI 제작 1 (+AI Controller)

이제 적이 플레이어를 인지하고, 이동하여 공격하는 AI를 만들 것이다. 게임에서 전통적인 AI 구현 방식은 스테이트 머신이다. 공격, 이동, 도망 등을 스테이트로 만들어 전환하도록 하여 동작시키는 방식이다.다만 AI가 복잡해짐에 따라 전환조건이 애매해지고, 머신이 지나치게 복잡해지는 단점이 있었다. 이러한 단점을 보완하여 나온 것이 비헤이비어 트리이다.   놀랍게도 과거 김용하 PD님이 비헤이비어 트리에 관하여 인터뷰한 내용의 글이 있다. https://blog.naver.com/panmocle/220649357866 [판모클] 게임 AI에 대해서 with 큐라레 마법도서관 김용하PD님  이번에는 모바일 게임 "큐라레:마법도서관"의 김용하PD님을 모시고, AI 중...blog.naver.com  간단히 ..

[UE5] 블루아카이브 TPS게임 개발일지 (19) - 총알 투사체 제작 (Projectile Movement)

본론에 앞서, 칸나의 헤일로가 딱 붙어있기보다는 자연스럽게 캐릭터를 따라가게 했으면 좋겠다는 의견이 있었다. 원래는 칸나의 머리에 소켓(Halo_Socket)을 만들어 헤일로를 그대로 넣었었는데, 이제 헤일로를 별도의 액터로 만들고 칸나 블루프린트에서는 헤일로를 삭제했다. 헤일로가 칸나의 머리로 천천히 따라가게 하는 것은 다음 포럼의 글을 참고했다.https://forums.unrealengine.com/t/how-to-make-objects-follow-the-player/468227/4 How to make objects follow the player?The problem you’ve got is you have to either use AI or tick, you can’t use both, th..

[UE5] 블루아카이브 TPS게임 개발일지 (18) - 적 이동 애니메이션

지금까지 Enemy 블루프린트의 애니메이션에 애니메이션 시퀀스 하나만 박아두었었다. 슬슬 체계화된 애니메이션이 필요할 것 같아, 애니메이션 블루프린트를 만들기로 했다. 우선 Mixamo에서 Idle, 걷기, 달리기 애니메이션을 가져와, 총 사이즈에 맞게 적절히 수정해주었다.   그리고 이 세 애니메이션을 기반으로 한 Blend Space 1D를 만들었다. Blend Space는 일전에 칸나의 무빙샷 애니메이션에 사용한 바가 있다. https://ciel45.tistory.com/15 블루아카이브 TPS게임 개발일지 (6) - 조준 개선 (Layered Blend, Blend Space)·지금까지 조준 기능이 카메라 줌 인 부분만 구현되어있었다. 이번에는 조준한 채로 걸어다닐 수 있고, 카메라를 좌우로 돌..

[UE5] 블루아카이브 TPS게임 개발일지 (17) - 적 무기 모델링 임포트

이번엔 적들이 쓸 무기 모델링을 임포트하였다.  다시 한번 원화를 살펴보니, 들고있는 무기가 M16과 비슷하다는 느낌이 들었다.따라서 sketchfab에서 적절한 M16 모델을 구했다.https://sketchfab.com/3d-models/low-poly-m16-58af6360d8864eb79f47638fe8d94378 Low Poly M16 - Download Free 3D model by samanthacford - SketchfabAn American classic and former service rifle for the U.S. military. The Weapon comes in 3 configurations, the first with the A2 handguard, the second c..

[UE5] 블루아카이브 TPS게임 개발일지 (16) - 적 사망 연출 2

래그돌이 뭔가 이상한 이유는 Physics Asset이 엉망이었기 때문이다.캐릭터를 임포트한 뒤 아무것도 건드리지 않은 Physics Asset이다. 캡슐이 마구 겹쳐있고, 방향도 중구난방이며, 누락된 bone도 많은 것을 볼 수 있다.  그래서 이걸 계속 수정해보다가, 그냥 Physics Asset을 새로 만들기로 결정했다.     피직스 에셋을 새로 만든 뒤 필요없는 뼈들은 버리고, 우선 캡슐의 크기를 캐릭터에 맞게 잘 조정하였다. 그리고 관절부에 초록색, 빨간색 표시가 있는 것이 보일 것이다.이는 Constraint로, 관절이 움직일 수 있는 범위를 제한해준다.  우측의 디테일 패널에 angular를 검색해두고 작업하면 편하다. 빨간색 3d 원뿔 표시는 디테일 패널의 Swing 1,2 Limit와 ..

[UE5] 블루아카이브 TPS게임 개발일지 (15) - 적 사망 연출

적에게 데미지를 주는 기능을 만들었으니, 체력이 0이 되면 죽게 하도록 할 것이다. 사망 애니메이션을 따로 준비하지 않고, 래그돌(Ragdoll) 효과를 사용할 것이다.혹시 래그돌이라는 단어가 익숙치 않다면, 캐릭터가 힘빠진 듯이 흐느적거리면서 죽는 그것이라고 생각하면 된다.  작업에 앞서, 래그돌을 적용할 캐릭터의 스켈레탈 메시가 Physics Asset을 가지고 있는지 확인해주어야 한다.스켈레탈 메시를 정상적으로 임포트했다면 자동으로 추가되어있을 것이다. 상단 우측의 Simulate 버튼을 눌러 래그돌을 바로 시험해볼 수도 있다.    우선 Enemy 클래스가 소유하고 있는 Attribute 클래스에 IsDead 함수를 추가하였다. 말 그대로 죽었는지 알려주는 함수이다.FORCEINLINE bool ..