[TIL] 15일 차 - Unity 입문 강의 1차 정리

ChangBeom·2025년 2월 14일

TIL

목록 보기
16/53
post-thumbnail

나는 Unity를 접해본 경험이 있어서 강의를 들으면서 확실하게 아는 내용보단 까먹고 있었던 내용이나 새로 알게된 사실 위주로 정리하려고 한다.

[1. 스프라이트 슬라이싱]

먼저 스프라이트(Sprite)란, 이미지나 그림을 나타내는 2D 그래픽 오브젝트이다. 게임 내에서 캐릭터, 배경, 아이템 등을 화면에 보여주기 위해 사용되는 것들 이라고 생각하면 된다.

Unity는 리소스 관리와 성능적인 측면 때문에 이 스프라이트를 하나의 이미지 파일로 합쳐서 관리하는데 이것이 스프라이트 시트이다.

이 스프라이트 시트를 클릭해서 Inspector창에 들어가면 Sprite Mode 라는 항목이 있는데 이 항목을 Multiple로 변경하면 스프라이트 시트를 잘라서 사용할 수 있다. 이 스프라이트 시트를 잘라서 개별적인 스프라이트로 만드는 것이 스프라이트 슬라이싱 이다.

스프라이트 슬라이싱은 위 사진과 같이 Sprite Mode가 Multiple일 때 Sprite Editor 를 클릭하여 할 수 있다.

Sprite Editor에 들어가면 아래 이미지와 같이 왼쪽위에 Slice라는 탭이 있는데, 클릭하면 어떤 방식으로 스프라이트를 슬라이싱할 지 선택할 수 있다.

<AutoMatic>

자동으로 스프라이트를 인식하여 자른다. 스프라이트가 불규칙적으로 배치되어 있을 경우 사용한다.

<Grid By Cell Size>

픽셀 단위로 높이와 폭을 결정하여 자른다. Pixel Size를 수정하여 타일의 높이와 폭을 결정할 수 있다. 규칙적인 배치가 되어 있을 때 사용한다.

<Grid By Cell Count>

열과 행의 수를 결정하여 자른다. 이 방법도 규칙적인 배치가 되어 있을 때 사용한다.

<Isometric Grid>

주로 Isometric(등각 투영) 스타일의 게임에서 사용된다. 이 기능을 사용하면 스프라이트 시트를 다이아몬드 형태로 절반 높이의 간격으로 자른다. 타일맵을 제작할 때 사용한다.


[2. 싱글턴 패턴]

<싱글턴 패턴이란?>

싱글턴 패턴(Singleton Pattern)은 클래스의 인스턴스를 하나만 생성하도록 보장하는 디자인 패턴이다. Unity에서는 static 키워드를 사용해 쉽게 구현할 수 있다.

클래스의 인스턴스는 프로그램 전역에서 하나만 존재하도록 제한하며, 클래스의 static 변수나 속성을 통해 어디서든 동일한 인스턴스에 접근할 수 있다.

클래스 내에서 static 변수를 사용해 인스턴스를 저장하면 static 변수는 클래스 단위로 메모리를 공유하므로, 인스턴스가 하나만 유지되도록 보장한다.

[장점]

  • 데이터와 객체를 일관되게 공유할 수 있다.
  • 메모리 낭비를 방지하며 관리가 용이하다.

[단점]

  • 전역 상태로 인해 코드 테스트와 유지보수가 어려울 수 있다.
  • 의존성이 강해지면 코드 확장성이 떨어질 수 있다.

<예시> : 싱글톤으로 만든 GameManager

public class GameManager : MonoBehaviour
{
	public static GameManager instance
    {
        get
        {
            if (m_instance == null)
            {
                m_instance = FindObjectOfType<GameManager>();
            }
            return m_instance;
        }
    }

    private static GameManager m_instance;

    private void Awake()
    {
        if (instance != this)
        {
            Destroy(gameObject);
        }
    }
}

[3. 포스트 프로세싱(Post-Processing)]

<포스트 프로세싱이란?>
게임에서 렌더링이 완료된 화면에 추가적인 그래픽 효과를 적용하여 더 생동감 있고 시각적으로 풍부한 화면을 만드는 기술이다.

포스트 프로세싱은 렌더링 파이프라인의 마지막 단계에서 이루어지며, 화면의 전반적인 분위기를 변경하거나 시각적인 품질을 개선하는 데 사용한다.

[주요 기능]

  • Bloom (블룸)
    • 밝은 영역에서 빛이 번지는 효과를 추가하여 더 화려하고 빛나는 느낌을 연출.
    • ex) 판타지 게임의 마법 효과, 태양의 빛 표현
  • Color Grading (색 보정)
    • 화면 전체의 색상, 채도, 명도를 조정하여 특정 분위기를 연출.
    • ex) 따뜻한 색조로 아늑한 느낌, 차가운 색조로 긴장감 있는 느낌 표현.
  • Depth of Field (초점 효과)
    • 특정 영역에만 초점을 맞추고 나머지 영역은 흐릿하게 처리.
    • ex) 카메라가 가까운 물체에 초점을 맞추고 배경을 흐리게 처리.
  • Motion Blur (모션 블러)
    • 빠르게 움직이는 물체 주변에 잔상을 남겨 더 자연스럽고 역동적인 연출.
    • ex) 레이싱 게임에서 차량의 속도감을 강조.
  • Ambient Occlusion (환경 광 차폐)
    • 표면 간의 좁은 공간에서 빛이 닿지 않는 어두운 영역을 추가하여 더 사실적인 그림자 표현.
    • ex) 벽과 바닥의 모서리에서 미세한 어두움 표현.
  • Vignette (비네트)
    • 화면 가장자리를 어둡게 하여 중앙에 집중도를 높이는 효과.
    • ex) 긴장감 있는 장면에서 플레이어의 시선 유도.
  • Chromatic Aberration (색수차)
    • 렌즈의 왜곡 효과를 추가하여 화면 가장자리에 색 번짐을 연출.
    • ex) 과장된 스릴이나 혼란스러운 장면에서 사용.
  • Lens Distortion (렌즈 왜곡)
    • 화면을 렌즈로 보는 것처럼 굴곡을 추가하여 독특한 시각적 효과를 만듦.

[장점]

  • 시간적 품질 향상
    • 단순한 그래픽에서도 포스트 프로세싱을 통해 더 사실적이고 몰입감 있는 화면을 구현할 수 있다.
  • 감정과 분위기 전달
    • 색 보정이나 비네트 효과를 사용하여 게임의 특정 감정을 더 잘 전달할 수 있다.
  • 유연성
    • 다양한 효과를 조합하여 게임의 독특한 스타일과 분위기를 연출할 수 있다.

[단점과 주의점]

  • 성능 문제
    • 포스트 프로세싱은 추가적인 GPU 리소스를 요구하므로, 과도한 효과 사용은 성능 저하를 유발할 수 있다.
    • 특히 모바일 환경에서는 최적화를 철저히 고려해야한다.
  • 과도한 사용 주의
    • 너무 많은 효과를 한 화면에 적용하면 오히려 시각적 혼란을 초래할 수 있다.
  • 효과의 우선순위
    • 여러 개의 Volume을 사용할 경우, 우선순위를 설정하여 충돌을 방지하자.

[기타 잡다한 내용]

  • Object를 생성할 땐 무조건 Transform 값을 Reset하자. 항상 0,0,0에서 생성되진 않기 때문

  • V를 누른 상태로 모서리를 드래그 앤 드롭하면 정확히 다른 오브젝트랑 연결된다.

  • Ctrl + D 를 누르면 바로 복사된다. (굳이 Ctrl + C, Ctrl + V 할 필요 없음)

  • GetComponentInChidren<>을 사용하면 자식객체에서 컴포넌트를 찾는다.

  • Mathf.Clamp를 사용하면 최소값 최대값을 설정하여 flaot 값이 설정한 범위를 넘지 않도록 한다.

  • Mathf.Lerp(a,b,t)를 사용하면 a와 b사이의 값 중 t(0~1) 비율의 값을 반환한다. ex) a=0, b=10, t=0.5 라고 가정하면 return 값은 5이다.

    Lerp(a,b,t)=a+(b−a)×t

  • GameObject.FindObjectOfType<>을 사용하면 Hierachy창에 존재하는 오브젝트들 중 <>안에 들어가는 type과 동일한 오브젝트를 찾는다.

0개의 댓글