AudioSource는 씬에서 AudioClip을 재생하는 컴포넌트로 AudioListener 컴포넌트를 통해서 씬에서 재생된 소리를 들을 수 있다.
⚔ 주요 속성
| 속성 | 설명 |
|---|---|
| AudioClip | 재생할 소리 파일. (.mp3, .wav 등) |
| Play On Awake | 씬에서 시작하자마자 자동 재생할지 여부 |
| Loop | 소리를 반복 재생할지 여부 |
| Mute | 음소거 설정 |
| Volume | 볼륨 크기 (0.0 ~ 1.0) |
| Pitch | 음의 높낮이 조절 (1이 기본, 0.5 = 느림, 2 = 빠름) |
| Spatial Blend | 2D ~ 3D 사운드 조절 (0 = 2D, 1 = 3D) |
| Output | 오디오 믹서 그룹 연결 (사운드 그룹별 제어할 때 사용) |
| isPlaying | 현재 소리가 재생 중인지 여부 (true / false) |
| clip.length | 현재 설정된 오디오 클립의 길이 (초 단위) |
2D : UI 버튼 클릭음, 배경음악 등 위치와 관계없이 전체적으로 들림.
3D : 캐릭터 주변에서만 들려야 하는 소리. 거리와 방향에 따라 소리 크기/위치가 변함.
⚔ 주요 함수
| 함수 / 속성 | 설명 |
|---|---|
Play(); | 소리 재생 |
Stop(); | 소리 정지 |
Pause(); | 일시 정지 |
UnPause(); | 일시 정지 해제 |
PlayOneShot(clip); | 겹쳐서 재생 (효과음에 자주 사용) |
PlayDelayed(seconds); | 지정한 시간(초) 후에 소리 재생 |
| 항목 | Play() | PlayOneShot() |
|---|---|---|
| 기능 | AudioClip을 재생 | AudioClip을 한 번 재생 |
| 겹치기 | 기존에 재생 중이던 소리를 중단하고 다시 재생 | 소리가 겹쳐서도 재생 가능 |
| 클립 설정 | clip속성에 클립이 설정되어 있어야 함 | PlayOneShot(clip)처럼 매개변수로 직접 클립을 전달함 |
| Loop 지원 | 가능 | 불가능 (무조건 1회 재생) |
Unity Ads 적용 방법
Advertisement Legacy 설치
Services Settings(프로젝트가 유니트 클라우드에 연결되어 있으면 자동으로 Setting 되어있다.)
Unity Ads Monetization 패키지 사용
DeshBoard 클릭
Shortcuts에 Unity Ads Monetization 추가
Enable Ads 클릭
결제 수납인 입력 -> Submit
*Mediation solution사용 여부
다른 프로젝트에서 ad Settings을 가져올지
출시 여부
Key값을 알려주는데 혹시라도 잃어버리면 메뉴의Settings를 클릭하면 확인 가능
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)
{
}
}
가이드로 돌아가서 Implementing rewarded ads in Unity 클릭 후 코드 복사
복사한 코드로 클래스를 생성하고 Button UI에 컴포넌트를 추가
복사한 코드의OnUnityAdsShowComplete()콜백 메서드에 리워드 광고를 봤을 때 행동을 추가(여기서는 광고를 로드하는 구문과MainScene을 로드하는 구문을 추가했다.)
Button 컴포넌트의OnClick()이벤트를 에디터에서 직접 설정하기 위해 복사한 코드의_showAdButton변수와 사용되는 부분 지워주기
Button의OnClick()에ShowAd()추가
유니티 에디터에서 게임을 실행 후 해당 UI 버튼을 클릭하면 다음과 같은 화면이 나온다.
광고가 부족한 경우 다른 sdk를 연결해서 각각의 업체에서 입찰을 진행 -> 그 중 가장 큰 수익을 주는 광고를 송출하는 기능으로 DAU(Daily Account User)가 높아지면 높아질수록 미디에이션이 필요하다.