[5주차] "게임 완성하기"

Flaming Bun·2025년 4월 5일

Unity

목록 보기
6/39

🔥 AudioSource

AudioSource는 씬에서 AudioClip을 재생하는 컴포넌트로 AudioListener 컴포넌트를 통해서 씬에서 재생된 소리를 들을 수 있다.


⚔ 주요 속성

속성설명
AudioClip재생할 소리 파일. (.mp3, .wav 등)
Play On Awake씬에서 시작하자마자 자동 재생할지 여부
Loop소리를 반복 재생할지 여부
Mute음소거 설정
Volume볼륨 크기 (0.0 ~ 1.0)
Pitch음의 높낮이 조절 (1이 기본, 0.5 = 느림, 2 = 빠름)
Spatial Blend2D ~ 3D 사운드 조절 (0 = 2D, 1 = 3D)
Output오디오 믹서 그룹 연결 (사운드 그룹별 제어할 때 사용)
isPlaying현재 소리가 재생 중인지 여부 (true / false)
clip.length현재 설정된 오디오 클립의 길이 (초 단위)

📌 2D & 3D 사운드

  • 2D : UI 버튼 클릭음, 배경음악 등 위치와 관계없이 전체적으로 들림.

  • 3D : 캐릭터 주변에서만 들려야 하는 소리. 거리와 방향에 따라 소리 크기/위치가 변함.


⚔ 주요 함수

함수 / 속성설명
Play();소리 재생
Stop();소리 정지
Pause();일시 정지
UnPause();일시 정지 해제
PlayOneShot(clip);겹쳐서 재생 (효과음에 자주 사용)
PlayDelayed(seconds);지정한 시간(초) 후에 소리 재생

📌 Play()와 PlayOneShot()의 차이

항목Play()PlayOneShot()
기능AudioClip을 재생AudioClip한 번 재생
겹치기기존에 재생 중이던 소리를 중단하고 다시 재생소리가 겹쳐서도 재생 가능
클립 설정clip속성에 클립이 설정되어 있어야 함PlayOneShot(clip)처럼 매개변수로 직접 클립을 전달함
Loop 지원가능불가능 (무조건 1회 재생)


🔥 Unity Ads

Unity Ads 적용 방법

  1. Advertisement Legacy 설치

  2. Services Settings(프로젝트가 유니트 클라우드에 연결되어 있으면 자동으로 Setting 되어있다.)

  3. Unity Ads Monetization 패키지 사용


    DeshBoard 클릭

    Shortcuts에 Unity Ads Monetization 추가

    Enable Ads 클릭

    결제 수납인 입력 -> Submit

    *Mediation solution 사용 여부

    다른 프로젝트에서 ad Settings을 가져올지

    출시 여부

    Key값을 알려주는데 혹시라도 잃어버리면 메뉴의 Settings를 클릭하면 확인 가능

  1. SDK 초기화


    SDK 가이드로 이동

    Initializing the SDK in Unity 클릭 -> 코드 복사

    복사한 코드로 AdsInitializer 클래스 생성 후 컴포넌트 추가하고, 위에서 발급받은 Key값을 IOS와 Android에 입력 (출시할 때 Test Mode 끄기 !)

    게임을 실행 후 초기화에 성공하면 해당 로그가 찍힌다

⚔ AdsInitializer 수정(광고 초기화 시 LoadAd() 추가)
광고가 Load가 안돼있는 경우 광고가 안나오기 때문에 수정하는 것임.

using UnityEngine;
using UnityEngine.Advertisements;

// 1. IUnityAdsLoadListener 추가 상속
public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener, IUnityAdsLoadListener
{
    [SerializeField] string _androidGameId;
    [SerializeField] string _iOSGameId;
    [SerializeField] bool _testMode = true;
    private string _gameId;

	// 2. UnitId 변수 선언
    [SerializeField] string _androidAdUnitId = "Rewarded_Android";
    [SerializeField] string _iOSAdUnitId = "Rewarded_iOS";
    string _adUnitId = null; // This will remain null for unsupported platforms

    void Awake()
    {
        InitializeAds();
    }

    public void InitializeAds()
    {
    // 3. UnitId 초기화
#if UNITY_IOS
            _gameId = _iOSGameId;
            _adUnitId = _iOSAdUnitId;
#elif UNITY_ANDROID
        _gameId = _androidGameId;
        _adUnitId = _androidAdUnitId;
#elif UNITY_EDITOR
            _gameId = _androidGameId; //Only for testing the functionality in the Editor
            _adUnitId = _androidAdUnitId;
#endif
        if (!Advertisement.isInitialized && Advertisement.isSupported)
        {
            Advertisement.Initialize(_gameId, _testMode, this);
        }
    }


    public void OnInitializationComplete()
    {
        Debug.Log("Unity Ads initialization complete.");
        // 4. 광고 초기화 후에 LoadAd()
        LoadAd();
    }

    public void OnInitializationFailed(UnityAdsInitializationError error, string message)
    {
        Debug.Log($"Unity Ads Initialization Failed: {error.ToString()} - {message}");
    }

	// 5. 밑에 Reword 광고의 함수와 같은 함수
    public void LoadAd()
    {
        // IMPORTANT! Only load content AFTER initialization (in this example, initialization is handled in a different script).
        Debug.Log("Loading Ad: " + _adUnitId);
        Advertisement.Load(_adUnitId, this);
    }

// 6. 인터페이스에서 상속받은 함수
    public void OnUnityAdsAdLoaded(string placementId)
    {
        Debug.Log("Ad Loaded: " + placementId);

        if (placementId.Equals(_adUnitId))
        {

        }
    }

    public void OnUnityAdsFailedToLoad(string placementId, UnityAdsLoadError error, string message)
    {
    }
}
  1. Reward 광고


    가이드로 돌아가서 Implementing rewarded ads in Unity 클릭 후 코드 복사

    복사한 코드로 클래스를 생성하고 Button UI에 컴포넌트를 추가

    복사한 코드의 OnUnityAdsShowComplete() 콜백 메서드에 리워드 광고를 봤을 때 행동을 추가(여기서는 광고를 로드하는 구문과 MainScene을 로드하는 구문을 추가했다.)

    Button 컴포넌트의 OnClick() 이벤트를 에디터에서 직접 설정하기 위해 복사한 코드의 _showAdButton 변수와 사용되는 부분 지워주기

    Button의 OnClick()ShowAd() 추가

    유니티 에디터에서 게임을 실행 후 해당 UI 버튼을 클릭하면 다음과 같은 화면이 나온다.

📌 Mediation

광고가 부족한 경우 다른 sdk를 연결해서 각각의 업체에서 입찰을 진행 -> 그 중 가장 큰 수익을 주는 광고를 송출하는 기능으로 DAU(Daily Account User)가 높아지면 높아질수록 미디에이션이 필요하다.

0개의 댓글