안녕하세요. '언리얼로 만들어보는 RPG'의 필자입니다. 저번 작성글에서는 AIController와 AnimInstance를 구성하려고 했었으나, AIController를 설명하다가 언리얼에서 AI를 구성할때 사용하는 시스템들에 대한 소개글로 마무리를 지었습니다. 원래 흐름대로라면 AnimInstance를 해야겠지만 노선을 좀 변경해서 몬스터 클래스를 우선 구성해 보도록 하겠습니다.
오늘도 어김없이 돌아온 간략한 견적짜보는 시간입니다.
1. 몬스터가 죽으면 게임내에서 보이지 않도록 작업해줍니다.
2. 몬스터는 무기를 교체하지 않고 고정무기 1종을 사용합니다.
작업에 들어가기전 쓸데없는 이야기로 1번항목의 죽었을시 제외시키는 작업은 해놨는데.. 게으른 필자는 취직에 목이말라서 재활용하는 루틴을 전혀 작업하지 않았습니다. 지금보면 참 아까운부분이기도하고 좀더 잘할 수 있었을텐데 하고 생각이 드네요. 가장 기초적인 오브젝트 풀링도 적용하지 않았었고 너무 보여주기식으로만 만들었던게 아닌가 싶습니다.
상속구조또한 너무 대충 만들었습니다. 플레이어 캐릭터나 몬스터나 결국 캐릭터인데 최상위 부모 클래스를 엔진에서 제공하는 ACharacter가 아니라 해당 클래스를 랩핑한 클래스를 써야했었지요.
이 글을 읽고계신 여러분도 급한 마음이 앞서시겠지만 조금만 시간을 들여서(사실 조금이 아닐수도 있습니다) 구조적으로 아름답고 기본이되는것을 잘 해두셔야 합니다. 아닐수도 있으나 필자의 경험상 회사에서는 그런걸 가르쳐주거나 할 시간을 따로 내어주지 않으니까요. 미리 해보고 회사에 가는것이 사수가 없을때 자신을 도와줄 것입니다.
MonsterBase.h
아까 견적을 낸 2번항목을 보면 아시다시피 몬스터는 고정된 무기 한개를 사용할 예정입니다. 보통이라면 근접몬스터인가 원거리 몬스터인가에 대한 여부를 나누고 그 이후에 또 몇가지를 고려해야 했지만 필자는 근접몬스터 1종만을 만들어서 공격판정에 사용할 CapsuleComponent를 바로 선언해 줬습니다.
이외에는 특별한것은 별로없고 적대적대상에게 가할 공격력, 현재 몬스터의 여러가지 수치를 담은 Ability등 몬스터를 구성하는데 필수적인 것들이 들어가 있습니다. 제대로 사용은 하지 못하였으나 눈여겨 볼만한것은 AttackAble 이라는 bool배열 변수인데요. 해당 변수는 몬스터가 여러 공격방식을 가졌을때 임의의 공격방식이 사용 가능한지에 대한 여부를 판단하는 용도입니다. 적절한 방식은 아닌거 같지만 필자는 이렇게 했었습니다...
InGameData.h
몬스터에게는 총 5가지의 상태를 부여하려고 했었습니다. 네... 과거형인 이유는 원거리 몬스터를 염두해두고서 작성한 것이였는데 실상은 근거리 몬스터 1종만 존재하기 때문입니다.
MonsterBase.cpp
여기서도 필자가 실수한게 또 나타났군요. 사실 처음 작업한거다 보니까 좀 부드럽게 진행하지 못했던것 같습니다. 아까 헤더파일에서 보시면 HitCapsule 변수를 만들어두고 생성자 쪽에서 초기화 해주지 않았습니다. 그럼 해당 변수를 어디서 할당해주냐하면.. 그건 블루프린트에서 하고있었다는 충격적인 진실이 있죠.
BpClockWlaker
몬스터 종류가 하나뿐이라서 이 외의 다른 작업은 전혀 필요가 없습니다. 실무작업을 해보니까 데이터테이블과 몬스터 스폰을 관리하는 객체를 만드는등 구조적인 부분의 작업이 더 필요하다는걸 알게됐습니다. 하지만 지금 정리하고 있는 이 프로젝트와는 관계가 없는 이야기이므로... 언젠가 기회가 된다면 따로 글을 작성해 보도록 하겠습니다.
'프로그래밍 > 언리얼' 카테고리의 다른 글
언리얼로 만들어보는 RPG - AI(3) (0) | 2021.01.24 |
---|---|
언리얼로 만들어보는 RPG - AI(2) (0) | 2020.08.28 |
언리얼로 만들어보는 RPG - AI(1) (0) | 2020.07.05 |
언리얼로 만들어보는 RPG - 스킬창 구현(3) (0) | 2019.04.10 |
언리얼로 만들어보는 RPG - 스킬창 구현(2) (0) | 2019.04.04 |