ちょっと縦幅が足りなかった・・・
いや、もしくは、1ページの畑の数を4つにするか。
それもありだな。
まぁ、次はタップ処理を作っていきましょうか。

シーンを一つ、タイトルシーンを追加し、
その処理の中で初期化シーケンスを行うようにしました。
void Update()
{
if(!gameManager.Initialized)
{
switch(sequence)
{
case Sequence.Start:
sequenceStart();
break;
case Sequence.MasterInitialize:
masterInitialize();
break;
case Sequence.UserdataInitialize:
userInitialize();
break;
case Sequence.Complete:
FadeManager.Instance.LoadScene("HomeScene", 0.3f);
sequence = Sequence.End;
break;
case Sequence.End:
gameManager.Initialized = true;
DontDestroyOnLoad(gameManager);
break;
}
}
}
Updateのループの中で初期化処理を行い、動作が完了してから次の動作を行う、という感じです。
なぜこうする必要があるかというと、
var request1 = UnityWebRequest.Get(Application.streamingAssetsPath + "/item.csv");
request1.SendWebRequest().completed += (AsyncOperation operation) => {
Items = ItemLoad(request1.downloadHandler.text);
endflg[0] = true;
};
UnityWebRequest.Get()の処理が非同期で行われるため、Update()の処理を抜けないと実行されません。
で、初期化が完了すると、ホーム画面に遷移。
PCではファイルストリームで読み込むことが出来たのですが、
Androidでは使用できないことが判明。
なので、ファイル読み込み処理を変える必要があります。
https://teratail.com/questions/284587
UnityWebRequestを使用して、HTTPリクエストのようにして読み込ませる必要があるとのこと。
これを使用した場合、読み込み処理は非同期で行われるので、初期化のタイミングを美味く取らないと、正しく動作しないわけで、
なかなかめんどくさい。
たぶん、ここらへんもうちょっとひねらないとダメなんだろうな。
パラメータ表示できたよ。
このサイトを見て解決しました。
https://miyagame.net/canvas-size/
簡単に原因を説明すると、
Canvasのサイズがめちゃくちゃデカすぎておかしいことになってた。
これをスマホの解像度サイズ(カメラのサイズ)に合わせることで正しく表示されるようになります。
こちらでシングルトンの実装を行ったのですが、
これだけだとシーンの中では共有できるけど、
シーンが切り替わるとデータを共有出来ないっぽい。
なので、DontDestroyOnLoadを使いました。
DontDestroyOnLoadを使用すると、シーンが切り替わってもデータは保持されるらしい。
しかし、使い方を間違えると、DontDestroyOnLoadに同じデータが溜まっていくらしいけど、それはそのとき考える。
今のところ問題ないっぽい。
Unityでマスターデータを読み込ませるのに、前のプロジェクトで作成していたcsv、jsonを読み込ませます。
データはアセットの中に格納しておきます。
csvの場合は前のプロジェクトと全く同じ。
いろんなサンプルコード公開されているけど、なんでファイルストリームを扱うのにusingを使わないんだろう?
Jsonは元々UnityにはJsonUtilityという、それはそれは高速なJsonライブラリがあるのですが、
どうも気難しい性格みたいで、どんなに頑張っても作成済みのJsonファイルをオブジェクトに展開できない。
なので、結局、前と同じJson.Netを使用しました。
組み込み方法は、アセットストアにJson.Net for Unityのアセットが公開されているので、これをダウンロードする。
https://assetstore.unity.com/packages/tools/input-management/json-net-for-unity-11347?locale=ja-JP
ZIPファイルからdllをPluginsにコピーして~
とか、いろんなサイトに書いてありますが、そんな手順は不要です。
一度このアセットをダウンロードしてしまえば、前と同じコードでJsonを展開できます。
初めからこうすれば良かった。
農場経営ゲームのデータ構成はもう出来上がっているので、
これはこのままデータクラスとしてスクリプチオを作成。
特に基底クラスは指定していません。
で、これを複数のシーンからでも参照できるようにしたい。
参考にしたのはこちらでした。
シングルトンの基底クラスのコードはそのまま使えるはず。
このクラスを継承してゲームマネージャークラスを作成。
public class GameManager : SingletonMonoBehaviour<GameManager>
{
private PlayerData _playerData = null;
private MasterData _masterData = null;
private bool _initialized = false;
public bool Initialized
{
get
{
return _initialized;
}
}
public MasterData MasterData
{
get
{
return _masterData;
}
}
public PlayerData PlayerData
{
get
{
return _playerData;
}
}
これをコンポーネントとして適当に登録しておく。
登録しておかないと、
instance = (T)FindObjectOfType(typeof(T));
で、クラスが見つからないと怒られるので注意。
参照するときは
GameManager gameManager = GameManager.Instance;
で可能なはず。
まぁ、今回はスクリプトのデバッグ方法も分かったので、収穫は大きかった。
こちらの記事を参考にしました。
http://kuromikangames.com/article/475434825.html
いろいろ探してみたのですが、この外部パッケージを使うのが一番早いらしい。
https://github.com/naichilab/Unity-FadeManager
このパッケージをインポートして、プレハブをシーンに追加。
そして、シーン切り替え処理を置き換えます。
public void onTouchFarmScene()
{
FadeManager.Instance.LoadScene("FarmScene", 0.3f);
}
左上のデバッグ表示が気になるけど、後でなんとかする。