핵심 기능 소개
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)
- 월드 좌표계(World Coordinate System): 월드 좌표계는 게임 세계의 전체적인 참조 프레임을 제공. 이는 모든 게임 오브젝트가 공유하며, 월드 좌표계에서의 위치는 게임 환경 내에서 오브젝트의 절대적인 위치를 나타낸다. 월드 좌표계는 변하지 않고 일정하게 유지된다.
- 로컬 좌표계(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의 핵심 개념들
- nput Action: 입력 행동을 정의. 예를 들어 "점프", "공격" 등의 행동을 정의하고, 이러한 행동을 트리거하는 키 또는 버튼을 지정할 수 있다.
- Input Action Asset: 여러 개의 입력 행동을 그룹화하는 방법. 이를 통해 재사용 가능한 입력 설정을 만들어 게임 내의 다른 캐릭터나 메뉴에 적용할 수 있다.
- Player Input Component: Unity의 New Input System에 추가된 새로운 컴포넌트로, 자동으로 입력 행동을 처리하고 해당 게임 오브젝트에 메시지를 보낸다.
New Input System의 장점
- Cross-Platform Compatibility: New Input System은 다양한 플랫폼과 입력 장치에 대해 일관된 방식으로 작동
- Rebinding: 플레이어가 게임 내에서 자신의 입력 설정을 변경할 수 있도록 지원
- 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 |