ゲーム開発
Unity
UnrealEngine
C++
Blender
Houdini
ゲーム数学
ゲームAI
グラフィックス
サウンド
アニメーション
GBDK
制作日記
IT関連
ツール開発
フロントエンド関連
サーバサイド関連
WordPress関連
ソフトウェア設計
おすすめ技術書
音楽
DTM
楽器・機材
ピアノ
ラーメン日記
四コマ漫画
その他
おすすめアイテム
おもしろコラム
  • ゲーム開発
    • Unity
    • UnrealEngine
    • C++
    • Blender
    • Houdini
    • ゲーム数学
    • ゲームAI
    • グラフィックス
    • サウンド
    • アニメーション
    • GBDK
    • 制作日記
  • IT関連
    • ツール開発
    • フロントエンド関連
    • サーバサイド関連
    • WordPress関連
    • ソフトウェア設計
    • おすすめ技術書
  • 音楽
    • DTM
    • 楽器・機材
    • ピアノ
  • ラーメン日記
    • 四コマ漫画
      • その他
        • おすすめアイテム
        • おもしろコラム
      1. ホーム
      2. 20220315_01

      【Unity】ニフクラ mobile backendでランキング機能を爆速で実装する【mBaaS】

      UnityUnityプラグインNCMBmBaaS
      2022-03-15

      マイケル
      マイケル
      みなさんこんばんは!
      マイケルです!
      エレキベア
      エレキベア
      こんばんクマ〜〜〜
      マイケル
      マイケル
      今日はニフクラ mobile backendを使って
      ランキング機能を実装してみるよ!
      エレキベア
      エレキベア
      この始まり前回も聞いたようなクマ・・・
      PlayFabはどうしたクマ??
      マイケル
      マイケル
      PlayFabはやめてニフクラを使うことにしました・・・
      エレキベア
      エレキベア
      ええ・・・・
      マイケル
      マイケル
      理由はとしては、「PlayFabはログインしないとランキング機能が使えない」ため!
      Webへの公開も考えていたから、ユーザを作成しなくても自由にランキング登録ができるニフクラの方が無駄なリソースを使わずに済むと思ったんだ!
      エレキベア
      エレキベア
      それなら仕方なさそうクマね・・・
      マイケル
      マイケル
      とはいえ、ニフクラだとマジで爆速で実装できたから、
      今日はその手順を紹介するぜ!
      エレキベア
      エレキベア
      楽しみクマ〜〜〜

      ニフクラの導入

      マイケル
      マイケル
      基本的には公式の手順に沿って準備すればOKです!

      クイックスタート | ニフクラ mobile backend

      エレキベア
      エレキベア
      この記事を読む必要はないクマね


      〜完〜

      マイケル
      マイケル
      それでも説明します!
      エレキベア
      エレキベア
      (いらんくだりだったクマ・・・)

      ユーザ、アプリの作成

      マイケル
      マイケル
      まずはユーザを作成しましょう!
      下記サイトの今すぐ無料登録をクリック!

      ニフクラ mobile backend

      エレキベア
      エレキベア
      (怪しい商売みたいクマ・・・)
      マイケル
      マイケル
      ログインまでできたら、
      画面左上の「+新しいアプリ」からアプリ情報を作成しましょう!
      ↑アプリ作成後の表示
      マイケル
      マイケル
      作成後に表示される
      ・アプリケーションキー
      ・クライアントキー

      はUnity側の設定で使用するため、メモしておきましょう!
      エレキベア
      エレキベア
      ばっちりクマ〜〜〜〜

      Unity SDKの導入

      マイケル
      マイケル
      次はSDKをUnityにインストールします!
      下記GitHubからダウンロードしてUnityへインポートしましょう!

      Releases · NIFCLOUD-mbaas/ncmb_unity

      ↑Unityへのインポート
      マイケル
      マイケル
      インポートしたら「Assets/Prefabs/NCMBSettings.prefab」
      先ほど取得したアプリケーションキー、クライアントキーを入力します!
      ↑キーの入力
      エレキベア
      エレキベア
      ばっちり設定したクマ〜〜〜
      マイケル
      マイケル
      そしてNCMBとの連携には

      ・Assets/Prefabs/NCMBSettings.prefab
      ・Assets/Prefabs/NCMBManager.prefab

      が必要なため、これら2つをシーンビューに配置しておきましょう!
      エレキベア
      エレキベア
      ドラッグアンドドロップクマね
      マイケル
      マイケル
      以上で準備は完了です!!
      エレキベア
      エレキベア
      余裕だったクマね

      ランキング機能の実装

      マイケル
      マイケル
      準備ができたところでランキング機能を実装していきましょう!

      レコード情報の登録

      マイケル
      マイケル
      レコードの登録処理については
      テーブル名を指定したNCMBObjectに各項目に値を設定してSaveAsyncを呼び出すだけ!
      するとニフクラ管理画面でもテーブル、レコードの両方が作成されていることが確認できるはずです!
                  var test = new NCMBObject("Test");
                  test["position"] = "test!!";
                  test.SaveAsync((NCMBException e) =>
                  {
                      if (e != null)
                      {
                          // エラー発生時
                      }
                      else
                      {
                      // 成功時
                      }
                  });
      ↑レコード登録処理
      ↑テーブルとレコードが作成されている
      エレキベア
      エレキベア
      PlayFabでの苦労はなんだったんだクマ・・・
      マイケル
      マイケル
      この時、渡した値の型で保存されることには注意しましょう!
      スコアのような数値の場合には、数値型で渡さなければなりません!

      レコード情報の取得

      マイケル
      マイケル
      そしてレコードの取得処理についても簡単で、
      下記のようにクエリを指定してFindAsyncを呼び出すだけ!
      NCMBObjectのリストとして返却されます!
                  var query = new NCMBQuery<NCMBObject>("【テーブル名】");
                  query.OrderByDescending("【項目名】"); // 値降順
                  query.Limit = 100; // 取得件数
                  query.FindAsync((List<NCMBObject> ncmbObjList, NCMBException e) =>
                  {
                      // エラー発生時
                      if (e != null)
                      {
                          // エラー発生時
                      }
                      else
                      {
                          // 成功時
                          // 情報取得例
                          for (var i = 0; i < ncmbObjList.Count; i++)
                          {
                              var ncmbObj = ncmbObjList[i];
                              var value = Convert.ToString(ncmbObj["【項目名】"])
                          }
                      }
                }
      ↑レコード取得処理
      エレキベア
      エレキベア
      SQLのような使い方ができるクマね
      マイケル
      マイケル
      NCMBQueryにはいろんなオプションを追加できるから、
      詳しくは公式ドキュメントを見てみよう!

      NCMB Unity SDK Library Project
      NCMB.NCMBQuery< T >

      エレキベア
      エレキベア
      シンプルで使いやすいクマ〜〜〜

      補足:iOSビルドのエラー解消

      マイケル
      マイケル
      最後に、ニフクラをUnityに導入した場合に発生した
      iOSビルドエラーの解消についてメモしておきます!

      CocoaPodsのバージョンアップ

      マイケル
      マイケル
      Unityでのビルド時に、下記のようなエラーが出た場合には
      CocoaPodsのバージョンアップが必要です!
      今回の場合は「requires CocoaPods version `>= 1.10.2`」とエラーが出ているので、
      1.10.2以上に更新する必要があります。
      iOS framework addition failed due to a CocoaPods installation failure. This will will likely result in an non-functional Xcode project.
      
      After the failure, "pod repo update" was executed and succeeded. "pod install" was then attempted again, and still failed. This may be due to a broken CocoaPods installation. See: https://guides.cocoapods.org/using/troubleshooting.html for potential solutions.
      
      pod install output:
      
      Analyzing dependencies
      Cloning spec repo `cocoapods` from `https://github.com/CocoaPods/Specs`
      [!] `GoogleAppMeasurement` requires CocoaPods version `>= 1.10.2`, which is not satisfied by your current version, `1.10.1`.
      
      ↑Unityビルド時のエラー
      マイケル
      マイケル
      そのためターミナルで下記コマンドを実行して
      バージョンを更新しましょう。
      // バージョン確認
      % pod --version
      1.10.1
      
      // cocoapodsのバージョンアップ
      // brew経由の場合には brew upgrade cocoa pods を実行
      % sudo gem update cocoapods
      ...
      
      // バージョンアップ後の確認
      % pod --version            
      1.11.3
      マイケル
      マイケル
      これでビルドができるようになるはずです!
      エレキベア
      エレキベア
      プラグインのバージョンに合わせる必要があるクマね

      AuthenticationServices.frameworkの追加

      マイケル
      マイケル
      そして次にXcodeでのビルド時に下記のようなエラーが出た場合です。
      ld: warning: arm64 function not 4-byte aligned: _unwind_tester from /Users/molegoro/Desktop/ShootingiOS/Libraries/libiPhone-lib.a(unwind_test_arm64.o)
      Undefined symbols for architecture arm64:
        "_OBJC_CLASS_$_ASAuthorizationController", referenced from:
            objc-class-ref in NCMBAppleAuth.o
        "_OBJC_CLASS_$_ASAuthorizationAppleIDProvider", referenced from:
            objc-class-ref in NCMBAppleAuth.o
        "_ASAuthorizationScopeEmail", referenced from:
            -[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
        "_ASAuthorizationScopeFullName", referenced from:
            -[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
      ld: symbol(s) not found for architecture arm64
      clang: error: linker command failed with exit code 1 (use -v to see invocation)
      
      エレキベア
      エレキベア
      まだエラーが出るクマか・・・
      マイケル
      マイケル
      これはunityFrameworkが足りていないだけなので、
      UnityFramework -> Generalから
      AuthenticationServices.frameworkを追加しましょう!
      ↑frameworkの追加
      マイケル
      マイケル
      以上でXcodeもビルドが通るようになるはずです!
      エレキベア
      エレキベア
      やったクマ〜〜〜
      マイケル
      マイケル
      補足として、UnityのEditorフォルダ配下に、
      下記のようにPostBuild処理でXCodeプロジェクトを編集するように記述すると
      手動で追加する手間を省くことができます。
      using UnityEditor.Build;
      using UnityEditor.Build.Reporting;
      using UnityEngine;
      #if UNITY_IOS
      using UnityEditor.iOS.Xcode;
      #endif
      using System.IO;
      
      namespace Editor
      {
          /// <summary>
          /// ビルド後処理
          /// </summary>
          public class PostBuildProcessor : IPostprocessBuildWithReport
          {
              /// <summary>
              /// 実行順
              /// </summary>
              public int callbackOrder => 100;
      
              public void OnPostprocessBuild(BuildReport report)
              {
      #if UNITY_IOS
                  // pbxプロジェクトの読込
                  var project = new PBXProject();
                  var projectPath = PBXProject.GetPBXProjectPath(report.summary.outputPath);
                  project.ReadFromString(File.ReadAllText(projectPath));
                  
                  // UnityFramework に AuthenticationServices.framework を追加
                  var targetGuid = project.GetUnityFrameworkTargetGuid();
                  project.AddFrameworkToProject(targetGuid, "AuthenticationServices.framework", false);
                  File.WriteAllText(projectPath, project.WriteToString());
      #endif
              }
          }
      }
      
      ↑PostBuild時にframeworkを追加する
      マイケル
      マイケル
      frameworkの追加やInfo.plistの編集処理等は
      覚えておいて損はないので、手動で追加している方はぜひ実装してみましょう!
      エレキベア
      エレキベア
      確かに便利クマ〜〜〜

      おわりに

      マイケル
      マイケル
      というわけで、以上を使って実装しなおしたのが下記になるよ!
      ゲーム後にランキング登録するパターンだね!
      ↑ランキング登録画面
      エレキベア
      エレキベア
      よくあるパターンクマね
      それにしてもここまで簡単だとは思ってなかったクマ
      マイケル
      マイケル
      モバイルゲーム機能が豊富なのはPlayFabかもしれないけど、
      シンプルなゲームならニフクラで充分かもしれないね!
      マイケル
      マイケル
      便利なものはこれからもどんどん使っていこう!
      それでは今日はこの辺で!アデューー!!
      エレキベア
      エレキベア
      クマ〜〜〜〜〜

      【Unity】ニフクラ mobile backendでランキング機能を爆速で実装する【mBaaS】 〜完〜

      ※↓ニフクラとAdmobの競合解消についてはこちら!


      UnityUnityプラグインNCMBmBaaS
      2022-03-15

      関連記事
      【Unity】Timeline × Excelでスライドショーを効率よく制作する
      2024-10-31
      【Unity】Boidsアルゴリズムを用いて魚の群集シミュレーションを実装する
      2024-05-28
      【Unity】GoでのランキングAPI実装とVPSへのデプロイ方法についてまとめる【Go言語】
      2024-04-14
      【Unity】第二回 Wwiseを使用したサウンド制御 〜インタラクティブミュージック編〜
      2024-03-30
      【Unity】第一回 Wwiseを使用したサウンド制御 〜基本動作編〜
      2024-03-30
      【Unity】第二回 CRI ADXを使用したサウンド制御 〜インタラクティブミュージック編〜
      2024-03-28
      【Unity】第一回 CRI ADXを使用したサウンド制御 〜基本動作、周波数解析編〜
      2024-03-28
      【Unity】サウンドミドルウェアに依存しない設計を考える【CRI ADX・Wwise】
      2024-03-27