2014年10月18日土曜日

AssetPostprocessorで生成したScriptableObjectの中身がPlayで消える問題の解決

よくわからず使っていたのが間違い。
単純に 呼ぶべき関数を呼んでなかったってだけです。

AssetPostprocessorクラスを使って、txtファイルをScriptableObjectに変換してシナリオテキストの保存に使っています。
(TextAssetで読むのもありかもしれないがSystem.IOが使えない場合があるのでこうしている)

で、OnPostprocessAllAssets()でインポートor変更されたテキストファイルに対して、
AssetDatabase.CreateAssetでScriptableObjectを生成して。。とやっていたのですが、エディター上で「Play」押すたびに中身が消える現象が発生。


















生成した直後。ScenarioDataはtxtデータをシンプルにstringのリストに格納するだけのリスト。

この状態でPlayを押すと

















ウウオアアアーー!


.assetファイルが入っているフォルダを見に行くとタイムスタンプが更新されてない。
すなわちエディタ上で入ったように見えたデータが保存されていないってことですね。

開発環境がWindows8.1なので、OS側の管理者権限問題か?と思ってたら違いました。

結論は、「AssetDatabase.SaveAssets();」だけじゃ保存してくれないのよというわけでした。

以下、手順メモ。


ちゃんと「ここからここまでが編集、あとUnityにもデータ更新があったことを伝える」
をやらないとだめらしい。

生半可にこったことやろうとするとこういうのにハマりますね。。。

0 件のコメント:

コメントを投稿