Profile

대혐수의 뒷동산

대혐수

[유니티] 주먹구구 탐정게임 만들기 - 퍼즐 편집 만들기

  이 게임의 핵심 매카닉이라고 할 수 있는 퍼즐 테이프 만들기...를 만드는 중이다.

  현재 가장 기본적인 기능, 그러니까 인벤토리의 템 끌어다놓기, 슬라이드로 둘러보기 기능 모두 완료된 상태.

 

  살짝 해맸는데, 퍼즐 테이프 중간부분에 템을 집어넣을 때 list.insert()를 썼는데, 리스트에 새 항목을 집어넣을 때 기존의 항목과 교체하는 방식인줄 알았기 때문이다.

  알고보니 새로 삽입되는 항목 다음의 항목들이 한 칸씩 뒤로 밀리는 거였다.

  교체하는 방식인줄 알고 내가 직접 "한 칸씩 뒤로 미는"체계를 만들었었는데 도리어 그것 때문에 에러가 났던것...

 

  아무튼 지금은 잘 구현해놨다. list.insert()가 "한 칸씩 뒤로 미는"방식이었기 때문에 코드도 아주 심플해져버렸고. 허무한 기분이 들 것도 같은데 뭐가 됐든 구현만 되면 기분 좋아짐.

 

내가 능숙한 개발자라면 장식요소들도 병행해서 만들겠는데, 자신이 없어서 시스템부터 구현하는 중이라 =_= 매우 보기 흉하지만 하여튼 퍼즐테이프의 기본 기능은 구현했다.

 

  그리고 다음 단계인 편집. 기존에 테이프 위에 올려놓은 템을 "제거하거나" "다른 자리로 옮기거나"할 수 있게끔 하는 것이다.

 

  처음에는 인벤토리처럼 테이프 위의 템을 클릭 유지하면 "집어올려서" 원하는 다른 지점으로 집어넣을 수 있게 하려고 했다. (물론 허공에서 놓으면 그 조각을 "버리는"액션이 된다.)

 

  구현 자체는 별로 어렵지 않았는데(인벤토리에서 템 집는 코드를 재활용했다. 차이점은, 인벤토리에서 템을 집었을 때에는 해당 템이 제거되지 않지만, 퍼즐테이프 위에서 템을 집었을 때에는 테이프 의의 해당 템이 제거된다는 점), 문제는 템이 집어지자마자 옆 템과 충돌이 일어나서 =_= 다시 퍼즐테이프 위로 툭 떨어뜨리게 되어버린다는 점.

 

  물론 이 점은 템을 집어올리고 일정 시간 후에 충돌이 일어날 수 있게끔 (즉 템을 집은 순간에는 충돌이 발생되지 않게끔)하면 되는데, 생각해보니 그게 썩 좋은 방법은 아닐 것 같았다.

 

  왜냐하면 퍼즐테이프는 좌우로 길-게 늘어질 예정이기 때문이다. 템을 떼어내서 몇 칸 옆으로 옮기는 게 아니라고.

  따라서 조각을 든 채 슬라이드를 좌우로 옮기는 불편한 조작을 하게 하는 건 좀 거시기한 감이 있었다. 이게 액션게임도 아니고, 차분히 생각하면서 해야 하는 추리어드밴처란 말이지...

 

  그래서 내가 생각한 해결책은, 좀 번거롭지만, 편집하고 싶은 조각을 "데스크(가칭)"으로 옮겨놓는 것이다.

  퍼즐테이프 위의 템을 클릭하면 테이프 위의 템이 제거되면서 데스크에 옮겨진다.

  데스크에 올려진 템은 인벤토리의 템과 정확히 똑같이 기능한다(오랫동안 클릭하면 집어올리지만, 데스크에서 유지된다). 하지만 다른 점도 있는데, 데스크의 템이 다시 테이프 위로 옮겨지면, 데스크 자체가 꺼진다(데스크와 그 위의 템이 보이지 않게 된 상테에서, 데스크의 상태가 초기화된다. 즉 데스크가 비워진다).

   여기에 더해 데스크에는 몇가지 추가적인 기능을 넣을 생각이다.

 

  -버리기 : 데스크 위의 템을 버린다. 데스크가 화면에서 보이지 않게 되고, 데스크 상태를 초기화함.

  -되돌리기 : 데스크로 옮겼던 템을 도로 원래 위치에 놓는다. 다음, 데스크가 화면에서 보이지 않게 되고, 데스크 상태를 초기화함.

  -복사 : 데스크로 옮겼던 템을 도로 원래 위치에 놓지만, 데스크가 화면에 그대로 보이고, 데스크 위의 템 역시 유지된다. 퍼즐을 풀기 위해 한 템이 여러번 테이프 위에 올려져야 하는 경우가 있을 수도 있는데 그 때마다 인벤토리를 열어서 뒤적거리지 않게 하기 위해서다. 솔직히, 한 템이 한 퍼즐에서 두 번 이상 사용되는 상황이 발생할지 어떨지는 아직 잘 모르겠다. 만약 퍼즐설계를 다 했더니 템 중복사용 사례가 없다...라고 하면 이 복사 기능은 봉인해야겠지.

 

  현재는 퍼즐테이프 위의 템을 누르면 데스크로 옮겨가는 것 까지 구현된 상황.

 

 

  조각(=템)의 설명 어쩌고 하는 메모를 적어두었는데, 그냥 템의 이름을 출력시키는 선에서 그만둘듯.

  데스크로 옮겨진 템과 관련된 힌트 문구가 뜨도록 하고 싶은 마음은 있지만, 그러면 또 그 힌트 문구 보고싶어서 테이프 위의 템을 데스크로 옮기는 플레이어도 생길 테니까. 그런 수고가 발생하는 걸 방지하기 위해서다.

 

  사실 이 데스크 방식은 좀 거추장스러운 감이 있어서, 가급적이면 이렇게 안 하고 싶었는데 내 짱구로는 이 정도가 한계였다.

 

  하나하나 구현해봐야지.

 

(구현해봄)

 

  다 구현했다. 어렵지 않을 줄은 알았는데 내 기준으로 별다른 삽질 없이 꽤 빨리 만들었다.

 

 

템 이름은 "주일"이라고 되어있지만, 그림은 혜나 머리 =_=

  "복사"를 "고정"으로 바꾸었다.

  고정 기능은 한 번 누르면 끌어냈던 조각을 원래 위치로 돌려놓지만 데스크는 끄지 않는다.

  그 다음에 누르면, 데스크에 놓인 템을 퍼즐 테이프 위에 옮겨놓아도 데스크가 꺼지지 않고, 그 위에 놓인 템도 유지된다.

  그 다음번에 고정 버튼을 누르지 않으면, 데스크 위에 있는 템을 퍼즐 테이프에 옮겼을 때 데스크가 꺼진다.

  즉 데스크에 있는 템을 마구 뿌려대고 싶을 때 사용하는 기능이다.

 

  구현은 전혀 어렵지 않았으나, 문제는, 이 기능 누가 쓰려나...?

 

  한편으로 드는 생각은 일일이 고정 버튼을 누르는 게 아니라 일종의 토글 버튼처럼 하는 게 더 낫지 않을까? 하는 건데, 뭐, 사실 이거는 나중에 테스터들 의견을 받아보고 해도 될 일인 것 같다.

  토글 버튼으로 고치는 것도, 기능 자체를 삭제해버리는 것도 어려운 일은 아니고 나중 작업에 영향을 주는 것도 아니니까, 변경이건 삭제건 나중에 테스터 의견을 받아서 하고 (아, 테스터라니! 지금 시점에서 테스터 모집할 거 생각하면 막 들뜨고 그러는데...) 일단은 다음 단계의 작업으로 넘어가기로..

 

 

  다음 작업은 물론 퍼즐이 맞게 되었는지 체크하는 기능이다.