[Unity3D] Unity Ads를 이용한 유니티 광고 넣기




구글의 여러 블로그에서는 매우 간단한 과정이라고 소개하고 있는데, 블로그에서 설명한 것 보다는 생각보다 할 게 많다. 차근차근 따라해보자.


1. window -> General -> Services를 클릭하자. (또는 command + 0을 눌러주자. 윈도우 버젼은 모르겠다. ctrl + 0일 것 같다.)




2. 유니티 ID를 입력하지 않으면 Unity Ads를 이용할 수 없다. 유니티 ID를 입력해주자.




3. ID를 입력하고 Ads가 off로 되어있는 것을 볼 수 있다. 눌러보자.





4. Monetize your games를 토글을 눌러 on으로 바꿔주자.





5. Test mode -> Enable test mode를 체크해주자. 나중에 출시할 때에는 다시 체크 해제를 해주면 된다.





6. 아래와 같이 ShowAd() 를 만들어주자. (물론 함수 이름은 자유며, 광고를 보여주는 방식도 본인의 게임 방식에 따라 달라지게 될 것이다. 그 부분은 각자 원하는대로 만들도록 하자.)





여기까지 했다면 이제 거의 다 된 것이다. 많은 블로그에서 이 과정까지 하면 끝이라고 설명하고 있는데, 본인은 2가지 문제에 직면하게 된다.

  1. Advertisement에 빨간 밑줄이 그어져있는 경우 (즉 호출을 할 수 없는 경우)
  2. 호출을 해결해도 Advertisement.IsReady()가 false만 나올 경우
혹시라도 같은 문제가 발생했다면 (아마 2번은 거의 발생할 것 같은데.. 원래 기본적인 건데 본인이 놓친 건지는 모르겠다.) 아래를 참고하자.








1번 해결법

Assets/SpaceAds/Scripts/UnityAdsHelper.cs(10,19): error CS0234: The type or namespace name `Advertisements' does not exist in the namespace `UnityEngine'. Are you missing an assembly reference?
Unity Ads 플러그인 자체가 없어서 발생하는 경우이다. 이 경우 Services 탭으로 들어가면 주황색 경고 메세지가 뜨면서 플러그인을 설치하라고 할텐데, 아래와 같이 설치해주자.

1-1. Window -> Package Manager를 들어간다.





1-2. Advertisement를 찾아 install 해주자. (본인은 현재 다운받은 상태여서 Up to date로 되어있다. 아마 이 위치에 install이 있을 것이다.)




1-3. 이래도 안된다면 아마 최신 버젼의 Advertisement가 아니기 때문일 것이다. Up to date 옆을 클릭해서 가장 최신 버젼을 찾아서 Up to date를 클릭해주자.)




1-4. 혹시 이래도 안되면 Unity를 껐다가 켜보고, 그래도 안된다면 Services의 Ads 토글을 off로 바꾸고 껐다가 다시 키고 on으로 바꿔보자. 그래도 안된다면... 잘 모르겠다. 혹시 using UnityEngine.Advertisements로 임포트를 안했는지 확인해보자.


참고로 플러그인은 Window -> Asset Store에서도 다운로드할 수 있다. Asset Store에서 Ads라고 검색한 후 Unity technologies에서 만든 플러그인을 다운로드하면 될 것같다. (안해봐서 모르겠다.)





2번 해결법

테스트 광고가 안 나왔을 때 아래와 같은 과정을 거치니 제대로 된다. 다음 과정을 진행해주자.

1. https://unityads.unity3d.com 여기서 start monetizing now를 클릭하거나, https://id.unity.com 여기서 대시보드에 들어가거나 어떤 방법이든 대시보드에 들어간다.


2. Projects에서 자신의 프로젝트를 선택해주자. 또는 위의 New Project를 클릭해서 새로 만들어주자. 



3. 자신의 Game IDs가 나올 것이다. 안드로이드와 ios 각각 다른 ID를 가지는데, 자신이 만들고자 하는 게임 플랫폼의 아이디를 복사해두자.




4. 아래와 같이 Awake()에 Advertisement.Initialize("ID", true)를 넣어주자. 여기서 true -> 테스트용 광고, false -> 실제 광고가 표시된다.




아래는 일반 광고와 보상 광고 기능에 대한 코드이다. 일반 광고와 달리 보상 광고는 스킵하거나 끄지 않고 다 봤을 경우 개발자가 정한 보상을 제공하게끔 할 수 있다.



using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine.Advertisements;

public class sceneManager : MonoBehaviour
{

    public void ShowAd()
    {
        if (Advertisement.IsReady())
        {
            Advertisement.Show("video");
        }
    }

    public void ShowRewardAd()
    {
        if (Advertisement.IsReady())
        {
            ShowOptions options = new ShowOptions { resultCallback = ResultAds };
            Advertisement.Show("rewardedVideo", options);
        }
    }

    void ResultedAds(ShowResult result)
    {
        switch (result)
        {
            case ShowResult.Failed:
                Debug.LogError("광고 보기에 실패했습니다.");
                break;
            case ShowResult.Skipped:
                Debug.Log("광고를 스킵했습니다.");
                break;
            case ShowResult.Finished:
                // 광고 보기 보상 기능 
                Debug.Log("광고 보기를 완료했습니다.");
                break;
        }
    }


    void Awake()
    {
        Advertisement.Initialize("3382566", false);
    }

}



이제 각자의 방법으로 테스트를 해보자. 참고로 Initialize를 호출하는게 느려서 그런건지는 몰라도, Start()ShowAd()를 넣으면 제대로 안되고, (Debug 해보니까 IsReady()가 계속 false로 나오고 좀 있다가 true로 바뀌더라.) Update() 에 넣어서 돌려보니 광고가 제대로 나왔다. (게임을 시작하자마자 바로 나옴) 아마 게임 실행하고 구글 로그인거나 import 하는 등의 과정에서 시간이 걸려서 그런 것 같은데, 광고가 적절한 타이밍에 나오도록 각자의 방식으로 만들어보자. (본인은 retry 버튼을 6번 눌렀을 때 횟수를 초기화하고 광고가 나오는 방식으로 만들었다.)
개발하는데 조금이라도 도움이 되었으면 한다.

댓글

댓글 쓰기