Unity

[Unity] Unity 2D 게임 개발 정리 (1)

sunlight-dby 2025. 5. 28. 00:19

 

 

이 글은 해당 유튜브를 보고 진행한 것에 대해 공부한 것을 정리한 글입니다.

 


Unity 구조

Unity는 컴포넌트 기반 구조를 갖춘 게임 엔진으로, 게임 오브젝트에 다양한 기능을 컴포넌트 형태로 부착하여 원하는 동작을 구현합니다.


Unity의 핵심 구조 : 컴포넌트 기반

Unity는 필요한 기능만 컴포넌트로 붙이는 방식으로 구성됩니다.

  • GameObject :  Unity에서의 기본 단위로, GameObject만 봤을 때는 아무 기능도 하지 않는 껍데기라고 볼 수 있습니다.
  • Component :  GameObject에 부착되는 기능 모듈입니다.

물리 시스템 관련 컴포넌트 및 속성

Rigidbody 2D

  • 물리 엔진의 영향을 받도록 하는 컴포넌트입니다.
  • 중력, 충돌, 반응, 힘(force) 등을 적용할 수 있습니다.
  • Rigidbody는 3D용이고, Rigidbody 2D는 2D용입니다.
  • Rigidbody의 물리적 비활성화는 simulated 속성을 false로 설정하여 비활성화할 수 있습니다.

Collider 2D

  • 오브젝트의 물리적 충돌 면을 정의하는 컴포넌트입니다.
  • Box Collider 2D, Circle Collider 2D 등 다양한 종류가 존재합니다.

Composite Collider 2D

  • 여러 Collider를 하나로 합쳐 성능을 최적화할 수 있는 컴포넌트입니다.
  • 주로 Tilemap Collider 2D와 함께 사용하며, 타일마다 나눠진 형태를 하나로 합쳐줍니다.
    • TilemapCollider 2D의 Used By Composite 옵션을 체크해야 사용 가능합니다.
      이때, TilemapCollider 2D의 기능을 CompositeCollider 2D로 위임합니다.
  • 작동을 위해 Rigidbody 2D도 함께 필요합니다. Unity에서 해당 컴포넌트를 추가할 때, Rigidbody 2D도 자동으로 생성됩니다.

fixedDeltaTime

  • 물리 엔진 업데이트 주기를 나타내는 float형 정적(static) 속성입니다.
  • Unity의 Time 클래스 안에 정의되어 있습니다.
  • 주로 FixedUpdate() 메서드와 함께 사용됩니다.

Unity에서의 픽셀 아트


아틀라스 (Atlas)

Unity의 아틀라스는 스프라이트 시트(Sprite Sheet)로도 불리며, 여러 개의 스프라이트 이미지를 하나의 큰 텍스처 이미지에 모아놓은 것을 말합니다.

 

사용하는 이유

  • 드로우 콜(draw call) 감소
    • Unity는 텍스처가 다르면 각각 따로 그려야 하므로 드로우 콜이 증가하는 구조입니다.
    • 여러 스프라이트를 하나의 텍스처(아틀라스)에 묶으면 한 번에 처리가 가능해지므로 성능이 향상됩니다.
  • 메모리 효율성
    • 텍스처를 통합하면 GPU가 효율적으로 메모리를 사용할 수 있습니다.
  • 애니메이션 구성 용이
    • 2D 애니메이션을 구성할 때 연속된 스프라이트들이 하나의 시트에 있으면 구현이 간편합니다.

스프라이트 (Sprite)

스프라이트는 Unity에서 2D 이미지 데이터를 나타내는 에셋 타입입니다.

주로 UI 요소, 캐릭터 애니메이션, 타일맵 등에 사용되며, 텍스처를 Sprite 타입으로 설정하면 Unity는 그것을 2D 오브젝트로 사용할 수 있도록 처리합니다.


셀 애니메이션 (Cell Animation)

여러 장의 이미지를 순서대로 재생하여 구현한 애니메이션입니다.

보통 Sprite Mode를 Multiple로 설정 후, Sprite Editor에서 잘라서 사용합니다.


픽셀 아트를 위한 주요 설정

Pixels Per Unit (PPU)

이미지 속 픽셀 수가 Unity에서 1 유닛으로 취급되는 기준 값입니다.

예를 들어, PPU가 100이면, 100 픽셀이 Unity 월드에서 1 유닛 길이로 표현됩니다.


Filter Mode

스프라이트를 확대 / 축소할 때 어떤 방식으로 픽셀을 보간(interpolation)할지 설정합니다.

 

옵션

  • Point (nno filter) : 픽셀 아트에 가장 적합한 옵션입니다. 선명한 블록 형태를 유지합니다.
  • Bilinear : 부드러운 보간으로 일반 이미지에 적합합니다.
  • Trilinear : Bilinear보다 부드러운 보간입니다.

Compression

텍스처 용량을 줄이기 위한 압축 방식입니다.

픽셀 아트는 압축하면 픽셀 경계가 깨지거나 색이 번지게 보일 수 있기에 None으로 설정하는 것이 적합합니다.

 

옵션

  • None : 압축이 없는 옵션으로, 이미지 품질이 그대로 유지됩니다.
  • Low / Normal / High : 수준에 따라 압축되며, 강하게 압축될 수록 품질이 떨어질 수 있습니다.

Sprite Mode

텍스처에서 사용할 스프라이트의 개수를 설정합니다.

 

옵션

  • Single : 한 장의 이미지가 하나의 스프라이트로 사용됩니다.
  • Multiple : 한 텍스처 안에 여러 개의 스프라이트가 있는 경우에 해당하는 옵션입니다. (스프라이트 시트, 애니메이션 등)

Unity의 Input System

Unity는 새로운 입력 시스템을 제공하며, 이를 활용하여 더 정교한 입력 제어가 가능합니다.


설치 방법

1. Window > Package Manager 열기

2. 상단의 Packages 옵션을 Unity Registry로 변경 후, Input System을 검색 후 설치

Input System Package 설치


Player Input 컴포넌트 사용법

1. Player 오브젝트에 Player Input 컴포넌트를 추가합니다.

2. "Create Actions..."를 클릭하여 Input Action Profile Asset을 생성합니다.


Input Action 설정

생성한 Input Action Profile Asset 창

  • Action
    • Action Type : 액션의 동작 타입을 Button, Value 등으로 지정합니다.
    • Control Type : 컨트롤러의 입력 형식을 정의합니다.
  • Interactions
    • 입력의 호출 타이밍을 지정합니다.
  • Processors
    • 입력값을 반전, 정규화 등으로 후보정합니다.

Input System의 스크립트 활용

Input System은 기존의 Input.GetAxis 방식과 다르게, 액션 기반 구조이며, 이벤트 중심으로 입력을 처리할 수 있게 해줍니다.

 

네임스페이스

using UnityEngine.InputSystem;

 

Input System을 스크립트에서 활용하기 위해서는 반드시 해당 네임스페이스가 필요합니다.

이 네임스페이스는 InputAction, PlayerInput, Keyboard, Gamepad 등 새로운 입력 시스템의 핵심 클래스들을 제공합니다.

 

작동 방식

Input System에서는 입력을 Input Actions라는 단위로 정의합니다.

이 액션들은 .inputactions 파일(Create Actions를 통해 생성한 Input Action Asset)에서 정의하고, 스크립트와 연결하여 사용합니다.

 

대표적인 지원 메서드

  • OnMove   : 이동 관련 입력 처리
  • OnJump  : 점프 버튼 입력 감지
  • OnFire     : 공격, 발사 등의 입력 처리
  • OnLook   : 마우스나 조이스틱의 방향 입력
  • OnDash   : 대시 입력
  • OnPause : 일시 정지 등 UI 처리 입력

스크립트 예시

void OnMove(InputValue value)
{
    inputVec = value.Get<Vector2>();
}

void FixedUpdate()
{
    Vector2 nextVec = inputVec * speed * Time.fixedDeltaTime;
    rigid.MovePosition(rigid.position + nextVec);
}

 

RuleTile

Rule Tile의 Inspector

 

Rule Tile은 타일의 주변 상황에 따라 자동으로 적절한 이미지로 교체되는 타일을 말합니다.

반복적 맵 제작에 있어 자동화를 해줍니다.


Number of Tiling Rules

해당 옵션은 타일 주변(상하좌우, 대각선 등)의 배치에 따라 어떤 스프라이트를 사용할지를 정의한 규칙의 수를 의미합니다.

즉, Rule Tile이 얼마나 다양한 배치 조건에 따라 다른 타일 이미지를 쓸지를 나타내는 숫자입니다.

 

Number of Tiling Rules를 1로 설정했을 때는 모든 조건에 있어서 단순히 한 가지 스프라이트만 사용하지만,

5로 설정했을 때는 타일 주변에 따라 조건을 5가지 정의하는 것입니다. 예를 들어 위에 타일이 있을 때는 A 스프라이트, 아래에 타일이 있을 때는 B 스프라이트를 사용하는 등 5가지의 조건에 따라 각기 다른 스프라이트를 사용하는 것입니다.


Tiling Rules

해당 옵션의 Size를 설정한 후, 다양한 타일을 사용한다고 하면, 각각의 타일에 수에 따라 등장하는 확률이 달라집니다.


Cinemachine 카메라 시스템

Cinemachine을 사용하기 위해서는 Input System Package를 설치한 것과 같이 Package Manager에서 Cinemachine을 설치해주면 됩니다.

 

Cinemachine의 Virtual Camera를 생성하여 메인 카메라에 연결하면, 메인 카메라의 움직임과 연출을 제어할 수 있습니다.

특히, 플레이어를 따라다니는 카메라 구성 시 유용하며, 흔들림, 줌, 트래킹 등 다양한 효과를 제공합니다.


Git

 

GitHub - Dobby-yhs/Undead-Survivor

Contribute to Dobby-yhs/Undead-Survivor development by creating an account on GitHub.

github.com