Unity 강의 1-1 ~ 1-17의 내용 중 몰랐던 기능이나, 의문을 가진 기능을 모아봤다.
🖼️ 1. Sprite Mode: Single과 Multiple의 차이
- Unity에서 이미지를 임포트할 때 Sprite Mode를 설정하게 된다. 이 옵션은 해당 이미지를 하나의 스프라이트로 사용할지, 아니면 여러 개의 스프라이트로 나눠 사용할지를 결정한다.
- Single
이미지 전체를 하나의 스프라이트로 간주한다. UI 아이콘이나 단일 캐릭터 일러스트 등을 표현할 때 적합하다.
- Multiple
하나의 이미지 안에 여러 개의 스프라이트가 들어 있는 경우 선택한다. 이 설정을 하면 Unity의 Sprite Editor를 통해 이미지를 잘라내고 각각의 스프라이트로 사용할 수 있게 된다.
흔히 스프라이트 시트(Sprite Sheet)를 처리할 때 이 옵션을 활용한다.
📐 2. PPU(Pixels Per Unit)란?
- PPU(Pixels Per Unit)는 이미지의 실제 크기를 Unity 세계에서 어떻게 환산할지를 결정하는 값이다.
- 기본값은 100으로 설정되어 있으며, 이는 이미지의 100px이 Unity의 1단위 길이(1 unit)로 해석된다는 뜻이다.
예를 들어, 200px × 200px 크기의 스프라이트를 사용할 때 PPU가 100이라면 게임 안에서는 2 unit × 2 unit 크기로 나타나게 된다.
- 만약 PPU를 낮추면 상대적으로 더 크게 출력되고, 높이면 작게 출력된다. 따라서 PPU 설정은 다른 스프라이트들과의 크기 일관성이나 카메라와의 거리 설정에 큰 영향을 주게 된다.
⏱️ 3. Unity의 라이프 사이클 중 FixedUpdate()에 대하여
- Unity에는 Update(), LateUpdate(), FixedUpdate() 등 다양한 업데이트 메서드가 존재한다.
- 이 중 FixedUpdate()는 물리 연산을 처리할 때 사용되는 메서드로, 일정한 시간 간격으로 호출된다는 특징이 있다.
- Update()는 프레임 속도에 따라 호출 주기가 달라지지만 FixedUpdate()는 고정된 주기로 호출되기 때문에 Rigidbody를 이용한 물리 연산에 적합하다.
- 예를 들어, 중력을 적용하거나 물리적인 힘을 가하는 작업은 FixedUpdate()에서 처리하는 것이 일반적이다.
이 개념을 정확히 이해해두면, 프레임 수에 따라 물리 작동이 불안정해지는 문제를 방지할 수 있다. 특히 각 업데이트의 DeltaTime 또한 달라서 주의가 필요하다.
🔍 4. GetComponentInChildren
- GetComponentInChildren<T>()은 현재 오브젝트뿐만 아니라 자식 오브젝트까지 포함하여 컴포넌트를 검색할 수 있는 메서드다.
TextMeshProUGUI scoreText = GetComponentInChildren<TextMeshProUGUI>();
- 부모 오브젝트에서 자식까지 탐색하므로, 계층이 깊은 UI 구조에서 매우 유용하게 사용된다.
- 단, 자식이 많을수록 탐색 성능에 영향을 줄 수 있으므로, 자주 호출하는 경우에는 한 번 캐싱해서 사용하는 것이 좋다.
🖱️ 5. Input.GetMouseButtonDown(0)의 의미
- Unity에서 마우스 또는 터치 입력을 감지할 때 Input.GetMouseButtonDown(int)을 사용한다.
- 이때 매개변수로 들어가는 숫자는 어떤 버튼/입력인지를 의미한다.
| 숫자 | 입력 종류 |
| 0 | 마우스 왼쪽 버튼 / 터치 |
| 1 | 마우스 오른쪽 버튼 |
| 2 | 마우스 가운데 버튼 |
- 특히 0번은 모바일 터치 입력까지 감지할 수 있기 때문에, 모바일과 PC 환경을 동시에 고려한 입력 처리를 할 때 자주 사용하게 된다.
🧱 6. 콜라이더 충돌 방식: Collision과 Trigger의 차이
- Unity에서 Collider를 사용하는 방식에는 크게 두 가지가 있다: Collision과 Trigger
- Collision:
물리적인 충돌이 발생한다. 예를 들어, 벽에 부딪히면 튕겨나오거나 멈추는 등의 효과가 적용된다.
- Trigger:
물리적인 반응 없이, 단순히 충돌 여부만 알려준다. IsTrigger 옵션을 활성화하면 오브젝트가 통과는 하되, 이벤트는 발생한다.
- Collider 컴포넌트에서 IsTrigger를 체크하면 Trigger 방식으로 작동하고, Collision 방식은 작동하지 않는다.
💥 7. 충돌 처리 함수 총정리
- Unity는 충돌이 발생하는 상황에 따라 3가지 상태를 구분하고,
- Collision 방식과 Trigger 방식에 따라 각각 다른 이벤트 함수를 제공한다.
| 방식 | 진입 | 유지 | 종료 |
| Collision | OnCollisionEnter | OnCollisionStay | OnCollisionExit |
| Trigger | OnTriggerEnter | OnTriggerStay | OnTriggerExit |
- Collision 계열 함수는 Collision 타입을 매개변수로 받으며, 접촉 지점, 상대 속도 등 다양한 정보를 포함한다.
- 반면 Trigger 계열 함수는 Collider만 제공하므로 충돌체 자체에 대한 정보만 받을 수 있다.
🌐 8. GameObject.FindObjectsOfType의 역할
- GameObject.FindObjectsOfType<T>()는 씬 전체에서 특정 타입의 컴포넌트를 모두 검색하여 배열로 반환한다.
Canvas[] canvases = GameObject.FindObjectsOfType<Canvas>();
- 현재 씬에서 활성화된 오브젝트들만 대상으로 탐색하며, 비활성화된 오브젝트는 반환하지 않는다.
- 다수의 오브젝트를 한 번에 찾을 수 있어, 초기화 시에 UI 등을 정리하거나 전체 리스트를 수집할 때 활용된다.
🎬 9. 포스트 프로세싱(Post Processing)
- Post Processing은 카메라가 렌더링한 결과에 추가적인 시각 효과를 적용하는 기술이다.
- 대표적인 효과들:
- Bloom: 빛 번짐 효과
- Depth of Field: 특정 초점 외의 영역을 흐리게 처리
- Color Grading: 색상, 채도, 대비 등을 조절
- Vignette, Chromatic Aberration 등
- Unity에서는 Post Process Volume, Post Process Layer를 통해 손쉽게 이 효과들을 구현할 수 있다. 프로젝트에 시각적 완성도를 더하고 싶다면, 반드시 익혀두어야 한다.
✅ 10. null 체크 방식의 진화
- 예전에는 컴포넌트나 오브젝트가 null인지 확인하려면 다음처럼 작성해야 했다.
if (scoreUI != null)
{
scoreUI.Init(this);
}
- 하지만 C# 6.0 이후부터는 **null 조건 연산자(?.)**를 사용할 수 있게 되었다.
scoreUI?.Init(this);
- 이 방식은 체이닝된 함수나 프로퍼티가 여러 개인 경우 가독성을 크게 향상시켜준다. 또한 불필요한 들여쓰기를 줄여 코드가 간결해진다. 경고가 보기 싫어, 위 방식대로 했었는데, 좋은 걸 얻었다.
'Programming > Unity 정보, 기능' 카테고리의 다른 글
| Unity 기능 - FindObjectOfType 호출 시점 (0) | 2025.07.23 |
|---|---|
| Unity 기능 - transform.Find() 사용 이유와 구조 이해 (3) | 2025.07.23 |
| Unity 생성 주기 - 인스펙터 값 반영 문제 (0) | 2025.07.02 |
| Unity 2D 기능 - 애니메이션 녹화 (0) | 2025.07.01 |
| Unity 기초 기능 #5 - 스플래시 이미지, 안드로이드로 빌드하기, 광고 넣기 (0) | 2025.06.18 |
