게임을 플레이할 맵을 만들어준다. 랜드스케이프 모드를 이용해 지형을 다듬고 경계를 만들고, 에셋을 사용해 땅의 색깔을 바꾸어 주었고, 폴리지를 이용해 에셋에 있는 돌, 나무 등을 추가하였다.

스컬프팅은 지형을 높이는 도구, 플래튼은 지형의 높이를 평평하게 맞추는 도구이다. 이 둘을 중점으로 맵 틀을 만들었다.

아래에서 원하는 폴리지를 선택하고 페인트하거나 지울 수 있다.
이 두 툴을 이용해 게임을 진행할 동선을 구상하였다.


그 후 전에 만들었던 ai에 새로운 스켈레탈 매시 에셋을 설정해주고, 카메라 컴포넌트를 더 늘렸다. (시야를 넓히기 위함인데 잘 동작하는지는 의문이다. 평소보다 인지 범위가 늘어난 것 같은 느낌을 주긴 했다.)
또한 앰비언트 사운드를 추가하였는데, 앰비언트 사운드를 추가하고 옵션에서 어테뉴에이션 설정을 활성화하면 거리에 따라 소리의 크기가 달라지게 된다. 오버라이드를 켜면 상세설정을 직접 할 수 있는데, 볼륨과 공간화를 설정해주어야 한다.

본인은 어테뉴에이션 함수를 선형으로, 모양은 구 형태로, 또 내부 반경은 1200, 감쇠 거리는 5113으로 설정해주었다. 이를 뷰포트에서 보면 아래와 같아진다.

내부 반경 안에서는 소리 감쇠가 없고, 외부 반경까지 범위에서는 소리가 들린다.
또한 공간화 설정을 키면 소리가 방향성을 가져 3D처럼 소리 컴포넌트가 있는 곳에서 들리게 된다.
사운드의 경우 mp3 파일은 호환되지 않고, 이를 wav로 변환해 임포트해야한다.
앰비언트 사운드에 사운드를 넣을 때 처음에는 그냥 wav 파일만 넣었는데, 외부 반경 밖으로 나갔다가 다시 들어오니 소리가 재생되지 않는 문제가 있었다. 그래서 사운드 큐를 제작해 wav 파일을 연결해 주었고, 사운드 큐의 설정에서 사운드 루핑을 체크한 뒤 앰비언트 사운드에 넣어주니 문제가 해결되었다.

게임을 처음 설계할 때 아이템을 20개 먹으면 포탈이 열리는 식으로 설계했었다. 우선 먹으면 사라지는 아이템을 구현해 주었다.

단순한 큐브에 BOX Collision을 추가하였고, 다른 컴포넌트가 오버랩되었을 때 이벤트가 발생하도록 설정하였다.

오버랩 시작시 플레이어 캐릭터에 형변환을 진행하고, 이 액터를 삭제하도록 했다.
플레이어 블루프린트에도 상응한 블루프린트가 필요하다.


캐릭터에 미리 만들어둔 Box Collision과 큐브가 닿으면 Total 이라는 변수 값에 1을 더하고, 이 과정을 반복한 뒤에 그 값이 20 이상이 되었을 때 성공 지점으로 향하는 포탈을 스폰하는 이벤트를 제작하였다. 스폰 위치는 미리 정해주었다.
처음 스폰액터 노드를 보면 위 사진처럼 위치를 찍어주는 것이 없는데, spawn transform을 우클릭하여 구조체 핀 분할을 해 주면 원하는 위치와 회전, 크기를 찍을 수 있다.


이 포탈은 위의 캐릭터와 오버랩을 시작하면 플레이어 액터를 삭제하고, 성공 맵으로 캐릭터를 다시 스폰한 뒤 컨트롤러를 부여하여 다시 조작할 수 있도록 하였다.
20개 이상을 먹고 포탈로 들어가면 아래 맵의 한 지점으로 이동하게 된다.

다음으로 플레이에서 불편함을 줄이기 위해 위젯을 생성해 현재 가진 큐브의 갯수를 알 수 있도록 하였다.

위의 ###텍스트와 현재 가진 큐브 갯수를 연동해주어야 한다. 텍스트의 디테일에서 콘텐츠 란의 텍스트 입력 칸이 있는데, 오른쪽의 바인딩을 클릭하여 새로운 함수를 생성해주었다.


구성은 위와 같은데, 함수에 플레이어를 형변환하고, 아까 플레이어 블루프린트 이벤트그래프에서 Total이라는 변수를 불러와 그 값을 텍스트로 변환한 뒤 반환해주었다. 이렇게 하면 현재 보유한 큐브 갯수가 위젯에 표시된다.
현재 게임모드베이스 블루프린트에서 beginplay 이벤트에 방금 만들어준 위젯을 뷰포트에 추가해주면 게임을 할때 항상 위젯이 표시되게 된다.


또 플레이어가 AI에게 잡혔을 때 죽었다는 메시지와 함께 버튼을 누르면 게임을 재시작하도록 구성하고자 했다. 그래서 위젯을 하나 더 만들었고, 플레이어와 AI가 겹치면 실행되는 이벤트를 만들었다.

위젯 버튼의 경우 아까 텍스트와 마찬가지로 디테일 탭에서 클릭 시 발생하는 이벤트를 만들어주었다.


버튼을 누르면 현재 데스 화면을 삭제하고, 게임모드를 재실행하게 설정했다.
Restart Game 노드의 타깃을 연결할 때 기존의 게임모드 베이스를 연결하려고 했더니 불가능하다는 메시지가 나왔다. Restart Game의 타깃은 게임모드 자체인데, 기존에 내가 사용하던 게임 모드 베이스는 게임모드 블루프린트가 아닌 게임모드 베이스 블루프린트였다. 그래서 게임모드 블루프린트를 하나 더 생성하고, 아까 전 위젯 실행 노드를 다시 넣어주었더니 연결할 수 있었다.
추가로 특정 지역에 들어가면 AI 를 스폰하여 갑툭튀를 하도록 하는 이벤트를 만들어주었다.

위 사진처럼 트리거 박스를 만들어 플레이어가 오버랩하였을 때 이 액터를 삭제하고 AI를 특정 위치에 스폰하도록 하는 1회성 이벤트를 구현해주었다.

오버랩이 시작되면 플레이어 액터에 형변환을 하고, 이 액터를 삭제한 뒤 AI를 스폰하고 AI의 수명을 정해주었다. 수명은 초 단위로 Set Life Span에서 정할 수 있고, 상황에 따라 다르게 설정해주었다.
이를 통해 AI를 스폰하였을 때 AI가 나를 추격하지 않는 문제가 발생하였는데, 어려움을 느끼던 도중 AI컨트롤러가 제대로 불러오기가 안되었겠다는 생각을 하였고, 결국 AI 블루프린트에 beginplay 이벤트를 추가하고 AI의 디폴트 컨트롤러를 불러오는 노드를 추가하여 해결하였다.

앞서 만들어놓은 트리거를 통해 특정 장소에 방문하였을 때 이벤트를 여러개 더 추가해 주었고, 완전히 어두운 상황에서 길을 안내할 라이트 컴포넌트를 맵의 동선에 따라 추가하여 게임을 완성하였다.
'언리얼엔진' 카테고리의 다른 글
언리얼 엔진 5 실습 2 (0) | 2023.10.17 |
---|---|
언리얼 엔진 5 실습 1 (1) | 2023.10.03 |
언리얼엔진 5를 통한 공포게임 개발 일지 2 (0) | 2022.11.09 |
언리얼엔진 5를 통한 공포게임 개발일지 1 (0) | 2022.10.30 |