개인 프로젝트/개인학습

유니티 입문 (2D) - TopDown

Young_A 2025. 7. 23. 17:09

목차

    유니티 입문 (2D) - TopDown

    강의 듣고 정리함

     


    GetAxisRaw() vs GetAxis()

    Input.GetAxis("Horizontal")은 입력값을 부드럽게 보간해서 반환한다. (0에서 1로 점점 증가)

    Input.GetAxisRaw("Horizontal")은 즉시 1, 0, -1 값을 보간 없이 반환한다.

    float move = Input.GetAxisRaw("Horizontal");

    따라서 위와 같은 코드는,

    왼쪽 방향키(혹은 A키)는 -1, 아무것도 안 눌렀을 때는 0, 오른쪽 방향키(혹은 D키)는 1을 반환하게 된다.

     

    Horizontal은 좌우(A, D, 왼쪽/오른쪽 방향키), Vertical은 상하(W, S, 위/아래 방향키)를 파악하기 위해 사용한다.


    타일맵(Tilemap)

    2D 게임 개발에서 격자 기반 맵(Grid-Based Map)을 쉽게 생성하고 관리할 수 있는 기능이다.

    타일(Tile)이라는 작은 사각형 조각들을 사용하여 게임 맵을 효율적으로 구성할 수 있다.

     

    Tile

    개별 타일 맵을 구성하는 가장 작은 단위로, 이미지(Sprite)를 포함하거나, 충돌 정보 등의 추가 속성을 가질 수 있다.

    Tilemap

    여러 타일이 배치된 2D 격차(Grid)로 타일을 효율적으로 관리하고 렌더링하는 역할을 한다.

    Grid

    Tilemap을 배치하는 기반 격자 구조로 여러 Tilemp을 동일한 격자 구조 안에 배치할 수 있다.


    LayerMask 타입 이진 계산

    LayerMask타입은 이진법으로 값을 확인한다.

    3번 레이어라면 1000과 같이, 0을 포함했을때 3번째 자리가 true(1)이 된다.

    3번과 5번 레이어가 둘 다 해당한다면, 101000 이런식으로 표시되는 것이다.

    if ((levelCollisionLayer.value & (1 << collision.gameObject.layer)) != 0)
    {
        // 이 오브젝트의 레이어는 levelCollisionLayer에 포함되어 있음
    }

     

    여기서 collision.gameObject.layer는 해당 오브젝트의 레이어 번호를 int(십진수)로 반환한다.
    이 레이어 번호만큼 1을 왼쪽으로 쉬프트하여 해당 레이어에 해당하는 비트를 1로 만든 값을 생성하고,
    그 후, 레이어 마스크와 AND 연산을 통해 해당 레이어가 포함되어 있는지를 확인한다..


    transform.right  vs Vector3.right

    transform.right = this.direction;

     

    강의에서 transform.right과 Vector3.right이 다르다는 말에 따로 찾아서 정리해보았다.

    구분 Vector3.right transform.right
    의미 월드 좌표계 기준 오른쪽 방향 오브젝트의 로컬 좌표계 기준으로 오른쪽 방향
    (1, 0, 0) 회전 값에 따라 달라짐
    기준 항상 동일 해당 오브젝트의 현재 방향

     


    UI 앵커 (UI Anchor)

    Canvas 내의 UI 요소가 화면 해상도나 비율이 바뀌어도 원하는 위치와 크기를 유지할 수 있게 해주는 설정이다.

    • 기능: UI 요소의 위치와 크기를 부모(RectTransform) 기준으로 상대적으로 고정 시킨다.
    • 목적: 다양한 해상도에서 UI가 깨지지 않도록 반응형 UI를 구현한다.
    • 사용: 화면 상단 오른쪽에 항상 버튼이 있어야할 때, 해당 위치에 앵커를 고정한다.

    UI 렌더링 순서: Hierarchy와 Canvas의 관계

    Unity UI는 Canvas 기준 + Hierarchy 순서에 따라 렌더링 우선 순위가 결정된다.

    1. Hierarchy 위쪽에 있는 오브젝트가 먼저 렌더링 된다.
    2. 같은 부모 안에서는 위쪽 요소에서 아래쪽 요소 순서로 렌더링 된다.
    3. 하위 오브젝트는 항상 부모 위에 그려진다.

    따라서 렌더링 순서를 조정하려면,

    1. Hierarchy에서 직접 마우스로 드래그 앤 드롭하여 순서를 변경하여 렌더링 우선순위를 변경하거나,
    2. Transform.SetSiblingIndex(int index)를 스크립트에 작성하는 것으로 제어할 수 있다.

    여러 Canvas를 사용할 경우,

    렌더링 순서는 Canvas.sortingOrder로 제어할 수 있다.

    숫자가 높을 수록 위에 렌더링된다.


    Input System

    키보드, 마우스, 게임패드, 터치 등 다양한 입력 장치를 통합적으로 처리할 수 있도록 설계된 유니티의 새로운 입력 처리 시스템이다.

    • 패키지 기반 입력 시스템이므로 Input System 패키지 설치가 필요하다.
    • 이벤트 기반 입력 처리 방식으로 코드가 깔끔해진다.
    • 키 매핑이 유연하여 설정 파일에서 쉽게 변경할 수도 있다.
    • 멀티 플랫폼을 지원하므로 다양한 디바이스 대응에 용이하다.

    기본적으로 Input Action Asset(.inputactions 파일)과 PlayerInput 컴포넌트로 구성되어 있다.

     

    Input Action Asset은 입력을 Action 단위로 정의한다. (Move, Jump, Interact 등)

    입력 장치별 매핑도 가능하다.

     

    PlayerInput 컴포넌트는 Input Actions를 연결하고, 입력 이벤트를 Unity 방식으로 연결한다.

    Unity Events 모드, Send Messages 몯, Invoke C# Events 모드와 같은 동작 방식들이 있다.

     

    //"Move" 액션에 대한 입력 처리
    public void OnMove(InputAction.CallbackContext context)
    {
        Vector2 input = context.ReadValue<Vector2>(); //캐릭터 이도 ㅇ처리
    }

    '개인 프로젝트 > 개인학습' 카테고리의 다른 글

    유니티 입문 (3D) - The Stack  (0) 2025.07.22
    유니티 입문 (2D) - Flappy Plane  (0) 2025.07.21
    알고리즘  (0) 2025.07.08
    C# 객체 지향 프로그래밍  (0) 2025.07.06
    C# 프로그래밍 기초  (0) 2025.07.01