Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using UnityEditor;
- using UnityEngine;
- public static class ManagerListObject
- {
- /* Dossier a créer
- * --> Asset/Resources/ScriptObjects/Objects
- */
- /* Attention faut mettre MyObjectData dans un autre fichier Cs si non unity pas CONTENT ! */
- [CreateAssetMenu(fileName = "MyObject", menuName = "ScriptableObjects/MyObject", order = 1)]
- public class MyObjectData : ScriptableObject
- {
- public string text_name;
- public TypeObject type;
- }
- public enum TypeObject
- {
- None = -1,
- Player = 0,
- Enemy = 1,
- Bullet = 2,
- Item = 3,
- Effect = 4,
- UI = 5,
- Max = 6,
- }
- #if UNITY_EDITOR
- [CustomEditor(typeof(MyObjectData))]
- public class MyObjectDataEditor : Editor
- {
- public override void OnInspectorGUI()
- {
- base.OnInspectorGUI();
- MyObjectData myObjectData = (MyObjectData)target;
- if (GUILayout.Button("Save"))
- {
- string assetPath = AssetDatabase.GetAssetPath(myObjectData.GetInstanceID());
- AssetDatabase.RenameAsset(assetPath, $"{myObjectData.text_name}_{(int)myObjectData.type}");
- AssetDatabase.SaveAssets();
- AssetDatabase.Refresh();
- }
- if (GUILayout.Button("Build"))
- {
- ManagerListObject.Build();
- Debug.Log(ManagerListObject.FindOne<ScriptableObject>(new FilterData { name = "TEST" }));
- }
- }
- }
- #endif
- public struct FilterData
- {
- public string name;
- public TypeObject type;
- public FilterData(string name = "", TypeObject type = TypeObject.None)
- {
- this.name = name;
- this.type = type;
- }
- }
- [System.Serializable]
- public struct MetaData
- {
- public string header;
- public string name;
- public TypeObject Type;
- }
- [System.Serializable]
- public struct MetaDatas
- {
- public MetaData[] metaDatas;
- }
- #if UNITY_EDITOR
- public static void Build()
- {
- try
- {
- string[] files = Directory.GetFiles($"{Application.dataPath}/Resources/ScriptObjects/Objects");
- List<MetaData> _metaDatas = new ();
- for (int i = 0; i < files.Length; i++)
- {
- FileInfo fileInfo = new FileInfo(files[i]);
- if (fileInfo.Extension == ".asset")
- {
- string name = fileInfo.Name.Replace(fileInfo.Extension, "");
- string[] _metaData = name.Split("_");
- MetaData data = new MetaData
- {
- header = name,
- name = _metaData[0],
- Type = (TypeObject)int.Parse(_metaData[1]),
- };
- _metaDatas.Add(data);
- }
- }
- string metaDatas_json = JsonUtility.ToJson(new MetaDatas { metaDatas = _metaDatas.ToArray() });
- File.WriteAllText($"{Application.dataPath}/Resources/ScriptObjects/Objects.json", metaDatas_json);
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- }
- #endif
- public static T FindOne<T>(FilterData filterData) where T : ScriptableObject
- {
- TextAsset textAsset = Resources.Load<TextAsset>("ScriptObjects/Objects");
- MetaDatas metaDatas = JsonUtility.FromJson<MetaDatas>(textAsset.text);
- for (int i = 0; i < metaDatas.metaDatas.Length; i++)
- {
- bool filterOk = false;
- if (filterData.type != TypeObject.None)
- if (metaDatas.metaDatas[i].Type == filterData.type)
- filterOk = true;
- if (filterData.name != string.Empty)
- if (metaDatas.metaDatas[i].name == filterData.name)
- filterOk = true;
- if (filterOk)
- return Resources.Load<T>($"ScriptObjects/Objects/{metaDatas.metaDatas[i].header}");
- }
- return Resources.Load<T>("ScriptObjects/Objects/");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment