본문 바로가기

Unity 기초 개념 정리 모음 #5

@코야딩구2025. 7. 23. 20:01

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를 사용하는 방식에는 크게 두 가지가 있다: CollisionTrigger

- 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);

- 이 방식은 체이닝된 함수나 프로퍼티가 여러 개인 경우 가독성을 크게 향상시켜준다. 또한 불필요한 들여쓰기를 줄여 코드가 간결해진다. 경고가 보기 싫어, 위 방식대로 했었는데, 좋은 걸 얻었다.

목차