Game Manager
TankManagerスクリプト
[Serializable]について、具体的なイメージを持ちたいです。
動画では「インスペクターに表示させる」という説明でした。シリアライズの本来の意味としては
「データをテキスト化(リスト化ということ?)(jsonなど)する」
ことだと思っております。
また動画内では[HideInInspector]をつける理由を「他から触らせたくないからです」
とも説明しており、「ゲームとしてビルドした後、プレイヤーがデータをいじれないようにする」
ということと同義なのかなと思いました。
これらから予測した解釈は“Unityでゲームがビルドされた際にはゲーム内の[Serializable]な全ての変数が
ゲームの実行ファイルと別の場所に「テキストとしてリスト化してあるファイル」が生成され、
それをいじられるとゲーム内変数が変わってしまう。(これがいわゆるチート?)
だから、[HideInInspector]をつけたり、アクセス修飾子をprivateにしたりして、
テキストとしてリスト化してあるファイル」にリスト化されないようにすることで、
そのゲームのプレイヤーが数値をいじれないようにする”という理解でしたが、この解釈で良いのでしょうか?
①この解釈はあっているのか。
(間違っていれば各部分についてご解説いただきたいです。)
②リスト化されたファイル?ができるのであれば(ビルド時)どこに生成されるのか?
③そのファイルはどういった形式なのか
④セーブやロードに使うFileStreamを使用して能動的に行う「セーブ時JSONに書き出して、ロード時それを読み込む」処理との違いは何かをご教授いただきたいです。
また、こういう基礎的なゲームIDEで作成されたゲームの裏構造がわかっておらず、理解したいので、
そういった知識を体型的に学べるおすすめサイトやどのように学べば良いかなど
ご教授いただけますと幸いです!
①について
違います。
SerializeFieldを使ってインスペクターに表示するのは、UnityのEditor上から編集できるようにするためであって、プレイヤーは関係ありません。
「他から触らせたくないから」というのは、インスペクターで編集されずにスクリプト上で済ませたいという意味です
②、③について
SerializeFieldされた変数はSceneファイルに書き込まれます。基本はバイナリ形式で保存されているはずです。
④シリアライズ化と、UnityにおけるSerializeFieldは似たようで別のものと解釈するのが最もわかりやすいです。
なので、それらの処理とは全く違うことをしており、SerializeFieldをつけてシリアライズ化すると言うのは、
Editor上で編集できるようにすると言う意味になります。
知識を学べるサイトや本についてですが、今回のような「Unity」を使ったゲーム制作での構造を知りたいのなら、公式マニュアルやスクリプトリファレンスをくまなく調べることをオススメします。
Unityのようなゲームエンジン特有の話ではなく、VisualStudio等のIDEについて知りたいのなら、そのIDEに該当した書籍を読むのが一番だと思われます。