고현우
개발 일지
고현우
전체 방문자
오늘
어제
  • 분류 전체보기 (14)
    • Unity (7)
      • 작업 (1)
      • 지식 (6)
    • DirectX (0)
      • 작업 (0)
      • 지식 (0)
    • C# (3)
      • 디자인 패턴 (0)
      • 알고리즘 (1)
      • 자료구조 (0)
      • 지식 (2)
    • C++ (0)
      • 디자인 패턴 (0)
      • 알고리즘 (0)
      • 자료구조 (0)
      • 지식 (0)
    • 필수 지식 (4)
      • 물리 (0)
      • 선형대수학 (0)
      • 셰이더 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 비동기
  • 스크린좌표
  • 월드좌표
  • 그래픽스API
  • 셰이더
  • Unity
  • Z-Up
  • 로컬좌표
  • 래스터라이저
  • Shader
  • 프래그먼트셰이더
  • Y-Up
  • 메모리 계층
  • 뷰포트좌표
  • 버텍스 셰이더
  • 렌더링파이프라인
  • .NET
  • VertexShader
  • 선형 탐색 알고리즘
  • RenderingPipeline

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
고현우

개발 일지

[Unity] SuperQix 퍼즐 아케이드 게임 모작
Unity/작업

[Unity] SuperQix 퍼즐 아케이드 게임 모작

2022. 1. 16. 20:31

SuperQix 모작

 

오늘은 고등학교 2학년 때 모작으로 개발하였던 프로젝트인 SuperQix의

개발 과정을 살펴보고, 어떤 기법을 사용했는지 자세히 알려주도록 하겠다.

 

우선 모작 프로젝트를 공개하기전에 게임에 대한 간략한 소개를 하자면,

 

게임 SuperQix는 1987년 3월, 타이토에서 최초 출시한 퍼즐 아케이드 게임으로서

플레이어가 보스, 몬스터 등을 피해 땅을 차지해가며, 스테이지를 클리어하는 방식이다.

타이틀 화면

 

나는 주로 게임을 개발할때 모작을 많이 하는 편으로

 

당시에도 어떤 게임을 모작할까 생각을 하다가

마침 퍼즐 장르의 게임을 개발하려고 했는데

 

유튜브에서 땅따먹기 게임인 SuperQix를 발견하고 바로

개발을 시행하기로 마음먹었다.

 

이 포스팅은 개발을 하고 거의 1년이 지난 시점에

작성하는 거라 설명이 다소 미흡할 수도 있다..

 

그때의 기억을 다시 되새기며, 천천히 글을 써 내려가도록 하겠다.

 

<개발기간>

2021.07.22 ~ 2021.08.06

약 2~3주간의 시간이 소요

 

<게임 개요>

제목 : SuperQix

플랫폼 : PC

해상도 : 224X256

장르 : 퍼즐 아케이드

개발 언어 : VisualStudio 2019 (C#)

엔진 : Unity(2019.4.7f1)

 

<리소스>

그래픽 : TheSpritersResources

그래픽 툴 : PhotoshopCS6

 

<기술 개요>

(가) 게임 기법

1. 셀 방식이 아닌 텍스처 방식 이용

2. RGBA 32 bit 방식 텍스처 포맷

3. Texture Advance Read/Write Enabled

4. Texture 관련 유니티 내부 함수 이용

5. Sprite FilterMode (Point (no filter)) 이용

​

(나) 개임 구조

1. Sigleton Pattern 사용하여 게임 매니저 생성

2. State Pattern 사용하여 EnemyAI 구현

3. Unity Animation 기능을 이용한 Effect 구현

4. Pixel Grid 이동 방식 체계 사용

5. FloodFill 알고리즘을 이용하여 색 채우기

6. Astar 알고리즘을 이용한 길 찾기

7. 반사 벡터, 내적(투영)을 이용하여 적 이동 방식 구현

​

(다) 최적화

1. Update 사용 제한, IEnumerator 사용

2. string 문자열 클래스 연산 최소화

3. 문자열 보간 or String.Format 이용

4. SoundClip ForceToMono, Load Type

Compressed In Memory, Compression

Format PCM으로 사용하여 최적화

5. FloodFill 방향 검색 시 멀티스레딩 방식

(비동기 호출) 방식을 이용한 검색 이용

6. FloodFill 색 채우기 알고리즘 내부

기능 구현 시 재귀 함수 대신 컬렉션

자료구조(Stack)를 이용해 프로그램

실행 도중 스택 오버플로우 현상을 방지

 

<인 게임>

​

(가) 인트로

1. 인트로는 유니티 내부의 Animation 기능을 이용

2. 상단과 하단에 보이는 폰트들은 픽셀 이미지로 이루어져

있기 때문에 따로 FontManager라는 스크립트에서 관리

3. 하단에 Copy Game을 표시에 모작을 알림 (상업적 용도 X)

4. 하단에 개발 연도와 저의 이름을 표시

​

여담 (엄청난 노가다 작업, 애니메이션 작업 중 제일 힘들었음)

​

(나) 시작 대기

1. 인트로가 끝난 뒤 바로 들어가지는 화면

2. 여기서 5번 키를 누르면 크래딧 증가

3. 크래딧은 인 게임 도중 부활 횟수를 뜻함

4. 크래딧을 넣고 1번을 누르면 게임 진입

​

(다) 게임 시작

1. 스테이지 시작 시마다 페이드 인 구현

2. 게임 규칙에 대한 간단한 설명 표시

3. 플레이어는 테두리 내 랜덤 한 위치 스폰

4. 배경 색상은 미리 정해둔 색상 중 랜덤 한 색

4. 시작 이펙트 표시 후 플레이 가능

​

(라) 기본 조작

(플레이어 이동 로직)

1. 기본적으로 플레이어는 테두리 내에서만 움직일 수 있다

2. 스페이스바를 누르고 있으면 탐색 모드로 전환이 된다

3. 탐색 모드 중에서는 테두리 부분을 벗어날 수 있다

4. 탐색 중 다시 한번 선과 맞닥뜨리면 FloodFill 함수 실행

5. FloodFill 할 방향은 Astar 길 찾기 알고리즘으로 검색

6. 검색 기준은 보스 몬스터가 없는 방향

​

(Enemy 이동 로직)

1. 처음 생성될 때 랜덤 한 방향을 가지고 이동

2. 이후 플레이어가 차지한 땅의 테두리나 기본 테두리와

접촉했을 시 반사 벡터 내적(투영)을 계산해 주는 유니티

내장 기능 함수(Vector3.Reflect)를 이용해서 각도 반사

​

(마) 목숨 기준

1. 기본적으로 1크래딧당 3개의 목숨으로 구성

1. 탐색 모드 중일 때 Enemy와 접촉하면 일시정지

2. 마지막으로 탐색을 시작했던 장소로 리스폰

3. 왼쪽 하단 목숨 UI 하나씩 없어짐

4. 이미 먹은 땅은 그대로 유지한 채로 재시작

​

(사) 게임 오버

1. 목숨 3개 모두 소비할 시 게임오버 알림

2. 컨티뉴 창에서 코인을 넣으면 원래 스테이지에서

다시 시작 가능 단, 먹었던 땅은 초기화됨

3. 컨티뉴창에서 10초가 지나면 자동으로 1 스테이지부터 시작

4. 컨티뉴는 게임 진행 시 한 번밖에 안됨

​

(아) 게임 클리어

1. 전체 비율 75% 이상 먹을 시 클리어

2. 카드에서 마녀가 나와 다 채우는 연출

3. 흑백이었던 사진이 원본 사진으로 돌아오는 연출

4. 보너스 포인트로 75% 이상부터 1% 당 1000점씩 계산

5. 자동으로 다음 스테이지로 이동

​

(자) 레벨 디자인

1. 스테이지가 넘어갈 때마다 왼쪽 상단 round가 바뀜

2. 스테이지마다 배경 사진이 각각 다름

3. enemy의 개수는 스테이지에 맞춰져 있음

 


마무리하며

 

이상으로 게임 개발 소개를 마치도록 하겠다,

더 자세한 개발 시연 영상을 시청하고 싶다면

아래 유튜브 링크를 참고하자

https://www.youtube.com/watch?v=ogHRQDPWNkI 
저작자표시 (새창열림)
    고현우
    고현우
    Unity / DirectX 게임 개발

    티스토리툴바