프로젝트의 이름은 Escape from the Laboratory이다. 평소에 유X브에서 즐겨봤던 Escape the Backrooms이라는 게임의 이름을 오마주하여 지었고, 실제 게임도 비슷하게 진행된다.
3D 퍼즐 게임이라는 주제로 결정하고 난 후 잠시 휴식 신간을 갖을 겸 프로젝트에 사용할 유니티 에셋을 찾아보았고 팀원들이 올린 에셋 중 SF 느낌의 에셋으로 결정되고 세부적인 회의를 진행하였다.
게임의 주제는 에셋에 맞춰 연구실의 로비에서 깨어난 주인공이 각종 장애물이 있는 실험실에서 퍼즐을 풀며 연구실을 탈출하는 내용으로 결정했다.
와이어 프레임:
전반적인 느낌:
클리어 시:
컨셉도 정했으니 다음으로는 가장 중요한 필요한 기능들을 의견을 모아 정리했다.
1. 플레이어 시스템
2. 아이템 및 핵심 기믹 시스템
3. 스테이지 디자인
4. 퍼즐 시스템
5. 게임 진행 시스템
6. 게임 저장 및 불러오기
7. UI 및 사운드
이렇게 회의한 기능을 팀원들과 나누었다.
크게 스테이지의 기획 및 디자인, 퍼즐 시스템, 맵의 장애물을 담당하여 프로젝트를 진행했다.
스테이지는 실험실의 컨셉에 맞는 독가스가 유출된 방으로 플레이어는 안전지대 이외의 곳에서는 일정 시간동안 데미지를 입는 곳으로 기획했다.
실제로 내가 만든 스테이지 맵 디자인:
이 스테이지는 세 개의 장애물이 존재한다. 스테이지 중앙 전체에 있으며 별 다른 행동을 하지 않아도 플레이어는 매 시간 데미지를 받는다. 또한 중앙에 독 풀장도 있으며 풀장으로 떨어지면 매 시간마다 더큰 피해를 입게된다. 풀장 안에는 플레이어의 이동 속도를 줄이는 슬로우 지역이 있으며 풀장 안에서 최대한 피해를 줄려고 플레이어를 방해한다.
스테이지 풍경:
이러한 장애물들은 EnvironmentalHazard라는 스크립트 하나로 관리하며 장애물 타입은 enum으로 관리하여 코드의 재활용성 및 확장성을 높혔다. 실제로 독 풀장은 나중에 추가된 장애물 타입으로 해당 장애물에 닿았을 때의 효과만 주는 코드만 추가하면 돼서 매우 편리했다.
Enum으로 관리한는 장애물 타입:
장애물과 닿았을 때에는 TriggerEnter메서드가 장애물의 효과를 부여하는 메서드만을 호출하고 효과 메서드에서 장애물의 타입에 따라 다른 효과를 부여했다. 장애물과 떨어졌을 때는 TriggerExit로 닿았을 때와 만찬가지로 만들었다.
장애물의 효과를 부여하는 메서드와 장애물을 떠났을 때 메서드:
퍼즐은 간단하면서 난이도 꽤 있는 퍼즐 중 하나인 라이트 아웃 퍼즐을 참고하여 만들었다. 라이트 아웃 퍼즐은 5X5 형태로 이루어진 보드에 25개의 버튼(라이트)이 있고, 버트을 누르면 버튼을 중심으로 십자 모양으로 버튼이 현재 상태의 반대가 되며 모든 라이트를 끄는 것을 목표로 하는 퍼즐이다.
라이트 아웃 퍼즐:
출처: https://vidkidz.tistory.com/7732 해당 사이트 게임 캡쳐
팀에서는 퍼즐을 상호작용하면 퍼즐 씬을 로드하여 플레이어가 퍼즐을 할 수 있게 하자고 하였다. 그리고 나는 퍼즐 씬을 로드해오면 메인 씬은 어떻게 되지?라는 의문이 들었고 서치한 결과 다른 씬을 로드하면 원래의 씬은 종료되며 퍼즐을 클리어하고 다시 로드하더라도 기본적으로는 초기화 되어 로드가 된다는 것이였다. 이렇게 되면 플레이어는 절대로 게임을 클리어할 수 없는 문제가 생긴다.
이러한 문제를 해결하기 위해 다시 서치한 결과, SceneManager.LoadScene함수에는 로드할 씬을 적는 것 외에도 어떻게 로드할 것인가에 대해 옵션도 적을 수 있었다. SceneManager.LoadScene("PuzzleScene", LoadSceneMode.Additive);
나는 해당 코드를 사용하였는데 이는 현재 로드하고 있는 씬 위에 해당 씬을 중첩하여 로드해오는 방법이였다. 이로써 플레이어가 있는 씬은 종료도 안되며 플레이어는 퍼즐을 풀 때 동안도 데미지를 입게 되었다.
퍼즐은 위처럼 25개의 버튼이 이차원 배열에 저장되어 있으며 모든 버튼은 켜졌는가를 알 수 있는 isLightON 불 값이 존재하며 PuzzleManager는 이를 계속 확인하여 퍼즐을 클리어 했는지 판단하여 게임 매니저로 넘겨 준다.
해당 코드:
내가 만드 퍼즐:
퍼즐을 클리어 하면 퍼즐과 연결된 잠긴 문이 열리며 방안으로 들어 갈 수 있게 된다.
3D 게임 막연하게 만들기 어려울 것이라는 불안감과는 달리 팀원들과 협업과 집단 지성의 힘으로 정말 끝내주는 프로젝트를 만든 것 같았다. 시간이 좀 더 있었더라면 스테이지의 퀄리티와 맵을 확장하여 더욱 완성도 있게 만들 수 있었을 거라는 확신도 있어 부트캠프 초반과 달리 이런 실습에 재미와 자신감이 붙은 것 같았다. 이런 프로젝트를 진행할 수록 최종 프로젝트의 내용과 결과물에 대한 기대감이 커지며 내일의 나를 더욱 발전 시키자는 각오를 다졌다.