본문 바로가기

Game Make

Block Puzzle 만들기 (8)

지난 시간에는 구글 플레이 SDK를 설치했다.

이제 SDK를 이용해 구글 플레이에 접속하고 리더보드를 갱신하는 코드를 만들어 보자.

 

1. 먼저 리더보드를 생성해야 한다.

개발자 콘솔에 들어가서 Doku Block Puzzle 앱을 연다.

성장 > Play 게임즈 서비스 > 리더보드 로 이동한다.

리더보드 생성을 누른다.

리더보드의 이름과 아이콘을 등록한다. 

임시보관함에 저장을 누른다.

이전 단계로 돌아가면 리더보드가 등록된 것을 볼 수 있다. 

 

2. 업적도 등록해보자

 

성장 > Play 게임즈 서비스 > 업적으로 이동하여, 업적만들기를 누른다.

 

 

필요한 내용을 입력하고, 임시보관함에 저장을 눌러준다. 이전 단계로 돌아가면 업적이 등록된것을 확인할 수 있다.

이런 방식으로 필요한 업적을 여러 개 만들어 줄수 있다.

 

3. 테스터를 등록해 보자. 

게시전에 임시저장된 리더보드/업적에 접근할수 있는 테스터를 등록할 수 있다.

성장 > Play 게임즈 서비스 > 테스터로 이동하여, 테스터 > 테스터 추가 를 눌러준다.

여기에 테스터의 계정을 등록해주면 된다.

 

4. 유니티 설정하기

리소스 보기를 눌러서 내용을 복사한다.

Unity에디터를 열고, Windows > Google Play Games > Setup > Android Setup 을 열고, 복사한 내용을 붙여넣는다.

Setup을 눌러서 등록한다.

 

이제 구글 플레이를 초기화하는 코드를 작성한다.

https://developer.android.com/games/preview/multiplatform/pgs-unity-integration-guide?hl=ko

 

Play 게임즈 서비스 통합 가이드(Unity)  |  Android 개발자  |  Android Developers

Play 게임즈 서비스 통합 가이드(Unity) 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 참고: 네이티브 (C) 버전의 SDK도 EAP에서 사용할 수 있습니다. 액세스 방

developer.android.com

이 링크의 가이드를 참고해서 코드를 작성했다.

public void SignToSocial(System.Action<bool> loginCallback)
{
    _loginCallback = loginCallback;
    _isInLogging = true;
    _OnProcessAuthentication.Raise();
    PlayGamesPlatform.DebugLogEnabled = true;
    PlayGamesPlatform.Activate();
    PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
}


internal void ProcessAuthentication(SignInStatus status)
{
    _isInLogging = false;
    if (status == SignInStatus.Success)
    {
        Debug.Log("Login with Google Play games successful.");
        _isSignIn = true;
        _loginCallback?.Invoke(true);
    }
    else
    {
        Debug.Log("Login Unsuccessful  - " + status);
        _isSignIn = false;
        _loginCallback?.Invoke(false);
    }
    _OnProcessAuthentication.Raise();
}

Hierarchy에 게임 오브젝트를 만들고 만든 스크립트를 붙여두면 된다.

이제 리더보드를 등록하는 기능을 만들자.

public bool ReportScore(string leaderboardId, long score, System.Action<bool> callback)
{
    if (Social.localUser.authenticated == false)
        return false;
    Social.ReportScore(score, leaderboardId, callback);
    return true;
}

public bool ShowLeaderboard(string leaderboardId)
{
    if (Social.localUser.authenticated == false)
        return false;
    if (string.IsNullOrEmpty(leaderboardId))
        Social.ShowLeaderboardUI();
    else
        PlayGamesPlatform.Instance.ShowLeaderboardUI(leaderboardId);
    return true;
}

public bool ReportAchievement(string achievementId)
{
    Debug.Log("new achievement " + achievementId);
    if (Social.localUser.authenticated == false)
        return false;
    Social.ReportProgress(achievementId, 100.0f, null);
    return true;
}

리더보드, 도전과제를 업로드하는 코드다. 

이것 역시 Hierarchy에 게임오브젝트를 만들고 스크립트를 붙여두면 된다.

 

사전 준비를 모두 끝났다. 

이제 한 게임이 끝날 때마다 점수를 등록하도록 해보자.

public void UploadScore()
{
    GpgManager.Instance.ReportScore(GPGSIds.leaderboard_game_score, (long)_score, null);
}

리더보드의 아이디는 - 아까 Setup을 제대로 했다면 - GPGIds. 에 등록되어 있기 때문에 쉽게 찾아서 쓸 수 있다.

업적도 마찬가지로 쉽게 코딩할 수 있다.

if (_comboCount == 3)
    GpgManager.Instance.ReportAchievement(GPGSIds.achievement_combo_3);
if (_comboCount == 5)
    GpgManager.Instance.ReportAchievement(GPGSIds.achievement_combo_5);
if (_comboCount == 10)
    GpgManager.Instance.ReportAchievement(GPGSIds.achievement_combo_10);

 

 

5. 광고를 붙여보겠다.

https://admob.google.com/home/

 

Google AdMob: 모바일 앱 수익 창출

인앱 광고를 사용하여 모바일 앱에서 더 많은 수익을 창출하고, 사용이 간편한 도구를 통해 유용한 분석 정보를 얻고 앱을 성장시켜 보세요.

admob.google.com

애드몹 광고를 붙여 보도록 하자.

계정이 없다면 해당 링크를 열어서, Admob 계정을 만든다.

앱>앱 개요 > 앱 추가 를 눌러서 앱을 만든다.

위처럼 설정하고 계속을 누른다.

앱 이름을 넣고 앱 추가를 누른다.

 

앱>광고단위 로 들어가서 시작하기를 누른다.

전면/리워드 광고를 삽입할 예정이다. 

전면 광고는 화면 전체 면적에 띄어지는 광고다. 스테이지 사이에 나오도록 할 예정이다.

리워드는 흔히 말하는 보상형 광고를 말한다. 아이템을 얻는 용도로 할 예정이다.

하나씩 선택하여 정보를 입력해 주자.

광고 단위가 만들어지면, 이런 식으로 앱 ID광고 단위 ID를 알려준다. 

후에 광고 코드를 작성할때 이 ID를 입력해 주어야 하니 잘 기록해 두자.

차단관리 를 열어서 광고의 등급을 설정해 준다.

난 간단한 퍼즐 게임이니 부모 지도 요망 정도면 적당할 듯 싶다.

 

이제 SDK 를 다운 받아서 설치하자.

https://developers.google.com/admob/unity/quick-start?hl=ko

 

시작하기  |  Unity  |  Google for Developers

Unity에서 앱을 제작 중인 AdMob 게시자를 위한 모바일 광고 SDK입니다.

developers.google.com

플러그인 다운로드를 누른다.

GoogleMobildAds-v####.unitypackage를 다운 받는다.

패키지를 설치한다.

ExternalDependencyManager가 이미 있기 때문에 이것은 빼고 임포트 했다. 

만약 제대로 설치되지 않는다면, 이 부분을 재설치하면 된다.

 

이제 Assets > Google Mobile Ads > Setting을 눌러준다.

여기에 아까 봤던 App ID를 등록해 주면 된다.

 

6. 이제 코드를 작성해 주자.

https://developers.google.com/admob/unity/quick-start?hl=ko

 

시작하기  |  Unity  |  Google for Developers

Unity에서 앱을 제작 중인 AdMob 게시자를 위한 모바일 광고 SDK입니다.

developers.google.com

코드 샘플은 이 곳에서 확인할 수 있다.

 public void Start()
{
    MobileAds.RaiseAdEventsOnUnityMainThread = true;
    MobileAds.Initialize(initStatus => { });
}

이런 식으로 애드몹을 초기화한다.

보상형 광고를 로딩하는 코드는 이렇다.

  ///테스트로 사용하는 ID
  private string _adUnitId = "ca-app-pub-3940256099942544/5224354917";
  
  public void LoadRewardedAd()
  {
      // Clean up the old ad before loading a new one.
      if (_rewardedAd != null)
      {
            _rewardedAd.Destroy();
            _rewardedAd = null;
      }

      Debug.Log("Loading the rewarded ad.");

      // create our request used to load the ad.
      var adRequest = new AdRequest();

      // send the request to load the ad.
      RewardedAd.Load(_adUnitId, adRequest,
          (RewardedAd ad, LoadAdError error) =>
          {
              // if error is not null, the load request failed.
              if (error != null || ad == null)
              {
                  Debug.LogError("Rewarded ad failed to load an ad " +
                                 "with error : " + error);
                  return;
              }

              Debug.Log("Rewarded ad loaded with response : "
                        + ad.GetResponseInfo());

              _rewardedAd = ad;
          });
  }
public void ShowRewardedAd()
{
    const string rewardMsg =
        "Rewarded ad rewarded the user. Type: {0}, amount: {1}.";

    if (rewardedAd != null && rewardedAd.CanShowAd())
    {
        rewardedAd.Show((Reward reward) =>
        {
            // TODO: Reward the user.
            Debug.Log(String.Format(rewardMsg, reward.Type, reward.Amount));
        });
    }
}

 

전면 광고를 불러오는 코드는 이렇다.

  ///테스트 용으로 사용하는 ID.
  private string _adUnitId = "ca-app-pub-3940256099942544/1033173712";
  
  public void LoadLoadInterstitialAd()
  {
      // Clean up the old ad before loading a new one.
      if (_interstitialAd != null)
      {
            _interstitialAd.Destroy();
            _interstitialAd = null;
      }

      Debug.Log("Loading the interstitial ad.");

      // create our request used to load the ad.
      var adRequest = new AdRequest();

      // send the request to load the ad.
      InterstitialAd.Load(_adUnitId, adRequest,
          (InterstitialAd ad, LoadAdError error) =>
          {
              // if error is not null, the load request failed.
              if (error != null || ad == null)
              {
                  Debug.LogError("interstitial ad failed to load an ad " +
                                 "with error : " + error);
                  return;
              }

              Debug.Log("Interstitial ad loaded with response : "
                        + ad.GetResponseInfo());

              _interstitialAd = ad;
          });
  }
public void ShowInterstitialAd()
{
    if (_interstitialAd != null && _interstitialAd.CanShowAd())
    {
        Debug.Log("Showing interstitial ad.");
        _interstitialAd.Show();
    }
    else
    {
        Debug.LogError("Interstitial ad is not ready yet.");
    }
}

코드를 보면 테스트용으로 사용되는 ID를 쓰는 것을 알 수 있다. 

실제로 출시할 때는 이 코드를 앞서 받은 광고 단위 ID로 교체해 주어야 한다. 

그것이 귀찮으면, 광고단위 ID를 미리 코드에 등록해두고, 애드몹에 등록된 테스트 기기만을 이용해서 테스트 하면된다.

(이 경우, 등록되지 않은 기기로 테스트를 할 경우, 계정이 차단될 수도 있으니 주의해야 한다.)

자! 이런 식으로 보상형 광고를 이용해서 아이템을 추가하는 기능이 붙었다.

 

그리고 게임 종료시의 전면광고 되시겠다.

 

휴...그런 내일 계속이다. (정말 할게 많네..)

'Game Make' 카테고리의 다른 글

Block Puzzle 만들기 (9)  (0) 2023.10.22
Block Puzzle 만들기 (7)  (0) 2023.10.15
Block Puzzle 만들기 (6)  (0) 2023.10.14
Block Puzzle 만들기 (5)  (0) 2023.10.11
Block Puzzle 만들기 (4)  (0) 2023.10.08