UIMgr
public class UIMgr : Singleton<UIMgr>
{
static string path = Application.dataPath + "/Editor/UI/UIConfig.json";
public List<UIJsonInfo> infos = new List<UIJsonInfo>();
public GameObject OpenDialog(UIDialogType type, Transform parent, Vector3 localPosition, Vector3 localScale)
{
UIJsonInfo info;
info = ReadJsonInfo(UIDialogType.Test);
GameObject obj;
Debug.LogError("path = " + info.PrefabPath);
obj = ResourcesMgr.GetInstance().ResInstantiate(info.PrefabPath);
if(obj != null)
{
obj.transform.parent = parent;
obj.transform.localPosition = localPosition;
obj.transform.localScale = localScale;
}
else
Debug.LogError("obj is null");
return obj;
}
public UIJsonInfo ReadJsonInfo(UIDialogType type)
{
if(infos == null)
infos = new List<UIJsonInfo>();
if(infos.Count <= 0)
JsonMgr.GetInstance().ReadJson<UIJsonInfo>(path,ref infos);
for (int i = 0; i < infos.Count; i++)
{
UIJsonInfo jsonInfo = infos[i];
if(jsonInfo.DialogType == type)
{
return jsonInfo;
}
}
return null;
}
public void CloseDialog(UIDialogType type)
{
UIJsonInfo info = ReadJsonInfo(type);
GameObject uiPrefab = GameObject.Find(info.Name + "(Clone)");
GameObject.Destroy(uiPrefab);
}
}
读取文件
public class LoadFile
{
public static string ReadFile(string path)
{
string str = "";
try
{
using (StreamReader fileReader = new StreamReader(path))
{
str = fileReader.ReadToEnd();
fileReader.Dispose();
fileReader.Close();
}
}
catch (Exception e)
{
Debug.LogWarning("[LoadFile] read exception: " + e.Message + ", StackTrace: " + e.StackTrace);
throw;
}
return str;
}
}
json序列化、反序列化
// 需要导入dll
//[Newtonsoft.Json](https://github.com/SaladLab/Json.Net.Unity3D/releases)
public class JsonMgr:Singleton<JsonMgr>
{
public void ReadJson<T>(string path, ref List<T> infos)
{
string jsonStr = LoadFile.ReadFile(path);
infos = JsonConvert.DeserializeObject<List<T>>(jsonStr);
}
}
Unity ResourcesMgr
public class ResourcesMgr : Singleton<ResourcesMgr>
{
public T ResLoad<T>(string path) where T : Object
{
if(path == null)
{
Debug.LogWarning("LoadAssetAtPath is null");
return null;
}
T obj = AssetDatabase.LoadAssetAtPath<T>(path);
return obj;
}
public GameObject ResInstantiate(string path)
{
GameObject obj = ResLoad<GameObject>(path);
obj = GameObject.Instantiate(obj);
return obj;
}
}
示例:
json:
[
{
“PrefabPath”: “Assets/Resources/Prefab/Cube.prefab”,
“DialogType”: “1”,
“Name”:“Cube”,
“Depth”: 10
}
]
脚本:
public enum UIDialogType
{
None,
Test
}
public class test : MonoBehaviour
{
// Use this for initialization
public Button btn;
public Button btn1;
public Transform a;
void Start()
{
btn.onClick.AddListener(Test);
btn1.onClick.AddListener(Test1);
}
// Update is called once per frame
void Update()
{
}
void Test()
{
GameObject uiPrefab;
uiPrefab = UIMgr.GetInstance().OpenDialog(UIDialogType.Test, GameObject.Find("UIRoot").transform, Vector3.zero, Vector3.one);
uiPrefab.transform.localPosition = new Vector3(10, 10, 0);
}
void Test1()
{
UIMgr.GetInstance().CloseDialog(UIDialogType.Test);
}
}