public static void CreateAsset(DataTable table) { if (!Enter(table)) { return; } if (CreateCSharp(table)) { Debug.LogError("Create Scripte! Please Try Again!!!"); return; } try { string script = string.Format("Data{0}", table.TableName); string path = string.Format("Assets/Package/Data/{0}.asset", script); Assembly assembly = typeof(DataBase).Assembly; Type TA = assembly.GetType(string.Format("Data.Data{0}", table.TableName)); if (File.Exists(path)) { File.Delete(path); } ScriptableObject asset = ScriptableObject.CreateInstance(script); asset.name = script; Type TI = assembly.GetType(string.Format("Data.{0}Information", table.TableName)); object list = TI.GenerateCollection(); for (int i = 2; i < row; i++) { object target = Activator.CreateInstance(TI); for (int j = 0; j < column; j++) { var field = TI.GetField(table.Rows[0][j].ToString(), BindingFlags.Instance | BindingFlags.Public); object value; switch (table.Rows[1][j].ToString()) { case "int[]": { if (!table.Rows[i][j].ToString().TryParseArrayInt(out int[] array_int)) { } value = array_int; } break; case "float[]": { if (!table.Rows[i][j].ToString().TryParseArrayFloat(out float[] array_float)) { } value = array_float; } break; case "DateTime": { if (!table.Rows[i][j].ToString().TryParseDateTime(out DateTime time)) { } value = time; } break; default: value = Convert.ChangeType(table.Rows[i][j], field.FieldType); break; } field.SetValue(target, value); } list.Call("Add", new object[] { target }); } asset.SetMember("list", list); AssetDatabase.CreateAsset(asset, path); AssetDatabase.Refresh(); } catch (Exception e) { Debuger.LogException(Author.Data, e); } }