前提・実現したいこと
ゲーム内で使用するデータをtsvで管理し、
UnityのScriptedImporterを使用して、インスペクタ上で確認できるようにしようと考えています。
ですが、生成したScriptableObjectの変数が、なぜか空になるようです。
理由と解決策をご存知の方がいれば、ご教授いただけると幸いです。
ソースコード
ScriptedImporter, ScriptableObject, Editorは、以下のように実装しています。
TSVの行ごとにScriptableObjectが生成され、先頭行は見出しとして使用するイメージです。
TSVObject
1using System.Collections.Generic; 2using UnityEngine; 3 4public class TSVObject : ScriptableObject { 5 public Dictionary<(int, string), string> data = new Dictionary<(int, string), string>(); 6}
TSVEditor
1using UnityEditor; 2using UnityEditor.Experimental.AssetImporters; 3 4[CustomEditor(typeof(TSVObject))] 5public class TSVEditor : ScriptedImporterEditor { 6 7 public override void OnInspectorGUI() { 8 base.OnInspectorGUI(); 9 10 serializedObject.Update(); 11 12 var data = target as TSVObject; 13 14 foreach (var key in data.data.Keys) { 15 EditorGUILayout.LabelField(key.Item2); 16 } 17 18 serializedObject.ApplyModifiedProperties(); 19 } 20}
TSVImporter
1using System.Collections.Generic; 2using UnityEngine; 3using UnityEditor.Experimental.AssetImporters; 4using System.IO; 5using System.Linq; 6 7[ScriptedImporter(1, "tsv")] 8public class TSVImporter : ScriptedImporter { 9 10 public override void OnImportAsset(AssetImportContext ctx) { 11 12 // ファイルを全行読み込み 13 var lines = new List<List<string>>(); 14 using (var stream = new StreamReader(ctx.assetPath, System.Text.Encoding.GetEncoding("shift_jis"))) { 15 while (stream.Peek() > -1) { 16 var line = stream.ReadLine().Split('\t').ToList(); 17 lines.Add(line); 18 } 19 } 20 21 // 読み込んだデータからScriptableObjectを作成 22 for (int id = 1; id < lines.Count; id++) { 23 24 var so = ScriptableObject.CreateInstance<TSVObject>(); 25 var heads = lines.First(); 26 var line = lines[id]; 27 28 for (int index = 0; index < heads.Count; index++) { 29 var head = heads[index]; 30 so.data.Add((id, head), line[index]); 31 } 32 33 so.name = "ID:" + id + "-" + so.data[(id, "名前")]; 34 ctx.AddObjectToAsset("ID:" + id + "-" + so.data[(id, "名前")], so); 35 36 } 37 38 } 39}
また、TSVファイルは以下の通りです。
ID 名前 説明文 1 回復薬 体力を回復します。 2 蘇生薬 戦闘不能を回復します。
試したこと
ctx.AddObjectToAsset呼び出し前後では、
生成したsoのdataのCountは、読みだしたデータが入っているようなのですが、
ゲーム実行時などで読み込むと、dataが空になっています。
以上、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/23 14:49
2018/10/24 02:21
退会済みユーザー
2018/10/25 13:31
退会済みユーザー
2018/10/25 13:32