내일배움캠프 35일차 TIL Unity 게임개발 심화(Particle System,Animation Events, 다양한 오디오 컴포넌트)
유니티 파티클 시스템(Particle System)
유니티의 파티클 시스템은 게임 및 시뮬레이션에서 다양한 시각 효과를 만드는 데 사용된다. 이는 불꽃, 연기, 폭발, 눈, 비, 마법 효과 등 다양한 상황에서 활용된다. 파티클 시스템은 수많은 작은 그래픽 요소(파티클)를 생성, 제어, 그리고 시각적으로 조합하여 복잡한 시각 효과를 만들어낸다.
1. 파티클 시스템 컴포넌트
- Particle System: 파티클 시스템을 구성하는 기본 컴포넌트. 이를 통해 파티클의 생성, 속성, 동작 등을 설정할 수 있다.
2. 파티클 시스템 모듈
파티클 시스템 모듈은 다양한 파티클 속성을 조정하는 데 사용된다. 주요 모듈들은 다음과 같다:
- Main Module: 파티클 시스템의 기본 설정을 정의. 파티클의 수명, 속도, 크기, 색상, 회전, 중력 등을 설정할 수 있다.
- Emission Module: 파티클의 생성 속도와 양을 설정한다. Bursts 기능을 사용하여 특정 시점에 많은 파티클을 한꺼번에 생성할 수도 있다.
- Shape Module: 파티클의 방출 형태를 정의. 구, 원통, 박스, 원, 도넛 등 다양한 형태로 파티클을 방출할 수 있다.
- Velocity over Lifetime Module: 파티클이 살아있는 동안 속도 변화를 설정. 이를 통해 파티클의 움직임을 더욱 다채롭게 만들 수 있다.
- Limit Velocity over Lifetime Module: 파티클의 속도를 제한. 특정 속도 이상으로 파티클이 움직이지 않도록 제어.
- Force over Lifetime Module: 파티클에 일정한 힘을 가한다. 중력이나 바람 같은 효과를 줄 수 있다.
- Color over Lifetime Module: 파티클의 색상이 시간에 따라 변하게 설정.
- Size over Lifetime Module: 파티클의 크기가 시간에 따라 변하게 설정.
- Rotation over Lifetime Module: 파티클의 회전 속도를 설정.
- External Forces Module: 파티클 시스템 외부의 힘(예: 바람 영역)과 상호작용하게 설정.
- Noise Module: 파티클의 움직임에 노이즈(불규칙성)를 추가. 이를 통해 더 자연스러운 효과를 만들 수 있다.
- Collision Module: 파티클이 다른 객체와 충돌하게 설정. 이를 통해 파티클이 표면에 반사되거나 소멸하는 효과를 줄 수 있다.
- Triggers Module: 파티클이 특정 트리거와 상호작용하도록 설정.
- Sub Emitters Module: 파티클이 다른 파티클 시스템을 생성하게 한다. 예를 들어, 폭발 파티클에서 추가로 작은 파티클들이 방출될 수 있다.
- Texture Sheet Animation Module: 파티클의 텍스처를 애니메이션 시킨다. 파티클의 모양을 시간에 따라 변화시킬 수 있다.
- Lights Module: 파티클이 빛을 발하게 설정. 예를 들어, 불꽃 파티클은 주변을 밝히는 효과를 줄 수 있다.
- Trail Module: 파티클이 이동하면서 자취를 남기게 설정. 이를 통해 불꽃이나 연기 같은 효과를 만들 수 있다.
- Renderer Module: 파티클의 렌더링 방식을 설정. 파티클의 메터리얼, 셰이더, 렌더 모드 등을 정의.
3줄 요약:
- 유니티 파티클 시스템은 다양한 시각 효과를 만드는 데 사용됩니다.
- 파티클 시스템은 Particle System 컴포넌트와 여러 모듈로 구성됩니다.
- 주요 모듈은 Main, Emission, Shape, Velocity over Lifetime, Color over Lifetime 등을 포함합니다.
애니메이션 이벤트(Animation Events)
애니메이션 이벤트(Animation Events)는 애니메이션 클립 내의 특정 시점에서 특정 함수나 동작을 호출할 수 있게 하는 기능이다. 이는 게임이나 애플리케이션에서 애니메이션과 코드 간의 상호작용을 가능하게 하여 다양한 효과와 동작을 구현할 수 있게 한다.
- 기능: 애니메이션 이벤트는 애니메이션 클립의 특정 프레임에서 함수를 호출할 수 있는 기능을 제공. 이를 통해 애니메이션 재생 중 특정 시점에 게임 오브젝트의 동작을 변경하거나 특정 효과를 실행할 수 있다.
- 활용 사례: 캐릭터가 공격할 때 실제 공격 판정을 내리는 시점, 캐릭터가 점프할 때 점프 소리를 재생하는 시점, 특정 애니메이션이 끝날 때 이벤트를 트리거하여 다음 동작을 준비하는 경우 등이 있다.
애니메이션 이벤트의 코드 작성
- 함수 정의: 애니메이션 이벤트에서 호출할 함수를 정의. 함수는 반드시 public이어야 하며, void 반환형을 가져야 한다.
- 매개변수 설정: 함수는 최대 하나의 매개변수를 가질 수 있다. 이벤트에서 설정한 매개변수가 함수에 전달.
주의사항 및 최적화
- 정확한 함수 이름: 이벤트에서 호출할 함수 이름이 정확히 일치해야 한다. 잘못된 함수 이름을 입력하면 이벤트가 실행되지 않는다.
- 함수 위치: 함수는 애니메이션 이벤트가 적용된 게임 오브젝트나 그 자식 오브젝트에 존재해야 한다.
- 성능 고려: 이벤트가 너무 많이 호출되거나 복잡한 로직을 포함하면 성능에 영향을 미칠 수 있다. 필요한 경우 이벤트 호출 횟수를 조정하거나 로직을 최적화해야 한다.
5줄 요약:
- 유니티 애니메이션 이벤트는 애니메이션 클립의 특정 시점에서 함수를 호출하는 기능.
- 애니메이션 창에서 이벤트를 추가하고, 호출할 함수를 선택하여 설정할 수 있다.
- 호출할 함수는 public이어야 하며, 최대 하나의 매개변수를 가질 수 있다.
- 다양한 게임 메커니즘에서 동작 트리거, 이펙트 및 사운드 재생 등에 활용할 수 있다.
- 함수 이름 정확성, 위치, 성능 최적화 등을 고려하여 사용해야 한다.
오디오 시스템
유니티에서 사운드를 처리하는 주요 컴포넌트는 여러 가지가 있으며, 각각의 컴포넌트는 특정 기능을 제공한다. 유니티의 오디오 시스템은 직관적이고 강력하며, 다양한 오디오 효과를 구현할 수 있도록 설계되어 있다. 다음은 주요 오디오 컴포넌트와 기능이다.
1. AudioSource
AudioSource는 유니티에서 사운드를 재생하는 데 사용하는 가장 기본적인 컴포넌트이다.
이 컴포넌트를 사용하면 게임 오브젝트에서 사운드를 재생할 수 있다.
- Clip: 재생할 오디오 클립을 지정.
- Output: 오디오 소스의 출력을 오디오 믹서 그룹에 연결할 수 있다.
- Mute: 오디오를 음소거할 수 있다.
- Bypass Effects: 오디오 소스가 오디오 효과를 무시하도록 설정.
- Bypass Listener Effects: 오디오 소스가 오디오 리스너의 효과를 무시하도록 설정.
- Bypass Reverb Zones: 오디오 소스가 리버브 존의 효과를 무시하도록 설정.
- Play On Awake: 게임 시작 시 자동으로 오디오를 재생.
- Loop: 오디오 클립을 반복 재생.
- Priority: 오디오 소스의 재생 우선순위를 설정.
- Volume: 오디오 소스의 볼륨을 조정.
- Pitch: 오디오 소스의 피치를 조정.
- Stereo Pan: 오디오의 좌우 스테레오 위치를 설정.
- Spatial Blend: 2D와 3D 오디오 간의 혼합 비율을 설정.
- Reverb Zone Mix: 리버브 존의 혼합 비율을 설정.
2. AudioListener
AudioListener는 오디오 시스템에서 소리를 듣는 역할. 일반적으로 카메라와 같은 게임 오브젝트에 부착되며, 게임 내에서 플레이어의 청취 위치를 나타낸다.
- Volume: 전체 게임의 오디오 볼륨을 조정.
3. AudioClip
AudioClip은 오디오 데이터를 포함하는 에셋. 다양한 오디오 형식을 지원하며, AudioSource 컴포넌트에서 재생할 수 있다.
- Load Type: 오디오 클립의 로딩 방식을 설정. (Decompress on Load, Compressed in Memory, Streaming)
- Preload Audio Data: 씬이 로드될 때 오디오 데이터를 미리 로드할지 여부를 설정.
- Ambisonic: 클립이 Ambisonic 오디오 데이터를 포함하는지 여부를 설정.
4. AudioMixer
AudioMixer는 오디오 신호를 믹싱하고 처리하는 데 사용되는 컴포넌트. 여러 오디오 소스를 그룹화하고, 볼륨, 피치, 효과 등을 조정할 수 있다.
- Groups: 오디오 믹서 그룹을 정의하여 오디오 소스를 조직화.
- Snapshots: 특정 믹싱 상태를 저장하고, 다른 상태로 전환할 수 있다.
- Effects: 믹서 그룹에 오디오 효과를 추가하고 조정할 수 있다.
5. AudioMixerGroup
AudioMixerGroup은 AudioMixer 내에서 오디오 소스의 그룹을 나타낸다. 각 그룹은 독립적인 볼륨과 효과를 가질 수 있다.
- Audio Effects: 특정 그룹에 적용할 오디오 효과를 설정할 수 있다.
6. AudioMixerSnapshot
AudioMixerSnapshot은 AudioMixer의 특정 상태를 저장하고, 이를 통해 다양한 믹싱 상태 간에 전환할 수 있다.
- Transition To Snapshots: 특정 스냅샷으로 부드럽게 전환할 수 있는 기능을 제공.
7. Reverb Zone
Reverb Zone은 특정 영역에서 리버브(잔향) 효과를 적용하는 데 사용. 이는 3D 오디오 환경에서 사운드의 현실감을 높이는 데 유용.
- Min Distance: 리버브 효과가 적용되기 시작하는 최소 거리.
- Max Distance: 리버브 효과가 완전히 적용되는 최대 거리.
- Reverb Preset: 다양한 리버브 사전 설정을 사용하여 손쉽게 리버브 효과를 설정할 수 있다.
5줄 요약:
- AudioSource: 사운드를 재생하는 기본 컴포넌트로, 다양한 재생 옵션과 설정을 제공.
- AudioListener: 게임 내에서 사운드를 듣는 역할을 하며, 주로 카메라에 부착된다.
- AudioClip: 오디오 데이터를 포함하는 에셋으로, 다양한 형식을 지원.
- AudioMixer: 여러 오디오 소스를 믹싱하고 처리하는 데 사용되며, 그룹과 스냅샷을 통해 유연한 오디오 관리가 가능.
- Reverb Zone: 특정 영역에 리버브 효과를 적용하여 3D 오디오 환경의 현실감을 높인다.