public static void SetScriptableData(Type _type) { // string filePath = SystemSetting.GetAssetBundleListPath ()+"CSV.csv"; //プレハブにスクリプタブルオブジェクトを設置 UnityEngine.Object[] assets; string assetName = SystemSetting.GetAssetBundleDataFolder() + "AssetBundleDataAsset"; assets = Resources.LoadAll(assetName); AssetBundleData tmp = new AssetBundleData(); ScriptableObject sObject = null; foreach (UnityEngine.Object asset in assets) { if (asset is AssetBundleData) { tmp = (AssetBundleData)asset; sObject = (ScriptableObject)asset; } } List <AssetBundleData.Param> listData = GetListDataFromCSV(_type); tmp.list = listData; //最後に保存して変更を確定 EditorUtility.SetDirty(sObject); }
//プレハブを作ってスクリプタブルオブジェクトをアタッチするところまで. public static void CreateComponents(Type _type) { string name = "target"; string outputPath = SystemSetting.GetAssetBundleListPath() + "Prefab.prefab"; GameObject gameObject = EditorUtility.CreateGameObjectWithHideFlags( name, HideFlags.HideInHierarchy, typeof(AssetBundleDataHolder) ); //プレハブにスクリプタブルオブジェクトを設置 UnityEngine.Object[] assets; string assetName = SystemSetting.GetAssetBundleDataFolder() + "AssetBundleDataAsset"; assets = Resources.LoadAll(assetName); Debug.LogWarning("GetObj :" + assetName.ToString()); AssetBundleData tmp = new AssetBundleData(); foreach (UnityEngine.Object asset in assets) { if (asset is AssetBundleData) { tmp = (AssetBundleData)asset; } } AssetBundleDataHolder holder = gameObject.GetComponent <AssetBundleDataHolder> (); holder.assetBundleData = tmp; SetScriptableData(typeof(AssetBundleData)); PrefabUtility.CreatePrefab(outputPath, gameObject, ReplacePrefabOptions.ReplaceNameBased); Editor.DestroyImmediate(gameObject); }
public static List <AssetBundleData.Param> GetListDataFromCSV(Type _dataType) { string filePath = SystemSetting.GetAssetBundleDataFolder() + _dataType.Name + ""; //string filePath = SystemSetting.GetResourcesCSVFilePath() + _dataType.Name + "CSV"; TextAsset csv = (TextAsset)Resources.Load(filePath, typeof(TextAsset)) as TextAsset; FieldInfo[] fieldInfoList = CSMaker.GetFieldInfo(typeof(AssetBundleData.Param)); List <string> memberNameList = CSMaker.GetMemberList(typeof(AssetBundleData.Param)); List <AssetBundleData.Param> listData = new List <AssetBundleData.Param>(); StringReader reader = new StringReader(csv.text); Type curType = typeof(AssetBundleData.Param); Debug.LogWarning("DataSet :" + csv); int rowNum = -1; while (reader.Peek() > -1) { AssetBundleData.Param lineData = new AssetBundleData.Param(); int columnCount = 0; string line = reader.ReadLine(); string[] values = line.Split(','); rowNum++; //0行はタイトルなので飛ばす if (rowNum == 0) { continue; } foreach (string item in values) { string columnType = memberNameList[columnCount]; FieldInfo memberFieldInfo = fieldInfoList[columnCount]; Debug.LogWarning("columnType :" + columnType.ToString()); Debug.LogWarning("Field :" + memberFieldInfo.FieldType.ToString()); if (memberFieldInfo.FieldType.ToString() == "System.Int32") { int setNumber = int.Parse(item); curType.InvokeMember(columnType, BindingFlags.SetField, null, lineData, new object[] { setNumber }); } else if (memberFieldInfo.FieldType.ToString() == "System.Single") { float setNumber = float.Parse(item); curType.InvokeMember(columnType, BindingFlags.SetField, null, lineData, new object[] { setNumber }); } else if (memberFieldInfo.FieldType.ToString() == "System.String") { string setString = item.Substring(1, item.Length - 2); curType.InvokeMember(columnType, BindingFlags.SetField, null, lineData, new object[] { setString }); } else if (memberFieldInfo.FieldType.ToString() == "System.Boolean") { if (item == "1") { curType.InvokeMember(columnType, BindingFlags.SetField, null, lineData, new object[] { true }); } else { curType.InvokeMember(columnType, BindingFlags.SetField, null, lineData, new object[] { false }); } } else { Debug.LogError("データ定義に異常があります!!!!!!!" + memberFieldInfo.FieldType); //異常なデータは出力してはいけないので強制停止 break; } columnCount++; } listData.Add(lineData); } return(listData); }