Unityでアイテムのデータをこんな感じにScriptableObjectで
保存しているのですが、アイテムの種類を
このScriptableObject(value)と名前(key)のDictionaryで保存しておきたいです。
ですが、画像データを使っている都合上Jsonファイルでの保存ができません。
(Json.netを使っています)
ゲーム全体で変わらない値なので、データから読み込めるようにしたいです。
よろしくお願いします。
以下、現在使用中のコードです。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Newtonsoft.Json; 5using System.IO; 6using System.Linq; 7 8[System.Serializable] 9public class test2 10{ 11 public string id; 12 public Item val; 13 test2(string _id, Item _val) 14 { 15 _id = id; 16 val = _val; 17 } 18} 19 20public class DataManager : MonoBehaviour 21{ 22 public List<test2> tests; 23 Dictionary<string, Item> Assets = new Dictionary<string, Item>(); 24 25 void Start() 26 { 27 Assets = new Dictionary<string, Item>(); 28 foreach (var item in tests) 29 { 30 Assets.Add(item.id, item.val); 31 } 32 SavetheDataTest(); 33 } 34 void SavetheDataTest() 35 { 36 JsonAlpha.Save<Dictionary<string, Item>>(Assets, "C:/Users/pcuser/Desktop/Desktops/Unity Game Datas/Mechanism/Assets/Saves/test1.json"); 37 } 38} 39/// <summary> 40/// Jsonを使い易くするクラスです 41/// </summary> 42public static class JsonAlpha 43{ 44 public static void Save<T>(T target, string filePath) 45 { 46 string json = JsonConvert.SerializeObject(target, Formatting.Indented); 47 StreamWriter streamWriter = new StreamWriter(filePath); 48 streamWriter.Write(json); 49 streamWriter.Flush(); 50 streamWriter.Close(); 51 } 52 public static T Load<T>(T target, string filePath, T defaultreturn) 53 { 54 if (File.Exists(filePath)) 55 { 56 StreamReader streamReader; 57 streamReader = new StreamReader(filePath); 58 string data = streamReader.ReadToEnd(); 59 streamReader.Close(); 60 return JsonUtility.FromJson<T>(data); 61 } 62 else 63 { 64 return defaultreturn; 65 } 66 } 67} 68 69 70 71[CreateAssetMenu(menuName = "Datas/item")] 72 73[System.Serializable] 74public class AssetData : ScriptableObject 75{ 76 public string id; 77 public string name_key; 78 public int type; 79 public Texture2D image; 80 public GameObject original; 81 /*AssetData(string _name, int _type, Texture2D _image, GameObject _original) 82 { 83 name = _name; 84 type = _type; 85 image = _image; 86 original = _original; 87 }*/ 88} 89[System.Serializable] 90public class Item 91{ 92 Item(int _count,AssetData _data) 93 { 94 data = _data; 95 count = _count; 96 } 97 public AssetData data; 98 public int count; 99}
あなたの回答
tips
プレビュー