Game Make

Block Puzzle 만들기 (8)

젤리비츠 2023. 10. 18. 00:21

지난 시간에는 구글 플레이 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를 미리 코드에 등록해두고, 애드몹에 등록된 테스트 기기만을 이용해서 테스트 하면된다.

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

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

 

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

 

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