[TIL] 16일 차 - Unity 입문 강의 2차 정리

ChangBeom·2025년 2월 17일

TIL

목록 보기
17/53
post-thumbnail

오늘은 유니티 입문 강의를 마치면서 이전에 TIL로 정리했던 내용을 제외하고 새로 학습한 내용을 정리해보려고 한다.

[1. 타일맵(Tilemap)]

<타일맵이란?>
2D게임 개발에서 격자 기반 맵(Grid-Based Map) 을 쉽게 생성하고 관리할 수 있는 기능이다. 타일(Tile)이라는 작은 사각형 조각들을 사용하여 게임 맵을 효율적으로 구성할 수 있다.

<타입맵의 주요 구성 요소>

  • Tile
    • 개별 타일맵을 구성하는 가장 작은 단위
    • 이미지(Sprite)를 포함하거나, 충돌 정보 등의 추가 속성을 가질 수 있음
  • Tilemap
    • 여러 타일이 배치된 2D격자 (Grid)
    • 타일을 효율적으로 관리하고 렌더링하는 역할
  • Grid
    • Tilemap을 배치하는 기반 격자 구조
    • 여러 Tilemap을 동일한 격자 구조 안에 배치 가능

<타일 그리는 법>

  1. 상단 메뉴의 Window -> 2D -> Tile Palette


  1. Create New Palette 클릭해서 Palette 생성


  1. 원하는 Sprite 드래그하여 추가


  1. 원하는 Tile 클릭한 후 드래그하여 그리기


[2. 코루틴(Coroutine)]

<코루틴이란?>

Unity에서 시간 기반 작업이나 비동기적 작업을 처리하기 위해 사용되는 메소드이다. 일반적인 함수와 달리, 코루틴은 실행을 중단하고 나중에 다시 실행을 재개할 수 있다.

<특징>

  • 비동기적 작업
    • 프레임 단위로 나뉘어 실행되므로, 한 프레임에 모든 작업을 처리하지 않아도 된다.
    • 게임이 멈추지 않고 연속적으로 작동할 수 있다.
  • yield 키워드를 사용
    • yield return을 통해 특정 조건이나 시간을 기다렸다가 작업을 재개할 수 있다.

<자주 사용하는 yield return의 종류>

  1. yield return null

    다음 프레임까지 대기

IEnumerator WaitForNextFrame()
{
    Debug.Log("현재 프레임");
    yield return null; // 다음 프레임까지 대기
    Debug.Log("다음 프레임에서 실행");
}

  1. yield return new WaitForSeconds(시간)

    지정된 시간(초)만큼 대기

IEnumerator WaitForSecondsExample()
{
    Debug.Log("작업 시작");
    yield return new WaitForSeconds(2f); // 2초 대기
    Debug.Log("2초 후 작업 실행");
}

  1. yield return new WaitForSecondsRealtime(시간)

    실제 시간(Real Time) 기준으로 대기
    (Time.timeScale의 영향을 받지 않음)

IEnumerator WaitForSecondsExample()
{
    Debug.Log("작업 시작");
    yield return new WaitForSeconds(2f); // 2초 대기
    Debug.Log("2초 후 작업 실행");
}

  1. yield return new WaitUntil(조건)

    조건이 참(True)이 될 때까지 대기

IEnumerator WaitUntilExample()
{
    Debug.Log("조건을 기다리는 중...");
    yield return new WaitUntil(() => Input.GetKeyDown(KeyCode.Space)); // 스페이스 키 입력 대기
    Debug.Log("스페이스 키 입력됨");
}

  1. yield return new WaitWhile(조건)

    조건이 거짓(False)이 될 때까지 대기

IEnumerator WaitWhileExample()
{
    Debug.Log("조건이 참인 동안 대기...");
    yield return new WaitWhile(() => Time.time < 5f); // 게임 시간이 5초 미만인 동안 대기
    Debug.Log("5초 경과");
}

  1. yield break

    코루틴 실행을 즉시 종료

IEnumerator CoroutineWithBreak()
{
    Debug.Log("작업 시작");
    yield return new WaitForSeconds(1f);
    Debug.Log("코루틴 종료");
    yield break; // 코루틴 강제 종료
}

[3. Unity Input System]

Unity의 Input System은 사용자의 입력(키보드, 마우스, 게임패드, 터치 등)을 처리하는 시스템이다. Unity는 기존의 Legacy Input Manager와 새로운 Input System Package 두 가지 방식으로 입력을 처리할 수 있다.

<특징>

  • Unity의 새로운 입력 처리 방식 (Package Manager에서 설치 가능)
  • 다양한 입력 장치를 쉽게 통합 가능
  • 키 매핑 변경이 간단하며, 이벤트 기반 구조

<구조>

  • Input Actions Asset
    • 입력 처리를 설정하는 에셋.
    • 키보드, 마우스, 게임패드 등 여러 입력 장치를 설정 가능
  • Player Input 컴포넌트
    • Input Actions를 쉽게 적용할 수 있는 컴포넌트
    • Unity 이벤트를 통해 입력 처리

[기타 잡다한 내용]

  • StringToHash()를 사용하면 문자열을 정수형처럼 사용할 수 있다.

    <예시>

    private static readonly int IsDamage = Animator.StringToHash("IsDamage");
    
    animator.SetBool(IsDamage,true);
  • Mathf.Atan2()를 사용하면 역탄젠트값을 구할 수 있다. 하지만 결과값이 라디안이기에 Mathf.Rad2Deg를 곱해서 각도법으로 변환을 해줘야 사용하기 편하다.

  • UI앵커를 사용하면 Canvas 상의 UI요소가 화면 크기나 해상도가 변해도 일정한 위치와 크기를 유지한다. Alt키를 누른 상태로 UI앵커를 클릭하여 사용할 수 있다.

0개의 댓글