하이퍼 캐주얼 게임 “Hoppy Japan”을 Unity에서 1 개월로 만든 이야기

unity UnityAdventCalendar2018

시작하기

f : id : takashicompany : 20181203102625p : plain

안녕하세요! Unity 엔지니어의 사토 입니다.
이 기사는 카약 Unity 강림절 달력 2018 4 일째의 기사입니다.
올해 10 월에 출시 한 KAYAC의 신작 하이퍼 캐주얼 게임 “Hoppy Japan」의 개발에 대해 이야기합니다.

AppStore
Google Play

Hoppy Japan은

“Hoppy Japan”은 당사의 소셜 게임 사업부의 “천하 제일 기획위원회 ‘라는 제도에서 태어난 게임입니다.

f : id : takashicompany : 20181203102932p : plain

Hoppy Japan은 쉽게 속도감과 고양감을 체험 할 수있는 원 터치 액션 게임입니다.


Hoppy Japan

개발 멤버는

  • 프로듀서
  • 디쿠레타
  • 플래너 / Unity 엔지니어 (나)
  • 3D 아티스트 / 디자이너
  • 사운드 아티스트

5 명입니다.

제품 판의 제작은 1 개월에서 실시했습니다.

기술적 인 개념

  • 전 세계적으로 배달을 상정하고 있기 때문에 저사양 단말에서 작동하도록
  • 단기간에 확실하게 개발을 추진하기 위해 간단한 구조와 설계를 의식하는
  • 아티스트가 Unity 작업 · 확인을 할 수 있도록

라는 것을 염두에 두었습니다.

배경 객체 재사용

“Hoppy Japan」은 거리를 즐기는 게임입니다.
캐릭터가 진행됨에 따라 “배경 오브젝트를 배치 · 후방에서 보이지 않게 된 배경 내용 지우기 ‘라는 구현을하고 있습니다.
그 때 Instantiate 함수와 Destroy 함수를 사용하면 CPU 처리에 부하가 걸려 카쿠 붙는 원인이 게임의 경험을 해쳐 버립니다.

f : id : takashicompany : 20181203102654p : plain

위의 그림과 같이 카메라에서 얻을 수 없게 된 도시의 3D 모델을 Destory하지 않고 앞으로 다시 재정렬하는 구조로되어 있습니다.

f : id : takashicompany : 20181203102843g : plain

위의 그림과 같이 캐릭터가 진행에 맞추어 숨겨진 화와 배치 (재사용)을 순서대로 실행합니다.

장면을 분할 / 대량로드

Hoppy Japan에서는 타이틀 화면 게임 플레이 화면 · 결과 화면 스킨 목록 화면의 4 개의 장면으로 게임을 구성하고 있습니다.

하나의 장면 파일로도 만들 수있을 것 컴팩트 한 게임이지만, 장면을 분할하여

  • 기능의 분리가 가능한
  • 기능의 확인을 혼자있다
  • 여러 사람이 작업 할 때 변경 부딪치지

등을 실현하는 목적이 있습니다.

f : id : takashicompany : 20181203102829p : plain

또한, 응용 프로그램 시작시 모든 장면을로드하고 원활하게 놀 수 있도록 노력했습니다. 

이것은 “Hoppy Japan”의 총 메모리 사용량이 약 60MB 였기 때문에 채용 할 수 있었다 …라는 측면도 있습니다.

만든 것을 확인하고 조정하는 사이클을 빨리하기 위해 각 장면은 단독으로 편집기 재생해도 작동하도록했습니다.

자신의 타임 스케일

이 게임은 “슈퍼 슬로우 ‘라는 기능이 포함되어 있습니다.
길게을하면 캐릭터의 이동 속도가 느린되어 착지점이 목적 쉬워진다 …라는 것입니다.
Unity는 Time.timeScale는 게임 전체의 속도를 조절하는 기능이 있지만, 이번에는 사용하지 않았습니다.
“캐릭터 이동과 이동 만 발생하고 UI는 보통의 속도로 움직이게」처럼 요소마다 조정할 수있는 것이 유연하게 대응할 수 있다고 생각했기 때문입니다.
“Hoppy Japan」에서는 Time.timeScale는 사용하지 않고 자신의 timeScale을 정의하고 애니메이션 인스턴스 ( DOTween )과 Animator 파티클 등 슈퍼 슬로우를 적용 할 요소에 대해 동기화 처리를 썼습니다.

void Update ()
{
    // GameManager.timeScale라는 변수를 정의하여 동기화 할 애니메이션에 적용
    
    // Animator의 경우
    _animator.speed = _gameManager.timeScale;

    // DOTween의 Sequence 인스턴스의 경우
    _doTweenSequence.timeScale = _gameManager.timeScale;

}

void LateUpdate ()
{
    // ParticleSystem에만 LateUpdate 동기화시킨다 (Update이라고 움직임이 거칠어 때문에)
    _particleSystem.Simulate (
        Time.deltaTime * _gameManager.timeScale,
        true ,
         false
    );
}

아티스트와의 연계

아티스트가 스스로 만든 아트를 게임에 통합 확인할 수 있도록 여러 가지 궁리를했습니다.

우선, 「Header 속성에서 예술의 반영 방법을 적는다 ‘라는 것입니다.
Header 속성은 직렬화 변수로 정의함으로써 Unity의 Inspector 뷰에 텍스트를 표시 할 수 있습니다.
주로 Inspectr 뷰에서의 변수의 설명에 사용됩니다.

[Header ( "예술을 게임에 통합 단계" )]
[Header ( "1. 만든 Block에 GameBlock 구성 요소를 설정" )]
[Header ( "2. StageCheckScene 열기" )]
[Header ( "3. GameStage 구성 요소의 조립식 수정" )]
[Header ( "- 필드를 수정하려면 Field 계층 다음과 같이 설정" )]
[Header ( "- 단계를 추가하려면 StepPool에 조립식 추가" )]
[Header ( "- 블록을 추가하는 경우 BlockPools에 조립식 추가" )]
[Header ( "4. Stage 조립식 저장하면"StageBundleData "를 검색" )
[Header ( "5. StageBundleData에 조립식를 설정하면 SaveProject과 장면 저장" )
[Header ( "6. GameScene을 재생하면 게임에 등장하는" )]
f : id : takashicompany : 20181203102629p : plain

다소 힘 기술 느낌이지만, 프로그래머는 별도 wiki 등을 준비하지 않고 설명을 쓸 때문에 쉽게 아닐까 생각합니다.

또한 개발 초기 장면의 객체에 Inspector에서 만든 아트를 설정 준다고하는 방식 이었지만 장면 파일을 서로 만지는 경우 충돌이 발생하게되므로 ScriptableObject을 사용하여 아티스트가 쉽게 아트를 설정할 수 있도록했습니다.

f : id : takashicompany : 20181203102639p : plain

성능 조정

일부 단말기는 GPU의 부하가 높고 FPS의 저하를 초래했기 때문에 특정 조건을 만족하는 단말 (FPS가 일정 수를 연속 밑돌아 계속 경우 등)에서는 해상도를 조정하여 묘화 부하를 경감하는 방법을 취했습니다.

Screen.SetResolution (Screen.width / 2, Screen.height / 2, true);

이상과 같이하여 “Hoppy Japan ‘은 만들어졌습니다.
하이퍼 캐주얼 게임은 Unity와 궁합이 잘 기존의 기능을 적절하게 사용만으로도 좋은 게임을 만들 수 있습니다.
꼭 도전 해보세요!

내일은 미야 유사 “Bluetooth에서 Unity와 연결하는 컨트롤러를 ESP32 마이크로 컴퓨터로 만드는”입니다!

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다