참고영상 : https://www.youtube.com/watch?v=tf0BvCl11lE
먼저 콘텐츠 폴더안에 BP_Enemy2( 1번 만들었는데 실패해서 2이다.)
BP_EnemySpawner 를 액터클래스로 만든 다음 Enemy2 를 더블클릭하여
무료에셋인 애니메이션 스타터팩을 프로젝트에 추가한 다음 BP_Enemy2 의 스켈레탈 메시 에셋에 SK_Mannequin 를 넣는다.
그다음 BP_EnemySpawner 를 더블클릭한후 이벤트 그래프에 들어가면
(영상 캡쳐)
기본적으로 3가지의 이벤트가 있지만 밑에 두개를 사용하지않을 예정이므로 삭제한다.
그런다음 BeginPlay노드를 드래그 하여
SpawnActor 노드를 만들어준 다음 Class 에 방금 만들어둔 BP_Enemy2 블루프린트를 넣어준뒤 아랭의 좌표를 우클릭하여 구조체핀으로 전환해주면 세가지 노드로 변환된다. 이상태에서 Spawn Transform Location 노드를 드래그 하여
GetRandomReachablePointlnRadius
를 만들어준다.
본 클래스를 기준으로 7000반경으로 랜덤스폰하게 만들어준다 그런다음
Get Actor Location 노드를 넣어준다 이 노드의 기능은 아직 자세히 몰라 조금더 공부를 해야겠다.
이 상태에서 재생을 눌러주면 놀랍게도 아무일도 일어나지않는다. 이유는 우리가 범위의 기준점을 잡아주지 않았기 때문이다 그래서 기준을 잡아주고
콘텐츠 추가 → 블룸 → 내비메시 바운드 블룸을 넣어준다
그런다음
이런식으로 면접을 잡아준 뒤 확인해본다
키보드 P를 누르면 이런식으로 잡힌 범위를 상세하게 확인할수 있다.
이제 이런식으로 7000반경으로 랜덤으로 몹이 스폰되는것을 볼수있다.
다시 Enemy2 클래스로 돌아가서 더블클릭한 다음 이벤트그래프에 들어가서 똑같이 첫 노드를 빼고 나머지 두 노드를 삭제해준다.
그리고 AI Move To 노드를 만들어준다음 연결해준다.
그리고 EnemySpawner로 돌아가서 시작 이벤트의 노드에 setTiemer by event 를 연결해주고 타임을 1초로 해준다 이렇게 1초마다 적이 나오게끔 구현을 해준 뒤 Event 노드를 연결하여 커스텀 이벤트를 만들고 이름을 SpawnEnemy로 지정해준다.
무한으로 돌게끔 루핑을 체크해준다.
그리고 set Tiemr by Event 와 SpawnActor 노드의 연결선을 삭제하고 SpawnEnemy 노드와 연결해주면 완성이다. 이제 결과를 볼 차례이다.
이제 이런식으로 1초마다 몹이 무한정 스폰된다.
하지만 영상에선 플레이어를 따라다녔는데 내가 한 프로젝트는 따라오지 않는다. 이를 해결하기위해 다시 자료를 찾아본 결과 내가 블루프린트 클래스를 액터로 한것이 문제였다 그래서
블루 프린트를 새로 만들고 Pawn 속성으로 다시 만들기 시작했다. (하지만 실패했다..)
동영상을 다시 정독하고 보니 Pawn 속성도 Actor 속성도 아닌 캐릭터 형 이었다. 구글링 하다가 그나마 도움이 되었던 글을 올려본다.
이 질의응답에 의해 해답에 근접한 힌트를 찾을수 있었다. (https://www.reddit.com/r/unrealengine/comments/uybpgh/why_dont_i_have_the_option_get_reference_to_self/)
포기할까 했는데 끝까지 하길 잘했다. 그냥 포기했으면 오늘 잠을 못잤을 것이다. 아래는 오늘의 결과물이다 .
동영상: https://youtu.be/ErrZtnCGRCs
느낀점 : 참고자료를 조금 더 꼼꼼히 봐야겠다. 작은실수 하나가 사람을 열받게 하는떼가 무수히 많다.
다음 작업에 할일 : 캐릭터의 애니메이션과, 적이 한번만 따라오고 플레이어와 같은 위치에 온다면 멈춰버리는 문제가 생긴다. 간단히 해결 될것같긴하다.
또한 몬스터가 총알에 피격, 데미지 효과를 적용하고 적이 죽으면 아이템을 드랍하거나 총을 드랍하는 기능을 구현해볼까한다. 하루만에 안되겠지만.. 일단 열심히는 해보자.