본문 바로가기

Unity/Knowledge

핵심 기능 소개

[ PPU ]

Pixels Per Unit 

스프라이트의 픽셀 수와 해당 스프라이트가 게임 세계에서 차지하는 공간의 관계를 설명합니다.

예를 들어, PPU가 100이라면 스프라이트의 100픽셀은 게임 세계에서 1 유니티 단위를 나타냅니다.

 

PPU 값이 클수록 스프라이트는 작아집니다.

이는 더 많은 픽셀이 동일한 게임 세계의 공간에 매핑되기 때문입니다.

 

PPU 값은 물리 시뮬레이션에 영향을 미칩니다.

높은 PPU 값은 더 작은 스프라이트를 생성하므로, 이는 더 높은 해상도의 물리 시뮬레이션을 가능하게 합니다.

 

높은 PPU 값은 더 많은 연산을 필요로 합니다.

이는 성능에 영향을 미칠 수 있습니다.

따라서, 필요한 만큼의 PPU 값을 설정하는 것이 중요합니다.

 

모든 스프라이트에 대해 일관된 PPU 값을 사용하는 것이 좋습니다.

이는 스프라이트간의 크기 비율을 일정하게 유지하고, 물리적 행동의 일관성을 보장하는 데 도움이 됩니다.

 

 

[ Transform 구조 ]

각 게임 오브젝트는 Transform 컴포넌트를 가지고,

Transform 컴포넌트는 게임 오브젝트의 위치, 회전, 및 크기(scale)를 정의합니다.

 

게임 오브젝트는 다른 게임 오브젝트의 '자식'이 될 수 있습니다.

 

부모 게임 오브젝트의 Transform이 변경되면(예: 이동, 회전, 크기 변경),

그 자식 오브젝트들의 Transform도 동일하게 적용됩니다.

 

이렇게, 게임 오브젝트들 사이에 계층적인 관계가 형성되고 이를 트리 구조 라고도 부릅니다.

이 구조는 복잡한 씬을 구성하고 관리하는데 유용합니다.

 

예를 들어, 차량 게임 오브젝트 내부에 각각의 부품(바퀴, 핸들 등)을

자식 게임 오브젝트로 두면, 차량의 Transform이 변경될 때 각 부품들도 함께 움직입니다.

 

 

[ 월드 좌표계 & 로컬 좌표계 ]

월드 좌표계

월드 좌표계는 게임 세계의 전체적인 참조 프레임을 제공합니다.

이는 모든 게임 오브젝트가 공유하며,

월드 좌표계에서의 위치는 게임 환경 내에서 오브젝트의 절대적인 위치를 나타냅니다.

월드 좌표계는 변하지 않고 일정하게 유지됩니다.

스크립트에서는 position, rotation, lossyScale 를 통해 참조합니다.

 

로컬 좌표계

유니티에서 인스펙터창에서 볼 수 있는 position, scale, rotation 등이 로컬 좌표계에 따른 값에 해당합니다.

이는 월드 좌표계가 아닌 부모에 대한 좌표를 말하며, 부모에 대해 x축으로 2만큼 떨어져 있으면

이 오브젝트의 로컬 포지션은 (2, 0, 0)이 되는 것입니다.

스크립트에서는 localPosition, localRotation, localScale 등이 있습니다.

 

 

Input.GetAxis & Input.GetAxisRaw ]

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를 사용하면 해당 변수가 인스펙터에서 수정 가능한 필드로 표시

 

 

[ 이동 기본 코드 ]

InputManager 게임오브젝트를 만들고

InputManagerMovement 작성

InputManager 게임오브젝트에 Add Component를 하여 아래 스크립트를 추가합니다.

'Unity > Knowledge' 카테고리의 다른 글

충돌 처리와 맵 구성  (0) 2024.05.09
구조와 설계 샘플  (0) 2024.05.09
이벤트 함수 실행 순서 및 특징  (0) 2024.05.08
테스팅 하는 방법 (빌드)  (0) 2024.05.08
객체가 충돌했을 때 회전을 가하는 방법  (0) 2024.05.08