読者です 読者をやめる 読者になる 読者になる

【ジョーカースクリプト勉強会】番外編・セーブデータの管理【Unity】

Unity ジョーカースクリプト Unix系コマンド

どうも、ふくともです。

 

今回はジョーカースクリプトを利用したUnityのセーブデータ保存場所の特定を行おうと思います。

当方、開発環境がMacであるためUnix系ターミナルコマンドを使用しています。

Windowsについてはそのうち別の記事に書き起こすかもしれません。

 

というのも、現在サークルの制作でAndroidアプリを組んでいてロード/セーブ画面で「PCでの開発中に作成されたセーブデータ」をAndroid機から参照しようとしてフリーズする、という自体に陥りまして。

 

セーブデータ自体をAndroid機に突っ込んでやろうかとも考えたのですが、アプリ配布に当たって既にセーブデータが入っているのも如何なものかと思い、とりあえず.apkビルド前にセーブデータを削除してしまおう、ということに。

 

日時を利用してセーブデータの保存先を特定したいのでとりあえずセーブデータを1つ変更しておきます。

 

 

↓ジョーカースクリプトのロード画面(カスタマイズ有)

f:id:q-fukutomo:20160212014121j:plain

画面から分かるようにセーブ日時も保存されているようです。

 

ということは、セーブデータもこの時間に変更されているはず。

 

Unix系の検索コマンドでこの時刻に最後の変更が加えられたファイルを検出したい。

 

検索コマンド find

$ find / -mtime 0

 

これでストレージ内のその日に変更が加えられたファイルまでは絞れるようです。

 

......と言ってもその日のうちに変更したファイルではきっとソースコードなども引っかかってしまい絞り切れてるとは言えませんね

 

先ほどのリンクをもう少し見てみると -ls オプションを加えることで詳細表示が出来るようです。

-lsオプションでは時刻も表示されるので

$ find / -mtime 0 -ls

これで必要なデータは見つかるはずです。

 

が、表示された中から目標のファイルをマンパワーで探すのは効率的ではないので、

文字列検索コマンド grep

を併用します。

 

 

セーブデータによると01:20:59(時:分:秒)に変更されていますね。

-lsオプションで表示されるのは時:分なので、01:20を含むものだけを表示させればいいですね。

 

コマンドの併用は | (パイプ記号)をコマンドの間に挿入すればできるので、

$ find / -mtime 0 -ls | grep 01:20

でOKです。

※時刻に関してはそれぞれの環境に合わせて適宜置き換えてください。

 

また、@saveタグの定義ファイル

Assets/JOKER/Scripts/Novel/Components/SaveComponent.cs

を見てみると

configファイルで指定されている最大セーブスロット数まで、0から順に列挙していきます。

save_0 save_1 save_2 …  というセーブファイルを列挙していく

 

save.name:セーブファイル名(ロード時に指定する名前でもある)

 とあるので、今回の環境ではセーブファイル名にはsave_4が使われているはずです。

 

時刻と同様にgrepを叩き

$ find / -mtime 0 -ls | grep 01:20 | grep save_4

でファイルの位置が特定出来ます。

※ディレクトリによっては権限の関係で参照できない可能性もあるので念のため管理者権限で実行したほうが良いかもしれません。

 

同じディレクトリに入っているのは大体セーブファイルなのでビルド前にまとめて削除or退避させてビルド後に再配置すれば実機デバッグは問題なく行えます。

 

以下、軽い宣伝になります。

今回使用した画像は私の所属する同人サークル「outer(base);」(読み:あうたーべーす)でAndroid移植を進めているノベルゲーム「Surface」のロード画面になります。

3月中にはリリース予定ですので、ジョーカースクリプト勉強会シリーズの制作サンプルとして遊んでみていただけると幸いです。

 

以上。

2016/02/12 Fri.