Learning
When: 1학년 6월 15일
How:
게임에서 적에게 맞으면 화면이 흔들리는 것을 구현하려고 했는데, 이렇게 자주 쓰는 기능을 유니티에서 제공하지 않을 것 같지 않아서 GPT에게 물어보니 시네마신 카메라에 기능이 있다고 하였습니다.
Understanding:
저는 지금까지 오브젝트를 따라가게 하는 기능만 사용하고 있었지만, 시네마신 카메라는 다양한 기능이 있는데, 카메라 전환, 화면 흔들기, 카메라 반응 영역을 지정하기 등 유용한 기능이 많이 있습니다. 화면 흔들기는 시네마신 카메라로 세팅하고, 코드로 흔들기 실행해주면 아주 쉽게 구현할 수 있습니다.
[SerializeField] private CinemachineImpulseSource impulse; //CinemachineImpulseSource 변수로 받기
private void Shake()
{
impulse.GenerateImpulse(); //흔들기 메서드
}

이렇게 Cinemachine Impulse Source를 컴포넌트에 추가해주고, Cinemachine Impulse Listener도 추가해 주면, 컴포넌트 준비는 끝납니다. (시네마신 기능을 사용할 때 시네마신 카메라 컴포넌트는 꼭 있어야 합니다.)
Source의 설정
- Impulse Channel: 채널인데 Listener의 채널과 같아야 합니다.
- Impulse Type: 충격을 어떻게 전달할지 (Uniform: 모든 방향에 균일하게 퍼짐, Directional: 방향이 있는 충격 전달 — 총에 맞았을 때 총알의 방향에 따라 충격 방향도 다르게 하고 싶을 때 사용)
- Impulse Shape: 충격의 파형 형태 (Bump: 빠르게 진동하고 점점 줄어듦, Recoil, Explosion 등 다양한 타입이 있으며, 옆의 숫자는 지속 시간입니다.)
- Default Velocity: 충격이 퍼지는 기본 방향입니다.
- Test With Force: 게임 실행하고 Invoke를 누르면 수동으로 흔들 수 있습니다. 오른쪽은 세기입니다.
Listener의 설정
- Apply After: 이 흔들림을 카메라 파이프라인의 어느 단계에 적용할지 설정합니다. (기본적으로 Noise로 설정되어 있습니다.)
- Channel Mask: 받아들일 채널입니다. (기본 값은 default이며, Source의 채널과 같아야 합니다.)
- Gain: 흔들림의 강도를 조절합니다. (1 = 100%)
- Use 2D Distance: 거리 감쇠를 2D로 계산할지 여부입니다. (2D 게임에서는 체크 해제해야 합니다.)
- Use Camera Space: 충격 방향을 카메라 기준으로 해석할지 여부입니다. (체크하면 카메라의 회전에 따라 방향도 바뀝니다.)
- Signal Combination Mode: 여러 충격이 동시에 들어올 때 어떻게 처리할지 결정합니다. (Additive: 모든 충격을 더함(기본), Max: 가장 강한 충격만 반영)
- Reaction Settings:
| Secondary Noise | 기본 충격 외에 보조적인 흔들림 노이즈를 줘서 복잡한 연출을 쓸 때 사용 가능합니다. |
| Amplitude Gain | 진폭(흔들림의 크기)을 조절합니다. 기본값은 1입니다. |
| Frequency Gain | 흔들림의 속도/빈도를 조절합니다. 기본값은 1입니다. |
| Duration | 충격이 적용되는 총 지속 시간입니다. 기본값은 1초입니다. |
Result: 굳이 코드로 열심히 구현하지 않아도 웬만한 움직임은 Unity에서 시네마신으로 구현해주었으니 요긴하게 쓰도록 하시는 것이 좋습니다.
'UnityEngine' 카테고리의 다른 글
| [Unity] 파티클을 UI 위로 뿌리는 방법. (0) | 2025.06.17 |
|---|---|
| [Unity] 애니메이션에서 함수 호출하는 방법 (0) | 2025.06.16 |
| [Unity] 기즈모(Gizmos) 그리기 (0) | 2025.06.14 |
| [Unity] 전처리 지시문(Unity 용) (0) | 2025.06.13 |
| [Unity] 프로퍼티 직렬화하기 (0) | 2025.06.11 |