지난번에 퍼즐테이프 편집기능을 만들었고, 이제 이 퍼즐테이프를 탐정모드에 포함시키는 작업을 할 것이다.
주요 행동 메뉴에서 "탐정모드"를 클릭하면...
탐정모드가 열린다. 탐정모드의 주요 구성요소는 물론 아래쪽의 인젠토리와 오른쪽의 탐정 SCG다.
(반복하지만, 그림은 예전에 만든 비주얼노벨 "슬픔을 나에게"에서 사용된 걸 재활용했는데, 그림 원작자는 구름과자 작가님이다.)
오른편의 SCG에 템을 끌어다놓으면 해당 템에 대해 설명을 해준다. 거기까지는 예전에 이미 구현해놓은 부분.
새로 추가된 부분은 왼쪽의 윈도우다. 스토리가 진행되면 풀어야 할 퍼즐들이 추가되는데, 현재까지 확보된 퍼즐들의 목록이 저렇게 나온다.
퍼즐 목록은 퍼즐정보 클래스를 만든 뒤 그 리스트를 선언, for문을 이용해 생성하게 했다.
퍼즐정보 클래스에는 해금 여부를 체크하는 bool변수가 있는데 이게 true일 때에만 목록에 퍼즐 이름이 표시된다.
목록 중에서 원하는 퍼즐을 선택하면, 이 퍼즐을 풀지 말지 결정하는 인터페이스가 나온다.
사실 바로 퍼즐풀이 인터페이스로 넘어가도 되는데, 순전히 연출을 위해 위 과정을 거치는 것이다.
탐정게임은 뭔가 분위기로 먹고 들어가는 게 중요하다...라는 개인적인 철학이 있다...
이 화면의 주요 목적은 선택한 퍼즐에 "어떤 의미가 있는지"를 설명하는 데에 있다.
맨 위의 "퍼즐 결정"이라고 되어있는 건 이 퍼즐의 제목이다.
(텍스트 칸을 너무 작게 잡아서 나오다 말았음 =_=)
그 아랫줄에 있는 건 이 퍼즐의 "목적"이다.
해당 퍼들이 어떤 맥락에서 발생했는지,
어떤 의혹이 있는지,
이걸 풀면 뭘 밝혀낼 수 있는지,
뭘 밝혀내야 이 퍼즐이 풀리게 되는지 서술한다.
참고로 위 내용은 퍼즐정보 클래스에 기입되어있다.
퍼즐의 선택과 불러오기 과정을 내부적으로 들어가면 다음과 같은 식으로 처리했다.
우선 퍼즐정보 클래스 리스트가 있다.
리스트는 public으로 선언되어있고, 퍼즐정보 클래스는 serializable인 관계로 인스펙터 상에서 편집이 가능하다.
각 퍼즐정보는 개발자인 내가 미리미리 채워넣을 것이다.
다음, 탐정모드로 들어가면 현재 해금된 퍼즐을 실행하는 버튼이 만들어진다.
각 버튼은 만들어질 때마다, 내장되어있는 스크립트의 변수에 고유번호를 받는다.
이 고유번호는 해당 버튼이 실행시킬 퍼즐의 인덱스 번호와 동일하다.
"이 문제를 살펴본다" 버튼이 클릭되면, 퍼즐 로드 메서드에 자신의 고유 번호를 전달한다.
어차피 탐정게임 하나에 담겨있는 퍼즐의 수야 한정적이므로, 나는 이 퍼즐들의 진행상황 저장 리스트를 각각 만들어놓을 것이다.
퍼즐 로드 메서드는 switch문으로 퍼즐 고유번호를 받고, 그 고유번호에 해당하는 리스트를 임시 리스트에 복사하게 한다.
switch(tapeNum){
case 0:
Debug.Log(tapeNum + "번 리스토 장진!");
temp_CurrentPuzzleTape.Clear(); //임시 퍼즐테이프
temp_CurrentPuzzleTape = new List<PuzzleFrameData>(puzzleTape00); //퍼즐데이터를 임시 퍼즐테이프에 복사함.
selectedPzNum = tapeNum; //현재 선정된 테이프 번호를 기억해둔다.
OnPuzzleDecideWindo();
break;
보다시피 현재 고른 퍼즐의 번호를 기억해둔다.
그리고 임시 리스트의 내용에 따라 퍼즐테이프 위에 퍼즐 조각들을 늘어놓는다.
물논 아직 퍼즐이 풀리지 않았으니 빈 슬롯(스샷 위쪽의 하얀 동그리미)만 덩그러니 떠 있다.
이제 여기다가 템을 끌어다 놓는다. 이건 이전에 잘 구현해둔 부분.
이제 탐정 SCG왼쪽의 "돌아가기"버튼을 눌러 퍼즐풀이를 종료할 수 있다.
(버튼 위치 같은 것도 나중에 예쁘게 다시 해야지 원 =_=)
돌아가기 버튼은 퍼즐 진행상태를 저장하고 퍼즐 선택 메뉴 단계로 돌아가는 기능이다.
지금까지의 퍼즐 진행상황은 임시 리스트에 저장되게끔 되어있는데, 이 임시 리스트의 내용을 "원본 리스트"에 복사한다.
for (int i = 0; i < temp_CurrentPuzzleTape.Count; i++) puzzleTape00.Add(temp_CurrentPuzzleTape[i]);
이제 다시 원래의 퍼즐선택 메뉴로 돌아간 뒤,
아 불고기! 를 클릭하면?
쨔쟌...진행상황이 저장되어있다..
'탐정게임 만들기 일지' 카테고리의 다른 글
탐정 하면 뭐가 떠오르나.. (0) | 2020.07.11 |
---|---|
[유니티]주먹구구 탐정게임 만들기 - 채점기능 (0) | 2020.06.20 |
[유니티] 주먹구구 탐정게임 만들기 - 퍼즐 편집 만들기 (0) | 2020.06.06 |
[유니티]주먹구구 탐정게임 만들기 - 대화가 다 종료된 후 실행하기 (0) | 2020.03.10 |
[유니티] 주먹구구 탐정게임 만들기 - 아이템 끌기 기능 만들기. (0) | 2020.01.17 |