Profile

대혐수의 뒷동산

대혐수

[유니티]주먹구구 탐정게임 만들기-탐정모드

  지난번에 퍼즐테이프 편집기능을 만들었고, 이제 이 퍼즐테이프를 탐정모드에 포함시키는 작업을 할 것이다.

 

  주요 행동 메뉴에서 "탐정모드"를 클릭하면...

 

  탐정모드가 열린다. 탐정모드의 주요 구성요소는 물론 아래쪽의 인젠토리와 오른쪽의 탐정 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]);

    이제 다시 원래의 퍼즐선택 메뉴로 돌아간 뒤,

포스트 작성 중 퍼즐 이름을 바꿔서, 목록의 이름이 달라져있음 =_=

  아 불고기! 를 클릭하면?

 

  쨔쟌...진행상황이 저장되어있다..