Unity 내일배움캠프 TIL 1012 | 개인 프로젝트 회고 | Monument Valley 분석

cheeseonrose·2023년 10월 12일
0

Unity 내일배움캠프

목록 보기
54/89
post-thumbnail

이번 개인 프로젝트 주제는 자유롭게 게임 만들기였으나 ,,

심오한 게임 스토리를 짜고 싶다! 에 사로잡혀서 이도저도 아니게 되어버렸다

그래서 선택한 건 궁금했던 게임의 로직을 분석해보고 만들어보는 것~,,

그 게임은 바로바로 "Monument Valley"

개인 프로젝트

개요


Monument Valley란?

  • 착시현상을 이용한 퍼즐을 해결하면서 주인공인 '아이다'를 목적지에 데려다주면 되는 게임이다.
  • 착시현상의 원리 중 하나로 "펜로즈 삼각형"이 사용되었다.
    • 펜로즈 삼각형 : 현실 세계에서 불가능한 물체의 일종
      삼각형의 각 변을 이루는 막대는 모두 서로 직각을 이루지만 그럼에도 불구하고 삼각형을 만든다.
      2차원 그림으로만 가능한 구조
      출처 위키백과 펜로즈 삼각형

구조 살펴보기

  • How to Make a Game Like Monument Valley를 참고해서 튜토리얼 만들기를 진행하였다.
  • 제공되는 Scene에서 구조를 살펴보자.
    • 플레이어의 캐릭터인 Player
    • 마우스 클릭을 보여주는 마커인 Cursor
    • 플레이어가 지나다닐 수 있는 Horizontal Platform, Vertical Platform, U Platform, Support Platform, Stairs Platform
    • Spinner를 통해 회전시킬 수 있는 구조물인 Bridge
    • 플레이어의 최종 목적지인 Goal
  • Horizontal Platform처럼 회전하지 않는 구조물의 경우 각 Box 하나당 Node가 하나씩 달려있다.
    • Clickable 컴포넌트를 갖는 Box들은 클릭해서 Player를 이동시킬 수 있게 된다.
      노드는 아래와 같은 모습
  • 회전하는 Bridge 구조물은 하나의 Box가 여러 개의 Node를 갖는다.
    아래와 같은 모습
  • Spinner는 Spinner 오브젝트와 Controller로 이루어진다.
    • Spinner Controller는 3개의 컴포넌트를 가진다.
      Drag Spinner : 스피너 회전
      Highlighter : 스피너 활성화 시 불이 들어오도록 하이라이팅 역할
      Linker : 스피너가 회전했을 때 각도에 따라 활성화 할 노드 연결을 설정

주요 로직

  • PlayerController는 처음에 Player의 위치와 가장 가까운 Node를 탐색해서 위치를 가져온다.
    그 후 PathFinder에게 위치를 전달하고 시작 Node를 설정하도록 한다.
  • 클릭을 하면 PlayerController는 PathFinder에게 클릭한 Node까지 이동하기 위한 최적의 경로를 탐색할 것을 요청한다.
    Cursor에게는 마우스를 클릭한 곳에 마커를 보여줄 것을 요청한다.
  • Spinner Controller에 달려있는 컴포넌트 3가지는 아래와 같다.
    • Drag Spinner에서는 회전시킬 대상을 받아오고 회전축을 설정한다.
      드래그 시 각도를 계산하기 위한 pivot을 설정하고, 드래그 시 발생할 이벤트를 연결해준다.
      여기서는 Linker에게 노드 연결의 활성화를 업데이트 할 것을 요청한다.
    • Highlighter 컴포넌트는 Spinner 오브젝트의 Mesh Renderer를 받아와서 스피너가 활성화 되었을 때 마우스 포인터를 올리면 붉게 빛나도록 설정한다.
      스피너가 활성화 되었을 경우 마우스를 올리면 Highlighter 컴포넌트에 의해 아래와 같이 표현된다.
    • Linker에서는 회전 각도를 체크할 오브젝트의 Transform을 받아온다.
      여기서는 Bridge 오브젝트의 Transform을 받아온다.
      해당 오브젝트의 회전 각도에 따라 두 개의 노드 사이 연결을 활성화하도록 설정한다.
      예를 들어, Element5에서는 Bridge의 각도가 0도일 때, Node21A와 Node22의 연결을 활성화한다.

확장

  • 주어진 컴포넌트들과 구조물을 이용하여 맵을 아래와 같이 확장시켰다.
    두 개의 Bridge를 추가하여 총 3개의 Bridge를 갖도록 하였다.
  • 따라서 각 Bridge의 Spinner는 서로 다른 Spinner Controller들이 관리하도록 하였다.
  • 루트를 구성하면서 Bridge와 Bridge 사이를 지나가도록 만들었는데, 이때 Bridge 하나의 조건만 체크해주어서 Bridge가 연결되지 않아도 Player가 Node를 타고 지나가는 현상이 발생했다.
    • 이를 해결하기 위해 Linker에서 두 가지의 Bridge 조건을 모두 체크할 수 있도록 조건 element를 추가했다.

GitHub AnalyzeMonumentValley

  • 자세한 코드는 깃허브에서 확인!

회고

궁금했던 게임 로직에 대해서 공부할 수 있었고, 로직이 너무 재미있어서 좋은 경험이었다!
나만의 게임을 만들어내지 못한 것은 아쉽지만 기회는 많으니까!
그리고 재미있는 로직을 공부해볼 수 있어서 오히려 좋았다 ㅎㅅㅎ



오늘은 요기까지
끗~

0개의 댓글