본문 바로가기
디지털노마드

챗GPT 게임개발67: Unity에서 Google Mobile Ads로 배너 광고 구현하기

by 인텔리노마드라이프 2024. 11. 29.
728x90

안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.

 

이번 시간에는 Unity에서 Google Mobile Ads를 활용하여 배너 광고를 구현하는 방법을 알아보겠습니다. 특히 BannerViewController 스크립트를 중심으로, 광고를 생성하고 로드하며, 사용자 인터랙션에 따라 광고를 제어하는 방법을 소개해 드릴게요.

 

이 스크립트를 통해 게임 내에서 손쉽게 배너 광고를 표시하고 관리할 수 있습니다. 단계별로 필요한 코드와 설명을 함께 제공하니, 프로젝트에서 바로 적용해 보세요.

 


신개념 메모리 게임의 탄생. 외워라! 창고.



2024.11.14 - [분류 전체보기] - [외워라!창고] 챗GPT를 활용해서 개발한 두 번째 게임을 여러분께 소개합니다!

 

[외워라!창고] 챗GPT를 활용해서 개발한 두 번째 게임을 여러분께 소개합니다!

안녕하세요, 인텔리원스튜디오(IntelliOneStudio)에서 흥미진진한 소식을 가지고 왔어요! 저희가 챗GPT를 활용해서 개발한 두 번째 게임을 여러분께 소개합니다! 이 게임은 챗GPT의 놀라운 AI 기능을

intellinomadlife.tistory.com

창고에 물건을 보관하면 더이상 보여주지 않고, 오로지 당신의 기억력으로 찾아야해요.

날이 갈수록 늘어나는 상품들과 주문에도 정확하고 빠르게 물건을 찾아 배송해야해요.

과연 당신은 며칠까지 버틸수 있을까요?

당신의 기억력을 시험해봐요. 지금 다운로드하세요.

 

[아이폰 앱스토어 다운로드]

https://apps.apple.com/kr/app/%EC%99%B8%EC%9B%8C%EB%9D%BC%EC%B0%BD%EA%B3%A0/id6737766088

 

‎외워라창고

‎환영합니다. 우리 창고는 매일 새롭게 들어오는 상품을 각기 다른 각기 다른 상자에 보관해요. 주문이 들어오면 그 상품들을 찾아 포장하고, 정확한 주소로 배송하는 것이 여러분의 임무입니

apps.apple.com

 


 

 

저희가 챗GPT를 활용해서 개발한 첫 번째 게임을 여러분께 소개합니다! 이 게임은 챗GPT의 놀라운 AI 기능을 활용해 개발했어요. 즐거움이 가득한 이번 게임은, 챗GPT를 활용해서 누구든지 게임을 재미있게 만들 수 있다는 것을 보여줄 거에요.

 

* APP Store 에서 다운로드 

https://apps.apple.com/kr/app/%EB%86%8D%EB%B6%80%EC%9D%98-%EA%BF%88/id6479183930

 

‎농부의 꿈

‎오래된 전설이 숨겨져 있는 [농부의 꿈]목장 한구석에서 ‘비밀의 문'과 '마법 책'이 발견되었어요. [변신하는 동물들] 병아리가 합쳐져 닭이 되고, 닭이 합쳐져 고슴도치로 변신하며, 점점 더

apps.apple.com

 

 

*Google Play 에서 다운로드

https://play.google.com/store/apps/details?id=com.intellione.farmersfirstdream&pcampaignid=web_share

 

농부의 꿈 - Google Play 앱

평화로운 목장에서 신나는 동물 합치기 무료게임 (바람, 뚫어뻥, 밧줄, 무중력 등 매직 아이템 활용해 병아리를 젖소로 키워보세요.)

play.google.com

 

 


주요 기능 소개

1. Google Mobile Ads 초기화 및 배너 광고 생성

2. 광고 SDK를 초기화하고, 화면 하단에 배너 광고를 생성합니다.

3. 배너 광고 로드 및 제어

4. 광고를 로드하고, 필요에 따라 광고를 보여주거나 숨길 수 있습니다.

5. 이벤트 리스너를 통한 광고 상태 관리

6. 광고 로드 성공, 실패, 클릭 등의 이벤트를 처리하여 사용자 경험을 향상시킵니다.

 

아래와 같이 ChatGPT에게 질문했어요.

※ ChatGPT 답변 내용 중 제가 별도로 표시한 굵은 글씨를 기준으로 읽으시면 좀 더 이해가 쉽게 될 거예요.

 

[질문]

안녕, ChatGPT. Unity에서 Google Mobile Ads를 사용하여 배너 광고를 구현하고 싶어. BannerViewController 스크립트를 작성했는데, 어떻게 동작하는지 자세히 설명해 줄 수 있어?

 

[답변]

안녕하세요! BannerViewController 스크립트를 통해 Unity에서 배너 광고를 구현하는 방법을 단계별로 설명해 드릴게요.

 

1. Google Mobile Ads SDK 초기화

private void Start()
{
    // Google Mobile Ads SDK 초기화
    MobileAds.Initialize(initStatus =>
    {
        // 광고 초기화 후 배너 광고 생성 및 로드
        CreateBannerView();
        LoadAd();
    });
}

 

설명:

  • MobileAds.Initialize를 호출하여 Google Mobile Ads SDK를 초기화합니다.
  • 초기화가 완료되면 CreateBannerView()를 통해 배너 광고를 생성하고, LoadAd()로 광고를 로드합니다.

 

2. 배너 광고 생성

public void CreateBannerView()
{
    // 기존 배너가 있다면 제거
    if (_bannerView != null)
    {
        DestroyAd();
    }

    // 화면 하단에 320x50 크기의 배너 생성
    _bannerView = new BannerView(_adUnitId, AdSize.Banner, AdPosition.Bottom);

    // 광고 이벤트 리스너 등록
    ListenToAdEvents();
}

 

설명:

  • _bannerView가 이미 존재하면 DestroyAd()를 호출하여 기존 광고를 제거합니다.
  • _adUnitId를 사용하여 새로운 BannerView를 생성합니다.
    • AdSize.Banner는 320x50 크기의 배너를 의미합니다.
    • AdPosition.Bottom은 화면 하단에 배너를 배치합니다.
  • ListenToAdEvents()를 호출하여 광고와 관련된 이벤트를 처리합니다.

 

3. 광고 로드

public void LoadAd()
{
    if (_bannerView == null)
    {
        CreateBannerView();
    }

    // 광고 요청 생성
    var adRequest = new AdRequest();

    // 광고 로드
    _bannerView.LoadAd(adRequest);
}

 

설명:

  • _bannerView가 없으면 CreateBannerView()를 호출하여 배너를 생성합니다.
  • AdRequest 객체를 생성하여 광고 요청을 구성합니다.
  • _bannerView.LoadAd(adRequest)를 통해 광고를 로드합니다.

4. 광고 표시 및 숨김

public void ShowAd()
{
    if (_bannerView != null)
    {
        _bannerView.Show();
    }
}

public void HideAd()
{
    if (_bannerView != null)
    {
        _bannerView.Hide();
    }
}

 

설명:

  • ShowAd()는 _bannerView.Show()를 호출하여 광고를 화면에 표시합니다.
  • HideAd()는 _bannerView.Hide()를 호출하여 광고를 숨깁니다.
  • 이 메서드를 통해 게임 상황에 맞게 광고를 제어할 수 있습니다.

5. 광고 이벤트 처리

private void ListenToAdEvents()
{
    // 광고 로드 성공 시 호출되는 이벤트
    _bannerView.OnBannerAdLoaded += () =>
    {
        // 로드 성공 처리
    };

    // 광고 로드 실패 시 호출되는 이벤트
    _bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>
    {
        // 에러 처리
    };

    // 광고 클릭 시 호출되는 이벤트
    _bannerView.OnAdClicked += () =>
    {
        // 클릭 처리
    };

    // 광고가 전체 화면을 열 때 호출되는 이벤트
    _bannerView.OnAdFullScreenContentOpened += () =>
    {
        // 전체 화면 열림 처리
    };

    // 광고가 전체 화면을 닫을 때 호출되는 이벤트
    _bannerView.OnAdFullScreenContentClosed += () =>
    {
        // 전체 화면 닫힘 처리
    };
}

 

설명:

  • 다양한 광고 이벤트에 대한 콜백을 등록하여 광고 상태를 관리합니다.
  • 광고 로드 성공 및 실패, 클릭, 전체 화면 열림 및 닫힘 등의 이벤트를 처리할 수 있습니다.
  • 이를 통해 사용자 경험을 개선하고, 필요한 로직을 추가할 수 있습니다.

6. 광고 제거

public void DestroyAd()
{
    if (_bannerView != null)
    {
        _bannerView.Destroy();
        _bannerView = null;
    }
}

 

설명:

  • _bannerView.Destroy()를 호출하여 광고를 제거하고, _bannerView 참조를 null로 설정합니다.
  • 이 메서드는 광고를 더 이상 사용하지 않을 때 호출하여 리소스를 해제합니다.

7. 스크립트 해제 시 처리

private void OnDestroy()
{
    // 오브젝트가 파괴될 때 배너 광고도 제거
    DestroyAd();
}

설명:

  • MonoBehaviour의 OnDestroy() 메서드를 오버라이드하여, 오브젝트가 파괴될 때 광고도 함께 제거합니다.
  • 이를 통해 메모리 누수를 방지하고, 불필요한 광고 요청을 막을 수 있습니다.

전체 코드 구조

 

BannerViewController 클래스는 Unity의 MonoBehaviour를 상속하며, 배너 광고의 생성, 로드, 표시, 숨김, 제거 및 이벤트 처리를 담당합니다.

using System;
using UnityEngine;
using GoogleMobileAds.Api;

namespace WarehouseDeliveryQuest.Managers
{
    /// <summary>
    /// Google Mobile Ads를 사용하여 배너 광고를 구현하는 클래스입니다.
    /// </summary>
    public class BannerViewController : MonoBehaviour
    {
        // 플랫폼별 광고 단위 ID를 설정합니다.
#if UNITY_ANDROID
        private const string _adUnitId = "YOUR_ANDROID_AD_UNIT_ID"; // 실제 광고 단위 ID로 교체하세요.
#elif UNITY_IPHONE
        private const string _adUnitId = "YOUR_IOS_AD_UNIT_ID"; // 실제 광고 단위 ID로 교체하세요.
#else
        private const string _adUnitId = "unused";
#endif

        private BannerView _bannerView;

        private void Start()
        {
            // Google Mobile Ads SDK 초기화
            MobileAds.Initialize(initStatus =>
            {
                // 광고 초기화 후 배너 광고 생성 및 로드
                CreateBannerView();
                LoadAd();
            });
        }

        private void OnDestroy()
        {
            // 오브젝트가 파괴될 때 배너 광고도 제거
            DestroyAd();
        }

        /// <summary>
        /// 배너 광고를 생성합니다.
        /// </summary>
        public void CreateBannerView()
        {
            // 기존 배너가 있다면 제거
            if (_bannerView != null)
            {
                DestroyAd();
            }

            // 화면 하단에 320x50 크기의 배너 생성
            _bannerView = new BannerView(_adUnitId, AdSize.Banner, AdPosition.Bottom);

            // 광고 이벤트 리스너 등록
            ListenToAdEvents();
        }

        /// <summary>
        /// 광고를 로드합니다.
        /// </summary>
        public void LoadAd()
        {
            if (_bannerView == null)
            {
                CreateBannerView();
            }

            // 광고 요청 생성
            var adRequest = new AdRequest();

            // 광고 로드
            _bannerView.LoadAd(adRequest);
        }

        /// <summary>
        /// 광고를 화면에 표시합니다.
        /// </summary>
        public void ShowAd()
        {
            if (_bannerView != null)
            {
                _bannerView.Show();
            }
        }

        /// <summary>
        /// 광고를 화면에서 숨깁니다.
        /// </summary>
        public void HideAd()
        {
            if (_bannerView != null)
            {
                _bannerView.Hide();
            }
        }

        /// <summary>
        /// 광고를 제거하고 리소스를 해제합니다.
        /// </summary>
        public void DestroyAd()
        {
            if (_bannerView != null)
            {
                _bannerView.Destroy();
                _bannerView = null;
            }
        }

        /// <summary>
        /// 광고 이벤트를 처리하는 리스너를 설정합니다.
        /// </summary>
        private void ListenToAdEvents()
        {
            // 광고 로드 성공 시 호출되는 이벤트
            _bannerView.OnBannerAdLoaded += () =>
            {
                // 로드 성공 처리 로직을 여기에 추가하세요.
                Debug.Log("배너 광고가 성공적으로 로드되었습니다.");
            };

            // 광고 로드 실패 시 호출되는 이벤트
            _bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>
            {
                // 에러 처리 로직을 여기에 추가하세요.
                Debug.LogError($"배너 광고 로드에 실패했습니다: {error}");
            };

            // 광고 클릭 시 호출되는 이벤트
            _bannerView.OnAdClicked += () =>
            {
                // 클릭 처리 로직을 여기에 추가하세요.
                Debug.Log("배너 광고가 클릭되었습니다.");
            };

            // 광고가 전체 화면을 열 때 호출되는 이벤트
            _bannerView.OnAdFullScreenContentOpened += () =>
            {
                // 전체 화면 열림 처리 로직을 여기에 추가하세요.
                Debug.Log("배너 광고의 전체 화면 콘텐츠가 열렸습니다.");
            };

            // 광고가 전체 화면을 닫을 때 호출되는 이벤트
            _bannerView.OnAdFullScreenContentClosed += () =>
            {
                // 전체 화면 닫힘 처리 로직을 여기에 추가하세요.
                Debug.Log("배너 광고의 전체 화면 콘텐츠가 닫혔습니다.");
            };
        }
    }
}

 

[추가 질문]

그렇다면, 이 스크립트를 실제 프로젝트에 적용하려면 어떻게 해야 할까?

 

[추가 답변]

좋은 질문이에요! 이 스크립트를 프로젝트에 적용하는 방법을 알려드릴게요.

 

1. 필요한 패키지 및 설정

  • Google Mobile Ads Unity Plugin을 프로젝트에 추가해야 합니다.
  • Google Mobile Ads Unity Plugin GitHub를 방문하여 최신 버전을 다운로드하고 설치하세요.
  • Android 및 iOS 플랫폼별로 광고 단위 ID를 설정해야 합니다.
    • 예시 코드에서는 #if UNITY_ANDROID와 #elif UNITY_IPHONE을 사용하여 플랫폼별 광고 단위 ID를 지정했습니다.

2. 스크립트 적용

  • BannerViewController 스크립트를 생성하고, 제공된 코드를 붙여넣습니다.
  • 이 스크립트를 광고를 표시할 게임 오브젝트에 추가합니다.

3. 광고 단위 ID 설정

  • 실제 광고를 사용하려면 Google AdMob에서 발급받은 광고 단위 ID로 _adUnitId를 변경해야 합니다.
  • 테스트 중에는 Google에서 제공하는 테스트 광고 단위 ID를 사용하는 것이 좋습니다.

4. 빌드 및 테스트

  • 에디터에서는 광고가 표시되지 않을 수 있으므로, 실제 기기에서 빌드하여 테스트하세요.
  • 광고가 제대로 로드되고 표시되는지 확인합니다.

 

오늘은 Unity에서 Google Mobile Ads를 활용하여 배너 광고를 구현하는 방법을 알아봤어요.

BannerViewController 스크립트를 통해 광고를 손쉽게 관리하고, 사용자 경험을 향상시킬 수 있습니다.

 

지금까지 인텔리원스튜디오(IntelliOneStudio)였습니다!

감사합니다.

728x90