negitamago
12/11/2018 - 3:36 AM

ConfigLoadFromNCMB

#Unity ゲームの設定値をNCMBから読み込むサンプル http://negi-lab.blog.jp/ConfigLoadFromNCMB

using UnityEngine;
using NCMB;         // NCMB
using System;       // (任意) イベントを送信する場合に必要
using DG.Tweening;  // (任意) DOTween使用する場合に必要

/*
 * ConfigLoadFromNCMB
 * #Unity ゲームの設定値をNCMBから読み込むサンプル
 *
 * 解説記事 http://negi-lab.blog.jp/ConfigLoadFromNCMB
 */

public class ConfigLoadFromNCMB : MonoBehaviour
{
    public EventHandler<float> ConfigSettingLoadedEventHandler; // (任意) 設定値読み込み完了イベント

    [SerializeField] string ncmbClassName;      // NCMBクラス名(例 "Config")
    [SerializeField] string fieldName;          // NCMBクラス内で使用するフィールド名(例 "playDuration")

    [SerializeField] string testRecordId;       // テスト用設定のレコードID (NCMBのobjectId)
    [SerializeField] string normalRecordId;     // 通常設定のレコードID (NCMBのobjectId)

    private NCMBObject config;                  // NCMBオブジェクトを操作するための変数


    private void Start ()
    {
        DOVirtual.DelayedCall ( 1f, () => LoadConfig () ); // 開始1秒後に読み込む例(DOTween使用)
    }

    // コンフィグ読み込み
    private void LoadConfig ()
    {
        config = new NCMBObject ( ncmbClassName );      // config を指定クラスで初期化

        // Qキーを押していれば短時間設定呼び出し、押していなければ通常設定呼び出し
        config.ObjectId = Input.GetKey ( KeyCode.Q ) ? testRecordId : normalRecordId;

        // NCMBオブジェクトの取得
        config.FetchAsync ( ( NCMBException e ) =>
        {
            if ( e == null )    
                LoadValueByFloat ();                // 正常時処理
            else                
                Debug.Log ( "Config Load Error" );  // エラー時処理
        } );
    }

    // 値を読み込んで float 型にする
    private void LoadValueByFloat ()
    {
        var duration = float.Parse ( config[fieldName].ToString ());

        ConfigSettingLoadedEventHandler ( this, duration ); // (任意) 設定値読み込み完了イベントを送信

        Debug.Log ( "Play Duration: " + duration );
    }
}