いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU

Unity : MonoBehaviour, ScriptableObject をJSONファイルに保存する [C#]

まあ、ごくたまになんですけど、Unityをバージョナップしたりアセットをインポートしなおしたときに、シリアライズされたデータがふっとぶ時があったんです。
けっこうショックがデカいんですよね。いろんなデータをそこに入れてたりすると。

こんなときバックアップをファイルに保存しておけば復元できます。


保存

JsonUtilityでJSONテキストにしたモノをファイルに書き込み、AssetDatabaseでインポートします。
下記ソースの TestScriptableObject クラスは、保存したいScriptableObjectクラス。

string json = JsonUtility.ToJson (AssetDatabase.LoadAssetAtPath<TestScriptableObject>("ScriptableObjectアセットのファイルパス"));

using (StreamWriter writer = new StreamWriter("書き出すファイルのパス"))
{
       writer.Write(json.ToString());
}

AssetDatabase.ImportAsset(jsonPath);

復元

JSONからMonoBehaviour, ScriptableObjectにデータを流し込む場合は、JsonUtility.FromJsonOverwrite メソッドを使用する必要があります。

var so = AssetDatabase.LoadAssetAtPath<TestScriptableObject>("ScriptableObjectアセットのファイルパス");
TextAsset backupJson = AssetDatabase.LoadAssetAtPath<TextAsset>("JSONファイルのパス");
JsonUtility.FromJsonOverwrite(backupJson.text, so);

AssetDatabase.SaveAssets();

イジョ!

Unity : iOS 10.3以上でレビューダイアログを表示するプラグインを作る

iOS10.3からレビュー依頼の方法が変わり、アプリ内で星を評価するダイアログが標準で用意されました。
なんでも、このダイアログを使わないレビュー依頼は リジェクト対象になる とか。

ということでUnityで作ったゲームでもこの機能を使いましょう。

UnityプロジェクトにObjective-cのソースを追加

Swift? ノーノー。めんどくさいこと私キライ。
今回の目的にはObjective-Cが一番簡単でヨロシイね。

下記のファイルをUnityプロジェクトの Assets/Plugins/iOS フォルダの下に配置します。

ReviewDialog.mm

#import <StoreKit/StoreKit.h>

extern "C" {

    void ShowReviewDialog ()
    {
    // レビューダイアログ呼び出し
        [SKStoreReviewController requestReview];
    }
    
}

これが iOSプラグイン としてプロジェクトに組み込まれます。

呼び出すほうは下記のようにスクリプトを書きましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;

public class TestScript : MonoBehaviour {

    [DllImport ("__Internal")]
    private static extern float ShowReviewDialog();

    void Update () {
       #if UNITY_IOS
        if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began) {

            // プラグイン呼び出し
            ShowReviewDialog();
    
        }
       #endif
    }
}

上のスクリプトのうち、プラグイン呼び出しの準備として必要なのは下記二つの部分。

using System.Runtime.InteropServices;
[DllImport ("__Internal")]
private static extern float ShowReviewDialog();

Xcodeに書き出す

こちらの記事を参考に、iOS用のビルドを作ります。

indie-du.com

Xcodeを開いたら、下の画像を参考にして StoreKitフレームワーク を追加してください。

f:id:sugar_affordance:20170923172801j:plain

実行する

うまくいけばダイアログが出ます。

参考 Unity - マニュアル: iOS 用のプラグインをビルド

Amazon.co.jpアソシエイト