Unity SDK
    • PDF

    Unity SDK

    • PDF

    記事の要約

    最新のコンテンツが反映されていません。早急にアップデート内容をご提供できるよう努めております。最新のコンテンツ内容は韓国語ページをご参照ください。

    Classic/VPC環境で利用できます。

    Unityでゲームを開発するための GAMEPOT Unity SDKの使用方法について説明します。
    SDKをインストールして環境を構成することで、ゲームとダッシュボードを連携できます。

    システム要件

    Unity用 GAMEPOT SDKを使用するためのシステム要件は、次の通りです。

    • 最低スペック: 2020.3.0以降
    • 下位バージョンの Unityへの対応が必要な場合は、お問い合わせチャネルにてご確認ください。

    SDKのインストールと環境の構成

    GAMEPOT Unity SDKをインストールしてから環境を構成し、GAMEPOTのダッシュボードとゲームを連携してゲーム開発に必要な機能を使用できます。

    GAMEPOT SDKでサポートしている言語は次の通りです。

    • 韓国語、英語、イタリア語、タイ語、ベトナム語、日本語、中国語(簡体字/繁体字)、インドネシア語、ドイツ語、スペイン語、フランス語

    アプリ実行時にデバイスの言語によって SDK内サポート言語で表記され、サポートされていない言語は英語で表記されます。

    SDKのインストール

    GAMEPOT Unity SDKをインストールし、Unityでプロジェクトを設定する方法は、次の通りです。

    1. Unity公式公開 GitHub から最新バージョンをダウンロードします。
    2. Unityで Assets > Import Package > Custom Package... メニューを順にクリックし、nbase-unity-plugin-[version].unitypackage ファイルを読み込みます。
      • GAMEPOT 3.0からは mavenと cocoapodsを通じてデプロイされ、デバイス別に簡単な設定で数十種類の外部ライブラリとの統合できます。
    参考

    iOSビルドが正常に動作するには、cocoapodsがインストールされている必要があります。

    External Dependency Manager for Unityを含めてインストールされ、簡単に Android、iOSパッケージをインストールできます。

    Android Gradleの設定

    1. Player Settingsの Publishing Settingsで、Custom Main Gradle Template、Custom Gradle Properties Templateにチェックを入れます。
      gamepot-UnitySDK01.png
    2. Minimum API Level 23にアップグレードします。
      gamepot-UnitySDK02.png
    3. Assets > External Dependency Manager > Android Resolver > Settingsメニューを順にクリックし、Enable Auto-Resolution、Explode AARs項目からチェックを外します。
      gamepot-UnitySDK03.png
    4. 図のようにファイルをエディタから開きます。以下のファイルを確認できます。
      gamepot-UnitySDK04.png

    次は NBase SDK使用に必要な基本的な Dependency packageを定義したファイルです。追加機能を使用するには、以下のファイルに追加すると Android、iOSでモジュールを使用できます。

    Dependency modulesとは
    外部 SDKを使用するためのモジュールです。Googleログインの場合、com.google.android.gms:play-services-authのように Googleが提供するモジュールを一緒にインストールする必要があります。
    アップデートされた場合、マイナーバージョンのアップデートは常時可能ですが、メジャーアップデートの場合はお問い合わせの後にご使用ください。

     <?xml version="1.0" encoding="UTF-8"?>
    <dependencies>
    	<androidPackages>
            <androidPackage spec="io.nbase:nbasesdk:3.0.83"/>
    	</androidPackages>
    	<iosPods>		
    		<iosPod name="NBase" version="3.0.56" minTargetSdk="15.0" />
    	</iosPods>
    </dependencies>
    
    • Googleログインと Google Play Store決済を使用する場合
     <dependencies>
    	<androidPackages>
            <androidPackage spec="io.nbase:nbasesdk:3.0.83"/>
            <androidPackage spec="io.nbase:nbase-adapter-provider-google:3.0.7"/>
            <androidPackage spec="io.nbase:nbase-adapter-billing-googleplay:3.0.4" />
    	</androidPackages>
    	<iosPods>
    		<iosPod name="NBase" version="3.0.56" minTargetSdk="15.0" />
    		<iosPod name="NBaseAdapterProviderGoogle" version="3.0.56" minTargetSdk="15.0" />
    	</iosPods>
    </dependencies>
    
    NameVersionTypeDependeny modules
    io.nbase:nbasesdk3.0.83GAMEPOT基本モジュールX
    io.nbase:nbase-adapter-provider-google3.0.7Googleログインcom.google.android.gms:play-services-auth:20.7.0
    io.nbase:nbase-adapter-provider-apple3.0.4AppleログインX
    io.nbase:nbase-adapter-provider-facebook3.0.4Facebookログインcom.facebook.android:facebook-login:latest.release
    io.nbase:nbase-adapter-provider-naver3.0.1NAVERログイン
    io.nbase:nbase-adapter-provider-line3.0.1LINEログイン
    io.nbase:nbase-adapter-provider-x3.0.1Xログイン
    io.nbase:nbase-adapter-billing-googleplay3.0.4Google Play Storecom.android.billingclient:billing-ktx:6.1.0
    io.nbase:nbase-adapter-billing-one3.0.1ONE Store
    io.nbase:nbase-adapter-billing-galaxy3.0.1Galaxy Store

    メール、ゲストログインの場合は基本モジュールに適用されています。

    参考

    NBaseSDKDependencies.xmlの自動設定
    ダッシュボード > 環境設定 > SDK自動作成を通じてこのような作業を簡単に制作できるツールを提供します。
    カスタマーサポートから製作依頼された場合でも、こちらから設定して提供します。

    Assets > External Dependency Manager > Android Resolver > Force Resolveをクリックします。
    Dependencies.xmlに定義をした後に Force Resolveをすると mainTemplate.gradleファイルで定義した内容が implementationで自動定義されます。その内容が追加されないとビルド時に関連ライブラリをインポートできません。

    iOSの設定

    Settings in Tools > GamePotSDK > Edit Settingsをクリックします。
    image.png

    各ソーシャルログイン方式に応じてプッシュ、In-App決済などビルドに必要な Capability設定も自動的に設定されます。
    XMLファイルは Editorディレクトリの下に配置され、*Dependencies.xml形式の名前と一致する必要があります。/Assets/NBaseSDK/Editor/NBaseSDKDependencies.xmlファイルを開きます。

    「iosPods」と「/iosPods」の間に必要なフレームワークを追加します。基本的に必要なフレームワークは追加されています。

    <?xml version="1.0" encoding="UTF-8"?>
    <dependencies>
    	<androidPackages>
            ...
    	</androidPackages>
        <iosPods>
    		<iosPod name="NBase" version="3.0.56" minTargetSdk="15.0" />
        </iosPods>
    </dependencies>
    

    Firebaseのように必要なフレームワークをインストールしたい場合にも、以下のように別途追加します。

    <iosPods> 
           ...
            <iosPod name="FirebaseMessaging" version="10.20.0" minTargetSdk="9.0" />
            <iosPod name="Firebase/Analytics" version="10.15.0" minTargetSdk="9.0" />
            ...
    </iosPods>
    

    Assets > External Dependency Manager > iOS Resolver > Install Cocoapodsをクリックします。

    注意

    Unityプロジェクトを iOS用にビルドすると Unity-iPhone.xcworkspaceファイルが作成されます。このファイルを開いてください。
    Unity-iPhone.xcodeprojの代わりに Unity-iPhone.xcworkspaceを開かないと CocoaPodsの依存関係は使用されません。
    Unity 2021からは自動的にそのプロジェクトが選択されます。

    NameVersionTypeDependeny modules
    NBase3.0.56GAMEPOT基本モジュールX
    NBaseAdapterProviderGoogle3.0.56Googleログイン
    NBaseAdapterProviderFacebook3.0.56FacebookログインFBSDKLoginKit (17.4.0)
    NBaseAdapterProviderNaver3.0.56NAVERログイン
    NBaseAdapterProviderLine3.0.56LINEログイン
    NBaseAdapterProviderKakao3.0.56Kakaoログイン
    NBaseAdapterProviderX3.0.56Xログイン
    注意

    一部の依存関係にあるフレームワークは Swift Package Managerを通じてのみ追加できます。

    gamepot-UnitySDK05.png

    「+」ボタンをクリックして Add Package Collectionから「https://github.com/apollographql/apollo-ios.git」を追加します。続けて apollo-iosを選択し、Add Packageから Unity-iPhoneを選択します。

    gamepot-UnitySDK06.png

    NameDependeny modulesLocationVersionFramework
    NBaseApollohttps://github.com/apollographql/apollo-ios.git1.15.2Apollo, ApolloAPI
    NBaseAdapterProviderKakaoKakaoOpenSDKhttps://github.com/kakao/kakao-ios-sdk2.23.0KakaoSDK, KakaoSDKAuth, kakaoSDKCommon

    事前準備

    1. プロジェクト IDとプロジェクトキーはダッシュボード > プロジェクトの設定でコピーします。
    2. ログイン、ストア、連携の環境設定はダッシュボード > プロジェクトの設定で追加したり変更したりできます。
    3. ログイン別にログイン手段別環境設定を参照し、コンソールに設定してダッシュボードに追加します。
    4. In-App決済時はストア別環境設定を参照し、コンソールに設定してダッシュボードに追加します。
    5. In-App決済のために、ストアごとにアイテムを登録します。 ダッシュボード > 決済 > In-Appで追加します。

    リセット

    リセットを実行するには、ゲームを始める際にロードされる最初の画面に使用されるインスタンスに、以下のコードを追加します。

    using UnityEngine;
    using NBaseSDK;
    
     public class GamePotExample : MonoBehaviour
     {
         void Start()
         { 
           NBaseSDK.NBase.initialize(projectId, projectKey, [storeId], [language], [region], (init, error) => {
               if (error != null)
               {
                   Debug.Log(error.Message);
                   return;
               }
               Debug.Log(init.ToString());
           });
         }
     }
    
    • Parameter
    KeyDescriptionRequired
    projectIdダッシュボード → プロジェクトの設定O
    projectKeyダッシュボード → プロジェクトの設定O
    storeId以下の表を参考O
    language言語(en、ko、jp...)O
    regionリージョン名(kr、jp、sg、us、eu)O
    KeyDescription
    Store.google.ToString()Google Play Store
    Store.one.ToString()ONE Store
    Store.galaxy.ToString()Galaxy Store
    Store.amazon.ToString()Amazon Store
    Store.huawei.ToString()Huawei Store
    • Callback
    KeyTypeDescription
    Statusbool状態
    Languagestring言語
    Countrystring
    RemoteIpstringIP
    Sandboxboolサンドボックスかどうか

    リセット(イベントの受信)

    はじめに NBaseイベントを受信するスクリプトを作成します。
    このスクリプトは NBaseListenerと呼ばれ、シーンのどんなオブジェクトにも配置できます。このオブジェクトが永続的に存在するように DontDestroyOnLoadメソッドを呼び出すことをお勧めします。

    gamepot-UnitySDK09.png

    using UnityEngine;
    using NBaseSDK;
    public class NBaseListener: MonoBehaviour, NBaseEventListener
    {
    	void Start()
    	{
            DontDestroyOnLoad(this.gameObject);
            NBaseSDK.NBase.SetEventListener(this);
        }	
    }
    

    ログイン

    開発会社で実装したログイン UIにより、ログインボタンをクリックしたときに動作する SDKログイン機能を使用するには、以下のコードを使用します。これが正常に動作するには、ログインに必要なコンソールとダッシュボードの設定がすべて完了している必要があります。

    
    NBaseSDK.NBase.signIn(Provider.google.ToString(), (user, error) => {
        if (error != null)
        {
            if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_WITHDRAW) // 退会状態
            {
                // 退会
                Debug.Log(error.Message.ToString());    // 退会メッセージ
            }
            else if (error.Code == NBaseSDK.NBase.ErrorCode.UPDATE_REQUIRED) // 強制アップデート
            {
                // 強制アップデート
                Debug.Log(error.Message.ToString());    // アップデート案内メッセージ
            }
            else if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_BANNED) // アクセスをブロック
            {
                // アクセスをブロック
                Debug.Log(error.Message.ToString());    // ブロックメッセージ
            }
            else
            {
                Debug.Log(error.Message.ToString());
            }
        }
        else
        {
            // ログインに成功
            Debug.Log(user.ToString());
        }
        return;
    });
    
    • Parameter
    KeyDescription
    Provider.google.ToString()Google
    Provider.anonymous.ToString()ゲスト
    Provider.facebook.ToString()Facebook
    Provider.apple.ToString()Apple
    Provider.kakao.ToString()Kakao
    Provider.playgame.ToString()Play Games
    Provider.steam.ToString()Steam
    Provider.x.ToString()X
    Provider.line.ToString()LINE
    Provider.naver.ToString()NAVER
    Provider.github.ToString()GitHub
    Provider.microsoft.ToString()Microsoft
    Provider.huawei.ToString()HUAWEI
    • Callback
    KeyTypeDescription
    Idstringユーザーの固有 ID
    Namestringユーザーの名前
    Emailstringユーザーのメール
    Tokenstringトークン
    Ageintユーザーの年齢
    Birthstringユーザーの生年月日
    Sexstringユーザーの性別
    Profilestringユーザーのプロファイル
    Mobilestringユーザーの電話番号
    Metadatastringメタデータ

    自動ログイン(オプション)

    リセットの後、最後にログインした認証手段で自動ログインを試みます。

    NBaseSDK.NBase.signInLastLoggedIn((user, error) => {
        if (error != null)
        {
            if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_WITHDRAW) // 退会状態
            {
                // 退会
                Debug.Log(error.Message.ToString());    // 退会メッセージ
            }
            else if (error.Code == NBaseSDK.NBase.ErrorCode.UPDATE_REQUIRED) // 強制アップデート
            {
                // 強制アップデート
                Debug.Log(error.Message.ToString());    // アップデート案内メッセージ
            }
            else if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_BANNED) // アクセスをブロック
            {
                // アクセスをブロック
                Debug.Log(error.Message.ToString());    // ブロックメッセージ
            }
            else
            {
                Debug.Log(error.Message.ToString());
            }
        }
        else
        {
            // ログインに成功
            Debug.Log(user.ToString());
        }
    });
    

    独自の IDとパスワード認証(オプション)

    ユーザーがメールアドレスとパスワードを使用してログインできるようにする認証メソッドです。
    ユーザーのメールアドレスとパスワードに基づいてユーザー認証を行います。さらに、この機能は、従来のメール/パスワードベースの認証システムで重要な役割を果たします。

    NBaseSDK.NBase.signInWithPassword(username, password, (user, error) => {
        if (error != null)
        {
            Debug.Log(error.Message.ToString());
            return;
        }
    });
    

    認証情報でログイン(オプション)

    さまざまな認証方法(メールやパスワード、ソーシャルメディアアカウント、電話番号など)で取得した認証情報(credentials)でユーザーログインを処理するのに使用されます。
    さまざまな認証方式を簡単に実装できるようにサポートし、GAMEPOTにログインできるようにします。

    NBaseSDK.NBase.signInWithCredential(Provider.gamepot.ToString(), providerToken, (user, error) => {
        if (error != null)
        {
            Debug.Log(error.Message.ToString());
            return;
        }
    });
    

    決済

    決済の前に、ストア別環境設定にそのストアに合わせて設定する必要があります。
    さらに、ダッシュボード > 決済 > In-Appにアイテムが追加されていない場合、「ProductID not found」というエラーが発生します。

    iOS StoreKitの設定

    Xcodeで、New Fileを利用して StoreKitを作成します。

    gamepot-UnitySDK10.png

    gamepot-UnitySDK11.png

    Synced Todayの前にある更新ボタンをクリックすると、図のように Appleに登録された In-App情報が表示されます。
    gamepot-UnitySDK12.png

    In-App情報の取得

    決済の際は、画面に決済情報と現地の通貨情報を表示する必要があります。
    以下の関数を使用すると現在の決済通貨や名前などを取得できます。正常に取得できない場合は、コンソール設定をご確認ください。

    NBaseSDK.NBase.getProductItems(Store.google.ToString(), (products, error) => 
    {
        if (products != null && products.Count > 0)
        {
            // 製品リストをループします。
            foreach (var product in products)
            {
                // 各製品の情報をトーストメッセージで表示します。
                // 例では product.ToString()を呼び出していますが、
                // 実際は productの具体的な属性(例: 名前、価格など)を表示できます。
                NBaseSDK.NBase.showToast(product.ToString());
            }
        }
        else
        {
            // 製品リストが空の場合、ユーザーに通知します。
            NBaseSDK.NBase.showToast("製品リストが空です。");
        }
    });
    
    • Callback
    KeyTypeDescription
    Products[].Idstring製品の ID
    Products[].Namestring製品の名前
    Products[].Pricedouble製品の価格
    Products[].Descriptionstring製品の説明
    Products[].LocalizedPricestring現地化された価格
    Products[].Currencystring製品の通貨単位

    決済リクエスト

    取得した In-App情報にある Product IDで決済をリクエストできます。

    NBaseSDK.NBase.purchase(Store.google.ToString(), [productId], [metadata], [options], (purchase, error) => 
    {
        if (error != null)
        {
            Debug.Log(error.Message.ToString());
            return;
        }
        // 決済成功
    });
    
    • Parameter
    KeyTypeDescriptionRequired
    ProductIdstring商品 ID(ダッシュボード → 決済 → In-Appアイテム)O
    MetadatastringMetadataX
    Optionsstring決済オプション機能X
    KeyDescription
    Store.google.ToString()Google Play Store
    Store.one.ToString()ONE Store
    Store.galaxy.ToString()Galaxy Store
    Store.amazon.ToString()Amazon Store
    Store.huawei.ToString()Huawei Store
    • Callback
    KeyTypeDescription
    storeIdstringストアの固有 ID
    paymentIdstring決済 ID
    iapVersionstringIn-App決済バージョン
    productIdstring製品 ID
    billingKeystring請求キー
    signaturestring署名
    originalJsonstringオリジナル JSON
    orderIdstring注文 ID
    developerPayloadstring開発者ペイロード
    packageNamestringパッケージ名
    isAcknowledgedbool確認の有無
    purchaseStateint購入状態
    purchaseTimelong購入時間
    pricefloat価格
    quantityint
    currencystring通貨の単位

    Unity Standaloneのご案内

    Standaloneは Mac、Windows、Linux用ビルドを表します。
    GAMEPOT SDKはクロスプラットフォームをサポートしますが、モバイルと Standaloneでサポートされる機能が異なります。下記表を参照して開発計画を立ててください。

    ServiceAndroidiOSWebPC
    ログインOOOPCログイン後、Tokenを検証
    決済OOOPC決済に移動
    お知らせOOOO
    カスタマーサポートOOOO
    リーダーボードOOOO
    友達管理OOOO
    プッシュOOXX
    メンテナンスOOOO
    アップデートOOOO
    クーポンOOOO
    チャットOOOO
    データ保存場所OOO準備中
    セキュリティOOX準備中
    プレイヤーOOO準備中
    参考

    Webバージョンは GamePot 3.0 Typescriptバージョンにのみ提供される機能です。

    Newtonsoft.Jsonクラッシュ

    NBase Unity SDKは、APIリクエストのパースに Unityの Newtonsoft Jsonパッケージを使用します。Jsonは最も一般的に使用されるライブラリの1つであるため、プロジェクトに既に Jsonが存在して次のようなライブラリ重複エラーが発生する可能性があります。

    この場合、Plugins/StandaloneパスにあるNewtonsoft.Jsonファイルを削除するか、プロジェクトに既にある Jsonライブラリを削除して Unityの Jsonを使用することができます。Unityの Jsonパッケージは Unityエンジンと一緒に動作するように修正され、IL2CPPを完璧にサポートするバージョンです。

    トラブルシューティング

    Q. UnityPlayerActivity.java uses or overrides a deprecated API.
    A. Edit > Project Settings > Player > Publishing settings > Custom Properties Gradle Templateにチェックを入れてください。

    Q. error:1E08010C:DECODER routines::unsupported
    A. Google Authentication Keyが一致しない場合に発生する現象で、Google Play Storeガイドを参照してキーを正確に入力してください。

    Q. ONE Storeや GAMEPOTベータのような公式 mavenアドレスは問題ありませんが、maven、jitpack.ioからはダウンロードできません。
    Unityで以下のようなエラーが発生します。

    Could not determine the dependencies of task ':unityLibrary:compileReleaseAidl'.
    > Could not resolve all task dependencies for configuration ':unityLibrary:releaseCompileClasspath'.
       > Could not find io.nbase:nbasesdk:0.0.71-beta.
         Required by:
             project :unityLibrary
    

    public mavenを使用しないモジュールの場合、以下のように mavenアドレスを入力する必要があります。NBaseSDKDependenciesファイル設定時に mavenアドレスを入力してください。

    <!-- # ONE Store -->
    <androidPackage spec="com.onestorecorp.sdk:sdk-iap:21.01.00"/>
        <repositories>
            <repository>https://repo.onestore.co.kr/repository/onestore-sdk-public</repository>
        </repositories>
    </androidPackage>
    
    <!-- # NBase Beta mavenリポジトリ -->
    <androidPackage spec="io.nbase:nbasesdk:3.0.82"/>
        <repositories>
            <repository>https://repo.nbase.io/repository/nbase-releases/</repository>
        </repositories>
    </androidPackage>
    

    jitpack.ioもアドレスを追加してください。

    Q. minimum API Levelアップグレードのご案内
    A. デフォルトの API Level 22から24にアップグレードしてください。
    gamepot-UnitySDK13.png

    Q. Authorization failed: Error Domain=AKAuthenticationError Code=-7026
    A. TARGETS > +Capabilityをクリックして Sign in with Appleを追加してください。
    gamepot-UnitySDK14.png

    Q. Couldn't get credential from result.10: Developer console is not set up correctly
    A. このエラーは、Google Cloud Console > ユーザー認証情報 > OAuth 2.0クライアント IDでウェブアプリケーションタイプのクライアント IDが設定されていないため発生する可能性があります。

    Q. 16: Cannot find a matching credential.
    A. この場合は、Google Cloud Console > ユーザー認証情報 > OAuth 2.0クライアント IDが登録されていないため発生する可能性があるエラーです。

    Q. java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/billingclient/api/BillingClient;
    A. 以下のコードを追加してください。

    <androidPackage spec="com.android.billingclient:billing:6.1.0" /> 
    

    Q. (iOS) アプリを実行するとクラッシュが発生し、「/AdapterProviderFacebook' (no such file)」エラーが確認される
    A. Xcode TARGETS → General → Frameworks, Libraries, and Embedded Content → AdapterProviderFacebook.xcframeworkを追加してください。

    Q. (iOS) 実行すると「/usr/lib/swift/NBase.framework/NBase' (no such file, not in dyld cache)」エラーが発生
    A. 以下のように NBase.xcframeworkを追加してください。

    gamepot-UnitySDK07.png

    gamepot-UnitySDK08.png

    Q. (iOS) iOS 18環境で「NSBundle file:///System/Library/Frameworks/Metal.framework/ principal class is nil because all fallbacks have failed」エラーが発生

    A. Edit Schemeウィンドウを開き(ショートカット: CMD + SHIFT + ,)、以下のように Metal項目の API Validationからチェックを外してください。

    gamepot-UnitySDK15.png


    この記事は役に立ちましたか?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.