ProjectS는 나만의 게임을 만들어보기 위해 시작한 프로젝트이다.
ProjectS는 디펜스 게임으로 성으로 몰아쳐오는 적들에게서 성과 플레이어 본인을 지켜내는 게임이다.
이 글은 게임을 만드는 과정과 그 안에서 생겨나는 크고 작은 문제점들을 기록하고 어떻게 해결했는지를 정리한다.
플레이어에 박스 콜리전을 추가하여 적이 박스 콜리전 내부로 들어오면 배열에 적을 저장하고 총알을 스폰한다.
총알은 저장된 적 중 가장 가까운 적의 장소로 이동한다.
총알의 스폰 빈도와 데미지는 플레이어의 스탯에 근간한다.

플레이어의 박스콜리전에 액터가 인식되면 그 적에게 자동으로 총알이 이동하도록 만들어준다.
->
적을 배열에 묶어 Find Nearst Actor를 활용하여 총알이 가장 가까운 적을 바라보고 스폰되도록 만들어주었다.
총알이 다른곳을 바라보고 적을 향해 진행하는 현상이 발생
->
총알의 스폰 위치는 플레이어의 위치, Rotation은 FindLookatRotation을 활용해 적과 나의 위치를 통하여 새로운 Rotation을 만들어 주었다.
특정 몹의 경우 플레이어를 무시하고 성문으로 뛰어간다.
총알의 이동을 바라보는 방향의 XVextor로 이동하도록 만들었더니 몬스터가 총알을 피하는 상황이 발생
->

틱마다 현재 위치와 현재위치에서 제일 가까운 적의 위치를 통해 총알의 회전을 계속 조정해주고 조정된 방향의 XVextor로 이동해 계속 몹을 추적하도록 만들었다.
기본 몹을 만들고 궁수를 만드는 과정에서 기본 몹의 블루프린트로만 캐스팅해놓아 다른 몹을 인식하지 못했다.
->
Tag를 활용하여 모든 적의 캡슐 컴포넌트에 Enemy 태그를 부여하고 Enemy액터 배열을 생성하여 Enemy 태그를 가진 액터를 적 배열에 묶어 해결해주었다.

먼저 몹의 이동을 위해서 몹과 플레이어의 거리를 구할 필요가 있어 적 블루프린트 안에 Update Distance함수를 생성하고 틱에 연결하여 실시간으로 거리를 보고받도록 만들었다.

거리를 보고 받은 뒤 현재 공격중이 아니고 플레이어와 거리가 150이 넘으면 이동하도록 만들었다.
->몹이 처음에 공격을 한 번하고 이동하는 현상이 발생
SKDis의 초깃값을 1000으로 설정

ABP에서는 본인의 이동 속도를 측정하여 Idle/Run의 블렌드 스페이스를 조정하고 플레이어가 가깝다면 Attack, Attack이 끝나면 다시 Idle/Run를 진행한다.
->IsAttacking? 변수는 캐릭터BP에서 움직임을 조정하는데 사용

캐릭터 메시에 캡슐을 달아 공격 범위를 지정하였다.

캡슐이 Player라는 태그를 가진 콜리전과 오버랩될 경우 대미지를 입힌다.

대미지가 들어가는 타이밍이나 여러번 들어가는 것을 방지하기 위해 노티파이를 설정

ABP에서 커스텀 이벤트를 호출하고

캐릭터BP에서 캡슐을 키고 끄는 커스텀 이벤트를 작동한다.
궁수를 만드는 과정에서 처음에는 플레이어와 비슷한 메커니즘을 활용하여 만들려고 하였다.
박스 콜리전을 이용하여 궁수가 성문을 인식하고 화살을 발사하는 구조.
하지만 플레이어가 궁수에게 총알을 발사하면 박스 콜리전에 막히는 현상이 발생하였다.
->
궁수의 박스 콜리전을 삭제하고
(태그 문제로 해결 가능)

궁수는 플레이어를 무시하고 성문을 직접 공격하도록 만들려고 하였다.
성문은 움직임이 없으니 블랙보드 키값을 벡터로 직접 설정해주었지만 움직이지 않았다.

블루프린트에서 전달해도 작동하지 않았다.
->
플레이어의 시작 위치가 성문의 위치와 유사하기에 플레이어의 시작 위치 값 근처로 이동하고 공격에 무한 루프를 걸어주었다.
(웹서핑중에 FNavLocation을 발견하고 찾아 봤지만 근본적인 문제는 해결될 것 같지 않았다.)
->

블랙보드 키를 전달하는 과정에서 Key Name을 Make Literal Name으로 변경한 뒤 키는 인식이 됐지만 여전히 궁수는 움직이지 않았다.
해결
문제는 다른 곳에 있다는 확신이 들었고 성문 위치를 바닥이 있는 곳으로 바꿔줬더니 궁수가 움직였다. 성문의 위치가 AI가 갈 수 없는 곳이라고 판단해 생긴 오류였다.

박치기는 성문을 직접 근접 공격하는 몹이다.
기본적인 구현은 기본 몹과 일치한다.

마법사는 플레이어를 공격하는 몹으로 일직선 원거리 마법을 날린다.
구현 마법 투사체 설명

장군은 보스로 만든 몹으로 기본 이동속도가 빠르고 다른 캐릭터들과 겹칠 수 있으며 두가지 공격 패턴이 존재한다. 플레이어가 사정거리 안에 들어오면 두번 가르기를 사용하고 체력이 50% 아래로 내려가면 제자리에서 기를 모으고 대쉬 찌르기를 사용한다.
구현 기술 설명
항상 많은 것을 만지고 고민하면서 점점 복잡해지고 어려워지지만 결과는 매번 간단했다.
그곳까지 도달하는 과정이 경험인 것 같다.
만드는 과정에서 시작이 잘못됐다는 것을 느꼈다.