본문 바로가기
TIL

11.29 (TIL-Unity)

by 오랑이귀엽다 2023. 11. 29.

핵심 기능 소개

Pixels Per Unit (PPU)

  • Pixels Per Unit (PPU): 스프라이트의 픽셀 수와 해당 스프라이트가 게임 세계에서 차지하는 공간의 관계를 설명. 예를 들어, PPU가 100이라면 스프라이트의 100픽셀은 게임 세계에서 1 유니티 단위를 나타냄
  • 스프라이트의 크기: PPU 값이 클수록 스프라이트는 작아진다. 이는 더 많은 픽셀이 동일한 게임 세계의 공간에 매핑되기 때문
  • 물리 시뮬레이션: PPU 값은 물리 시뮬레이션에 영향을 미칩니다. 높은 PPU 값은 더 작은 스프라이트를 생성하므로, 이는 더 높은 해상도의 물리 시뮬레이션을 가능하게 함
  • 퍼포먼스: 높은 PPU 값은 더 많은 연산을 필요로 한다. 이는 성능에 영향을 미칠 수 있다. 따라서, 필요한 만큼의 PPU 값을 설정하는 것이 중요
  • 일관성: 모든 스프라이트에 대해 일관된 PPU 값을 사용하는 것이 좋다. 이는 스프라이트간의 크기 비율을 일정하게 유지하고, 물리적 행동의 일관성을 보장하는 데 도움이 됨.

계층 구조 ('Transform' 구조)

  • 각 게임 오브젝트는 Transform 컴포넌트를 가진다.
  • Transform 컴포넌트는 게임 오브젝트의 위치, 회전, 및 크기(scale)를 정의
  • 게임 오브젝트는 다른 게임 오브젝트의 '자식'이 될 수 있다.
  • 부모 게임 오브젝트의 Transform이 변경되면(예: 이동, 회전, 크기 변경), 그 자식 오브젝트들의 Transform도 동일하게 적용.
  • 이렇게, 게임 오브젝트들 사이에 계층적인 관계가 형성되고 이를 '트리 구조'라고도 부름.
  • 이 구조는 복잡한 씬을 구성하고 관리하는데 유용. 예를 들어, 차량 게임 오브젝트 내부에 각각의 부품(바퀴, 핸들 등)을 자식 게임 오브젝트로 두면, 차량의 Transform이 변경될 때 각 부품들도 함께 움직인다.

로컬 좌표계(Local Coordinate System)와 월드 좌표계(World Coordinate System)

  1. 월드 좌표계(World Coordinate System): 월드 좌표계는 게임 세계의 전체적인 참조 프레임을 제공. 이는 모든 게임 오브젝트가 공유하며, 월드 좌표계에서의 위치는 게임 환경 내에서 오브젝트의 절대적인 위치를 나타낸다. 월드 좌표계는 변하지 않고 일정하게 유지된다.
  2. 로컬 좌표계(Local Coordinate System): 로컬 좌표계는 개별 게임 오브젝트에 대한 참조 프레임을 제공. 오브젝트의 로컬 좌표계는 해당 오브젝트의 위치, 회전, 크기(scale)에 따라 변화한다. 이 좌표계는 특히 부모-자식 관계에 있는 오브젝트들 사이에서 중요하다. 자식 오브젝트의 로컬 좌표는 부모 오브젝트에 대한 상대적인 위치를 나타내며, 부모 오브젝트가 움직이면 그에 따라 자식 오브젝트의 월드 좌표도 변화하게 된다.

Input.GetAxis

  • **Input.GetAxis**는 유니티의 입력 시스템에서 사용되는 메서드
  • 이 메서드는 입력 축의 값을 반환
  • 입력 축은 주로 키보드나 조이스틱과 같은 입력 장치의 입력을 나타냄
  • GetAxis 메서드는 -1부터 1 사이의 값을 반환하는데, 입력 장치의 움직임에 따라 해당 값이 변경.
  • 값이0에 가까울수록 입력이 없거나 중립 상태를 나타내며, 양수 값은 양 방향 입력을 음수 값은 음 방향 입력을 나타냄
  • GetAxis 메서드는 주로 플레이어의 움직임, 회전, 점프 등을 처리하는 데 사용됨
  • 예를 들어, 수평 이동을 처리하는 경우, 좌우 화살키의 입력에 따라 **Input.GetAxis("Horizontal")**을 사용하여 좌우 방향의 값을 얻을 수 있다.
  • 이 값은 플레이어의 이동 속도나 회전 속도와 같은 변수에 적용하여 게임 오브젝트를 제어할 수 있다.

TIme.deltaTime

  • 이전 프레임부터 현재 프레임까지의 경과 시간을 나타냄
  • **deltaTime**은 게임의 프레임 속도에 상관없이 일정한 시간 간격으로 동작하는 게임을 만들 때 유용하게 사용됨
  • 주로 움직임, 애니메이션, 물리 시뮬레이션 등에서 시간에 따른 변화를 조정하는 데 사용됨
  • 예를 들어, **transform.Translate(Vector3.forward * speed * Time.deltaTime)**과 같이 사용하면 프레임 속도에 관계없이 **speed**만큼의 일정한 이동 속도를 보장할 수 있다.
  • **Time.deltaTime**은 초 단위의 값을 반환하며, 1초에 1에 가까운 값을 가진다.
  • 게임의 로직이 매 프레임마다 일정한 속도로 실행되어야 할 때, **deltaTime**을 이용하여 이동, 회전, 애니메이션 등의 연산에 일정한 시간 간격을 적용할 수 있다.
  • 이를 통해 게임이 일정한 속도로 동작하고, 다양한 기기나 환경에서도 일관된 경험을 제공할 수 있다.

 

접근 제한자와 직렬화 속성

public

  • 변수나 메서드가 외부에서 접근 가능하도록 공개
  • 다른 클래스나 스크립트에서 해당 멤버에 접근하여 값을 설정하거나 호출

private

  • 변수나 메서드가 같은 클래스 내에서만 접근 가능하도록 제한
  • 다른 클래스나 스크립트에서는 접근할 수 없고, 해당 클래스 내부에서만 사용
  • 보통 내부 상태를 관리하거나 내부 구현에 사용

SerializeField

  • **private**로 선언된 변수를 인스펙터에서 직접 접근
  • 기본적으로 private 변수는 인스펙터에 표시되지 않지만, **SerializeField**를 사용하면 해당 변수가 인스펙터에서 수정 가능한 필드로 표시

예시코드

더보기

public class ExampleClass : MonoBehaviour
{
    public int publicVariable;
    private int privateVariable;
    
    [SerializeField]
    private int serializedFieldVariable;
    
    private void Start()
    {
        publicVariable = 10;  // 외부에서 접근 가능
        privateVariable = 20; // 클래스 내부에서만 접근 가능
        serializedFieldVariable = 30; // 인스펙터에서 접근 가능
    }
}

New Input System

New Input System의 핵심 개념들

  1. nput Action: 입력 행동을 정의. 예를 들어 "점프", "공격" 등의 행동을 정의하고, 이러한 행동을 트리거하는 키 또는 버튼을 지정할 수 있다.
  2. Input Action Asset: 여러 개의 입력 행동을 그룹화하는 방법. 이를 통해 재사용 가능한 입력 설정을 만들어 게임 내의 다른 캐릭터나 메뉴에 적용할 수 있다.
  3. Player Input Component: Unity의 New Input System에 추가된 새로운 컴포넌트로, 자동으로 입력 행동을 처리하고 해당 게임 오브젝트에 메시지를 보낸다.

New Input System의 장점

  1. Cross-Platform Compatibility: New Input System은 다양한 플랫폼과 입력 장치에 대해 일관된 방식으로 작동
  2. Rebinding: 플레이어가 게임 내에서 자신의 입력 설정을 변경할 수 있도록 지원
  3. Multiplayer Support: 여러 플레이어가 동일한 장치에서 게임을 플레이하거나, 각각의 장치에서 게임을 플레이할 때 입력을 쉽게 처리할 수 있다.

 

입력 받을 준비하기

Package 추가하기

Window → Package Manager → Unity Register → Input System → Install

 

New Input Sytem 준비하기

Create → Input Action 클릭 → Top Down Controller 2D로 수정

 

Input Action 수정하기

InputAction 더블클릭

No Control Schemes → Add Control Scheme

No Control Schemes → Add Control Scheme

Action Maps → + → Player

Move Action 수정 → Add Up Down Left Right Composite 추가 → WASD 설

Look Action 수정

Fire Action 수정

 

'TIL' 카테고리의 다른 글

12.01 (TIL-Unity)  (0) 2023.12.01
11.30 (TIL-코딩문제)  (0) 2023.11.30
11.28 (TIL-코딩문제)  (0) 2023.11.28
11.27 (TIL-Unity)  (0) 2023.11.27
11.24 (TIL-코딩문제)  (1) 2023.11.24