見出し画像

ダンスゲーを作りたい#28 データを読み書きする処理

ソシャゲ的なゲームを作成する予定なので、ログインとかユーザ情報とかいろいろをゲームサーバとやり取りをしていい感じに受け取りたいと。

サーバ側の処理は見せない方がいい気がするので控えますが、流れくらいは備忘録も兼ねて書いておこうかなと。

データのひな型

データを扱いやすくするためにクラスをつくって、それぞれが自分のデータを呼び出せるようにしておきます。

たとえばこんな感じ

public class UserConstData{
   public int EXP;     //経験値
   public int Rank;    //ランク
   public int Money;   //所持金
   public int Stone;   //所持石
   public int Stamina; //スタミナ
   public string UserName; //ユーザ名
   
   public UserConstData(){
       //データの保存先 実際はアクセスするサーバのURIみたいなイメージ
       string filePath = Application.dataPath+"/UD";
       
       //フォルダがなければ作る処理 サーバにつなぐ場合は不要
       if(!File.Exists(filePath)){
           Directory.CreateDirectory( filePath );
       }
   }
   
   //データそのもの 実際はユーザIDとかを渡す形になったURLのイメージ
   string _dataPath = Application.dataPath+"/UD/UCD.json";
   
   //保存 疑似的にファイルに書き込む処理
   //データはゲーム内で変更されてメンバに保存されてる
   //実際は自分自身のデータを送ってサーバの情報を書き換えてもらう
   //操作をサーバに送ってサーバ側で書き換えた方がよりセキュアだと思う
   public bool SaveData_fromFile(){
       try{
           //書き込み処理をしましょうねって話なんだよね。
           StreamWriter writer;
           string jsonstr = JsonUtility.ToJson (this);
           writer = new StreamWriter(_dataPath, false);
           writer.Write (jsonstr);
           writer.Flush ();
           writer.Close ();
           LoadData_fromFile();
       }catch(Exception e){
           return false;
       }
       if(LoadData_fromFile()){
           return true;
       }
       return false;
   }
   
   //読み込み 疑似的にファイルから読み出し
   //サーバからデータを受け取る処理
   //データファイルが存在しない場合初期値を代入してる
   //初期値代入もサーバ側でやった方がいい
   public bool LoadData_fromFile(){
       try{
           if(File.Exists(_dataPath)){
               var json = File.ReadAllText(_dataPath);
               UserConstData UD = JsonUtility.FromJson<UserConstData>(json);//Jsonから呼び出し
               this.EXP    =   UD.EXP;
               this.Rank   =   UD.Rank;
               this.Money  =   UD.Money;
               this.Stone  =   UD.Stone;
               this.Stamina=   UD.Stamina;
               this.UserName  =UD.UserName;
           }else{
               this.EXP    =   0;
               this.Rank   =   1;
               this.Money  =   1000;
               this.Stone  =   0;
               this.Stamina=   2000;
               this.UserName  ="B-Boy[無名]";
               SaveData_fromFile();
           }
           
       }catch(Exception e){
           return false;
       }
       return true;
   }
   
}

ユーザー固有の情報だけをまとめたクラスです。

ここではデータの保存、読み込みをファイルからの読み書きで代用していますが、実際はこれをサーバから受け取るようにすればおおむねOKではないでしょうか。

サーバを使わずデータをローカルに保存する場合はこのままのながれでOKなはずです。

このクラスを動かすと↓みたいにデータが保存されます。

画像1

↑ファイルをよくよく見ると、実は保存確認のために名前に"g"って付いています。

画像2

ゲームを起動して表示したらこんな感じ。

呼び出したデータの表示は単純に前回作ったパネルにテキストをいれてるだけです。

GameObject.Find("文字入れたいゲームオブジェクト名").GetComponent<Text>().text="文字"

とかで入れれます。

これをファイル側を書き換えて、

画像3

gを消してあげると

画像4

ゲーム側にも反映されています。

きちんとデータを読みだしてるのが確認できました。



この記事が気に入ったらサポートをしてみませんか?