사운드 연결: 효과음과 배경음을 과도한 결합 없이 관리하기
15강. 사운드 연결: 효과음과 배경음을 과도한 결합 없이 관리하기
1. 이번 강의에서 해결할 문제
SortZone과 GameSession마다 AudioSource를 직접 호출하면 클립 교체와 음량 정책이 게임 규칙에 섞입니다. 결과 이벤트를 오디오 전용 Presenter가 듣게 합니다.
2. 학습 목표
3. 핵심 개념
게임 규칙은 “정답·실패가 발생했다”만 알리고 AudioPresenter가 어떤 클립을 재생할지 결정합니다. 짧은 효과음은 PlayOneShot, 반복 배경음은 별도 Source의 Loop를 사용합니다. 무료 에셋도 상업 이용·표시 조건을 확인하고 출처 문서에 기록합니다.
4. 단계별 실습
C# · GameSession.cs에 결과 이벤트 추가
public event Action<PackageOutcome> OutcomeResolved;
// HandleResolved에서 상태 계산 전후 한 번 호출
OutcomeResolved?.Invoke(outcome);
C# · 파일 경로: Assets/_Project/Scripts/Audio/AudioPresenter.cs
using DeliverySorter.Core;
using DeliverySorter.Gameplay;
using UnityEngine;
namespace DeliverySorter.Audio
{
public sealed class AudioPresenter : MonoBehaviour
{
[SerializeField] private GameSession session;
[SerializeField] private AudioSource effectsSource;
[SerializeField] private AudioClip correctClip;
[SerializeField] private AudioClip failureClip;
private void OnEnable() => session.OutcomeResolved += PlayOutcome;
private void OnDisable() => session.OutcomeResolved -= PlayOutcome;
private void PlayOutcome(PackageOutcome outcome)
{
AudioClip clip = outcome == PackageOutcome.Correct ? correctClip : failureClip;
if (clip != null && effectsSource != null) effectsSource.PlayOneShot(clip);
}
}
}
Unity Editor 작업: Audio GameObject에 효과음용 AudioSource와 Presenter를 붙입니다. 배경음은 별도 AudioSource에 Loop를 켜고 Play On Awake 여부를 상태 정책에 맞게 정합니다.
Inspector 연결 작업: Session, Effects Source, 두 Clip을 연결합니다. 무료 클립의 출처·라이선스를 ThirdPartyAssets.md에 기록합니다.
테스트 작업: 정답과 실패를 빠르게 반복해 음량이 지나치게 커지거나 클립이 끊기지 않는지 확인합니다. 무음 상태에서도 null 예외 없이 플레이되어야 합니다.
5. 코드가 동작하는 이유
AudioPresenter만 AudioClip과 AudioSource를 알고 GameSession은 결과 의미만 이벤트로 보냅니다. 클립을 바꾸거나 음량 믹서를 추가해도 판정·점수 코드가 바뀌지 않습니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
사운드 연결: 효과음과 배경음을 과도한 결합 없이 관리하기 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.