top of page
제트 러너
프로젝트명: 제트 러너
플랫폼: Window PC
장르: 횡스크롤 러닝
개발툴 및 언어: Unity3D 엔진(C#)
대상: 3~10세
조작법: 벽 터치
스크린샷 및 영상
작품 설명 및 제작 후기
제트 러너는 벽을 터치하거나 공을 던져 캐릭터와 오브제들과 상호작용 하는 횡스크롤 러닝 게임입니다.
저는 클라이언트 개발 및 2D 라이더 데이터 이용과 관련된 부분을 담당했습니다.
아무것도 없는 벽을 터치해서 인풋을 얻기 위해 TOF방식을 쓰는 2D 라이더 장비를 두대 연결하여 사용했습니다. 장비와 TCP/IP로 연결하여 보내주는 벡터값을 큐로 담아 순차적으로 빠르게 누락 없이 인풋 처리를 했습니다.
(TOF : 적외선을 쏴서 돌아오는 시간차를 계산하여 위치 추정에 사용하는 방식)
장비 특성상 레이저에 걸리는 위치를 계속 전달만 해주기에 단순 한번 터치, 홀드, 드래그 등의 기능을 따로 만들어서 상호작용 대상에 컴포넌트를 붙여주는 방식으로 인풋 처리를 했습니다. 그리고 Raycast와 2D Collider를 사용했기에 레이어를 따로 두어 서로 충돌하는 문제들을 해결했습니다.
횡스크롤 게임인데 10시간 가량 계속 켜져있어야 하기에 흔히 볼 수 있는 게임들처럼 스테이지가 정교하게 짜여진 레벨 디자인은 할 수가 없었습니다. 여러가지 방안을 생각해봤지만 가장 간단한 방법은 랜덤이었습니다. 지형의 높낮이, 곡선, 나오는 오브제들의 타입과 빈도 수 등을 기본으로 매번 다른 모습을 보여주는 방식이 가장 최적이라 여겼습니다.
기본 지형에 맞는 스프라이트를 가지고 SpriteShapeController 를 이용하여 실시간으로 지형생성을 구현하였습니다.
원래 SpriteShapeController 의 기능은 타일식으로 채워질 이미지를 넣어주고 쉐입을 따서 2D 오브제를 만들어주는건데 코드로 직접 제어해서 포인트를 찍고 그 위치를 조정해서 메시 콜라이더와 함께 매번 갱신해주었습니다. 물론 기본으로 제공하는 기능이 아니었기에 자동 갱신이 안되는 에디터상의 버그가 있었지만 갱신 함수를 직접 호출하는 방식으로 해결을 했습니다.
오브젝트들은 깊이감을 위한 근경, 원경, 중간의 상호작용 오브제들로 구성되어 있었고 상호작용 오브제는 아웃기키는 장애물, 추가효과를 주는 아이템, 특수 연출의 세가지 특성으로 구분되어 있습니다.
원,근경 오브제느 단순히 시각적 변수를 주기 위함이었지만 상호작용 오브제는 실질적으로 게임에 영향을 주는 프롭들이었고 약간의 레벨 디자인이 필요했습니다. 그러기 위해서는 위의 3가지 특성을 가진 오브제들의 비율의 조정이 필요했습니다.
지형을 4개의 판으로 생성해 롤링시키고 한 판에서 존재 하는 오브제 비율을 정해 리스트에 3가지 타입을 넣고 하나씩 랜덤으로 뽑아 소거해가면서 신뢰성 있는 오브제 선정 작업을 하였습니다.
기획자분이 밸런스 테이블을 조정하고 같이 테스트하며 최적값들을 찾았고 결과적으로 어린 플레이어도 아주 손쉽게 즐길 수 있게 되었습니다.
상호작용 오브제들은 수가 많아 InteracriveOBJ 라는 기본 변수와 FSM틀을 가진 슈퍼클래스를 상속받아 각자의 연출들을 따로 구현했습니다.
이 프로젝트는 20 * 3 미터 가량의 화면이 큰 컨텐츠였고 매번 들어가는 시설마다 해상도나 센서수 등 환경이 달랐지만 그에 영향을 받지 않아야 했습니다. 기본적으로 화면 세팅하는 부분을 자동화하여 외부에서 몇가지만 조정해주면 그에 맞게 조정되어 컨텐츠가 문제 없이 돌아가게 했고 많은 수정을 거쳐 현재는 최대 최소 값 안에서는 어떤 변수에도 대응 할 수 있는 프로그램이 되었습니다.
후기
이 프로젝트는 다양한 외부적 변수에 대응 해야하고 심플하지만 변화무쌍한 모습을 보여주는 것에 대한 많은 아이디어들을 얻을 수 있었습니다. 매번 직접 수정하고 빌드 뽑고 다시 세팅하는것이 아닌 간단한 설정만으로도 세팅 할 수 있는 공정의 단계를 최소화 하는것에 대한 필요성을 배울 수 있었습니다.
bottom of page