UI界面管理(Open、Close)

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);

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值