Unity 입문 - The Stack

강진규·2025년 2월 17일

Unity 입문

목록 보기
2/3
post-thumbnail

우리가 만들 게임은 Stack의 Copy Game인 The Stack입니다.

Stack의 주요 특징

  1. 간단한 조작
    • 한 번의 클릭 또는 터치로 블록을 멈추는 단순한 조작 방식
  2. 정확한 배치 도전
    • 블록이 정확히 배치되지 않으면 잘린 부분이 제거되며, 점점 더 작은 블록을 쌓아야 함
  3. 점수 기반 진행
    • 쌓아 올린 블록의 개수와 정확한 배치로 점수를 기록
  4. 세련된 디자인
    • 색상이 매끄럽게 변하는 블록과 간단하면서도 세련된 3D 아트 스타일

앱스토어에 들어가면 항상 상위권에 이런 류의 게임이 있다.
이전까지의 강의는 2D프로젝트였는데, 이번의 게임은 3D프로젝트에서 진행되었다.
그래서 그런가 더 어려웠다...


[ 내가 생각한 핵심 기능 ]

게임을 진행하면 타이밍에 맞춰 블록을 쌓게 되는데, 이때 타이밍이 안맞으면 블록이 잘려나간다.
이 점이 게임을 하는데 있어 재미를 더 주었다고 생각이 든다.

void CreateRubble(Vector3 pos, Vector3 scale)
{
    GameObject go = Instantiate(lastBlock.gameObject);
    go.transform.parent = this.transform;

    go.transform.localPosition = pos;
    go.transform.localScale = scale;
    go.transform.localRotation = Quaternion.identity;

    go.AddComponent<Rigidbody>();

    go.name = "Rubble";
}

이 메서드는 오차범위에 해당되는 부분을 받아와 잘려진 조각으로 만들어 주게 된다.
Rigidbody 컴포넌트를 add해주고 Rubble 이라는 이름을 부여해서
나중에 DestroyZone을 통해 생성된 조각들을 삭제시켜준다.

float rubbleHalfScale = deltaX / 2;
CreateRubble(
    new Vector3(
        isNegativeNum ?
        lastPosition.x + stackBounds.x / 2 + rubbleHalfScale :
        lastPosition.x - stackBounds.x / 2 - rubbleHalfScale,
        lastPosition.y, 
        lastPosition.z
        ),
    new Vector3(deltaX, 1, stackBounds.y)

CreateRubble 메서드는 블록을 위치시키는 메서드의 부분에서 사용하게 된다.

deltaX는 이전 블록의 x값과 지금 블록의 x값이 오차를 계산한 값이다.
rubbleHalfScale는 deltaX / 2 한 값이다.
stackBounds.x는 기본값을 가지고 있는데 코드 진행 중 deltaX만큼 빼주게 된다.

stackBounds가 매번 오차값을 뺀 상태로 갱신되고 그 면적만큼의 블록이 위치하게 된다.
오차 범위만큼의 면적을 가진 조각들은 CreateRubble을 통해 생성 되고,
DestroyZone을 만나면 삭제되게 된다.

사실 이렇게 글로 풀어쓰면서도 아직 제대로 이해한 건지 모르겠지만,
아무튼 이런식으로 진행되는 것 같다.


[ 결과 ]

진짜 어디선가 본 것 같은 결과물을 보고 깜짝 놀랐다.
물론 강의를 따라가는 것도 벅차서 힘들었지만, 다하고 나니까 뭔가 뿌듯했달까...?
3D는 초면이라 따라하기 조금 어렵웠는데, 뭔가 2D랑 다른게 딱히 없는 느낌이였다.
그냥 Unity가 어렵다

0개의 댓글