-
내일배움캠프 사전 5주차2 - 효과음 삽입, 프로젝트 빌드, 광고TIL/Unity 2024. 4. 12. 15:53
[학습 내용]
이번에는 게임에 소리를 넣어보았다. 캠프에서 제공받은 오디오 파일을 활용하였다.
오디오 파일들을 에셋 폴더에 넣어주었다. 그리고 먼저 카드 뒤집는 소리를 담기 위해 Card 프리펩을 건드려주기로 했다. Card.cs에 아래같이 내용을 추가했다.
AudioSource audioSource; public AudioClip clip; private void Start() { audioSource = GetComponent<AudioSource>(); } public void OpenCard() { ... audioSource.PlayOneShot(clip); ... }
다음으로 카드 맞추기에 성공했을 때 나는 소리를 넣어주었다. 카드 일치 판정은 GameManager에서 해주었기 때문에 이전과 같은 방법으로 소리를 넣어주었다.
AudioSource audioSource; public AudioClip clip; private void Start() { audioSource = GetComponent<AudioSource>(); } public void Matched() { ... audioSource.PlayOneShot(clip); ... }
이 과정에서 오류가 발생했는데, 알고보니 GameManager에 Audio Source 컴포넌트를 붙여주지 않아서였다. 이전의 작업을 반복하다보니 꼼꼼하게 하지 못해 놓친 부분이었다. 컴포넌트를 붙여주자 바로 해결되었다.
다음으로는 게임 전반적으로 흘러나올 배경음악을 넣어주었다. 따로 AudioManager를 만들고 그것을 통해 관리해주는 방식으로 구현했다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AudioManager : MonoBehaviour { AudioSource audioSource; public AudioClip clip; void Start() { audioSource = GetComponent<AudioSource>(); audioSource.clip = this.clip; audioSource.Play(); } }
그리고 StartScene과 MainScene에서 둘 다 배경음악을 관리하기 위해서 AudioManager를 싱글톤 형태로 구현했다.
public static AudioManager instance; private void Awake() { if(instance == null) { instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } }
게임이 다 완성되었기 때문에 다음으로는 빌드를 진행했다.
다음으로는 광고도 붙여보았다. Unity에서 제공하는 Advertisement Legacy 기능을 활용하였다. AdManager를 만들고 광고 초기화를 시켜주었다. 그러기 위해 AdInitialize.cs를 작성하여 컴포넌트로 붙여주었다. 안드로이드 게임 아이디와 IOS 게임 아이디도 받아서 넣어줬다.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Advertisements; public class AdInitialize : MonoBehaviour, IUnityAdsInitializationListener { [SerializeField] string _androidGameId; [SerializeField] string _iOSGameId; [SerializeField] bool _testMode = true; private string _gameId; void Awake() { InitializeAds(); } public void InitializeAds() { #if UNITY_IOS _gameId = _iOSGameId; #elif UNITY_ANDROID _gameId = _androidGameId; #elif UNITY_EDITOR _gameId = _androidGameId; //Only for testing the functionality in the Editor #endif if (!Advertisement.isInitialized && Advertisement.isSupported) { Advertisement.Initialize(_gameId, _testMode, this); } } public void OnInitializationComplete() { Debug.Log("Unity Ads initialization complete."); } public void OnInitializationFailed(UnityAdsInitializationError error, string message) { Debug.Log($"Unity Ads Initialization Failed: {error.ToString()} - {message}"); } }
그리고 게임이 끝났을 때 출력되는 재시작 문구 버튼을 누르면 광고가 보여지도록 수정했다.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Advertisements; using UnityEngine.SceneManagement; public class RewardedButton : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener { [SerializeField] string _androidAdUnitId = "Rewarded_Android"; [SerializeField] string _iOSAdUnitId = "Rewarded_iOS"; string _adUnitId = null; // This will remain null for unsupported platforms void Awake() { // Get the Ad Unit ID for the current platform: #if UNITY_IOS _adUnitId = _iOSAdUnitId; #elif UNITY_ANDROID _adUnitId = _androidAdUnitId; #endif // Disable the button until the ad is ready to show: } // Call this public method when you want to get an ad ready to show. 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); } // If the ad successfully loads, add a listener to the button and enable it: public void OnUnityAdsAdLoaded(string adUnitId) { Debug.Log("Ad Loaded: " + adUnitId); if (adUnitId.Equals(_adUnitId)) { // Configure the button to call the ShowAd() method when clicked: // Enable the button for users to click: } } // Implement a method to execute when the user clicks the button: public void ShowAd() { // Disable the button: // Then show the ad: Advertisement.Show(_adUnitId, this); } // Implement the Show Listener's OnUnityAdsShowComplete callback method to determine if the user gets a reward: public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState) { if (adUnitId.Equals(_adUnitId) && showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED)) { Debug.Log("Unity Ads Rewarded Ad Completed"); // Grant a reward. SceneManager.LoadScene("MainScene"); } } // Implement Load and Show Listener error callbacks: public void OnUnityAdsFailedToLoad(string adUnitId, UnityAdsLoadError error, string message) { Debug.Log($"Error loading Ad Unit {adUnitId}: {error.ToString()} - {message}"); // Use the error details to determine whether to try to load another ad. } public void OnUnityAdsShowFailure(string adUnitId, UnityAdsShowError error, string message) { Debug.Log($"Error showing Ad Unit {adUnitId}: {error.ToString()} - {message}"); // Use the error details to determine whether to try to load another ad. } public void OnUnityAdsShowStart(string adUnitId) { } public void OnUnityAdsShowClick(string adUnitId) { } void OnDestroy() { // Clean up the button listeners: } }
[결과물]
'TIL > Unity' 카테고리의 다른 글
내일배움캠프 4일차 TIL - GitHub 특강, 프로젝트 완성 (1) 2024.04.18 내일배움캠프 2일차 TIL - 프로젝트 합병, GitHub (0) 2024.04.16 내일배움캠프 1일차 TIL - S.A 작성, 팀원 소개 카드 게임 (1) 2024.04.15 내일배움캠프 사전 5주차1 - 시작 화면과 스플래시 이미지 (0) 2024.04.11 내일배움캠프 사전 4주차 - 르탄이 카드 뒤집기 게임 제작 (0) 2024.04.05