Unity框架之Editor通用脚本

Unity框架之Editor通用脚本

通用脚本 CommonWindows

public class CommonWindows
{
	public const string Tools = "Tools";
	/// <summary>
	///	读取数据
	/// </summary>
	public static T ReadDate<T>() where T : BaseDate, new()
	{
		string path = typeof(T).Name;
		T date = null;
		var dataPath = System.IO.Path.GetFullPath(".");
		dataPath = dataPath.Replace("\\", "/");
		dataPath += "/Library/Tools/Tools_" + path + ".dat";
		//读取数据
		if (File.Exists(dataPath))
		{
			BinaryFormatter bf = new BinaryFormatter();
			FileStream file = File.OpenRead(dataPath);
			try
			{
				date = bf.Deserialize(file) as T;
				file.Close();
			}
			catch
			{
				file.Close();
				Debug.LogError("Read dat error on path :" + dataPath);
				File.Delete(dataPath);
			}
		}
		if (date == null)
		{
			date = new T();
			date.Init();
		}
		return date;
	}
	/// <summary>
	/// 存储数据
	/// </summary>
	public static void SaveDate<T>(T date) where T : BaseDate, new()
	{
		string path = typeof(T).Name;
		var dataPath = System.IO.Path.GetFullPath(".");
		dataPath = dataPath.Replace("\\", "/");
		dataPath += "/Library/Tools/Tools_" + path + ".dat";
		//判断文件是否存在
		if (!File.Exists(dataPath))
		{
			if (!Directory.Exists(Path.GetDirectoryName(dataPath)))
			{
				Directory.CreateDirectory(Path.GetDirectoryName(dataPath));
			}
		}
		//存储数据
		BinaryFormatter bf = new BinaryFormatter();
		FileStream file = File.OpenWrite(dataPath);
		try
		{
			bf.Serialize(file, date);
			file.Close();
		}
		catch
		{
			file.Close();
			Debug.LogError("Save dat error on path :" + dataPath);
		}
	}
	/// <summary>
	/// 获取文件信息
	/// </summary>
	/// <param name="directory">文件夹路径</param>
	/// <param name="varExtension">特定文件后缀名</param>
	/// <returns></returns>
	public static FileInfo[] ReadFile(DirectoryInfo directory, params string[] varExtension)
	{
		List<FileInfo> TempFiles = new List<FileInfo>();
		FileInfo[] files = directory.GetFiles();
		if (varExtension != null && files != null)
        {
        	for (int j = 0; j < files.Length; j++)
        	{
        		var tempfile = files[j];
        		if (varExtension.Contains(tempfile.Extension))
        		{
        			TempFiles.Add(tempfile);
        		}
        	}
        }
        else if(files != null)
        {
        	TempFiles.AddRange(files);
        }
        if (directory.GetDirectories() != null)
        {
        	DirectoryInfo[] directories = directory.GetDirectories();
        	for (int i = 0; i < directories.Length; i++)
        	{
        		var tempfiles = ReadFile(directories[i], varExtension);
        		if (tempfiles != null)
        			TempFiles.AddRange(tempfiles);
        		//刷新进度避免卡死
        		EditorUtility.DisplayProgressBar("Read load file", directory.FullName, (i * 1.0f) / directories.Length);
        	}
        }
        return TempFiles.ToArray();
	}
	/// <summary>
	/// 获取文件信息
	/// </summary>
	/// <param name="directory">文件夹路径</param>
	/// <param name="varExtension">忽略文件后缀名</param>
	/// <returns></returns>
	public static FileInfo[] ReadFileExtension(DirectoryInfo directory, params string[] varExtension)
	{
		List<FileInfo> TempFiles = new List<FileInfo>();
		FileInfo[] files = directory.GetFiles();
		if (varExtension != null && files != null)
        {
        	for (int j = 0; j < files.Length; j++)
        	{
        		var tempfile = files[j];
        		if (!varExtension.Contains(tempfile.Extension))
        		{
        			TempFiles.Add(tempfile);
        		}
        	}
        }
        else if(files != null)
        {
        	TempFiles.AddRange(files);
        }
        if (directory.GetDirectories() != null)
        {
        	DirectoryInfo[] directories = directory.GetDirectories();
        	for (int i = 0; i < directories.Length; i++)
        	{
        		var tempfiles = ReadFileExtension(directories[i], varExtension);
        		if (tempfiles != null)
        			TempFiles.AddRange(tempfiles);
        		//刷新进度避免卡死
        		EditorUtility.DisplayProgressBar("Read load file", directory.FullName, (i * 1.0f) / directories.Length);
        	}
        }
        return TempFiles.ToArray();
	}
	/// <summary>
	/// 设置进度显示
	/// </summary>
	public static void DisplayProgressBar(string varTitle, string varContent, float varProgress)
	{
		EditorUtility.DisplayProgressBar(varTitle, varContent, varProgress);
		if (varProgress >= 1)
		{
			EditorUtility.ClearProgressBar();
		}
	}
}
//必须添加System.Serializable的属性否则无法进行反射
[System.Serializable]
public class BaseDate
{
	public virtual void Init()
	{
	}
}

通用脚本 CommonUI

public class CommonUI
{
	public const float Tools_barPadding = 15f;
	public const float Tools_Buttonspacing = 5f;
	
	public static string GUI_SelectDirectory(string varPath, string varTitle)
	{
		EditorGUILayout.BeginHorizontal();
		varPath = EditorGUILayout.TextField(varTitle, varPath);
		if (GUILayout.Button("Choose..", GUILayout.Width(100)))
		{
			varPath = EditorUtility.OpenFolderPanel("选择文件夹", varPath, "");
		}
		if (GUILayout.Button("Open File", GUILayout.Width(100)))
		{
			if (!Directory.Exists(varPath))
			{
				Directory.CreateDirectory(varPath);
			}
			Application.OpenURL(varPath);
		}
		EditorGUILayout.EndHorizontal();
		return varPath;
	}
	public static string GUI_SelectFilePanel(string varPath, string varTitle, string extension)
	{
		EditorGUILayout.BeginHorizontal();
		varPath = EditorGUILayout.TextField(varTitle, varPath);
		if (GUILayout.Button("Choose..", GUILayout.Width(100)))
		{
			varPath = EditorUtility.OpenFilePanel("选择文件", varPath, extension);
		}
		if (GUILayout.Button("Open File", GUILayout.Width(100)))
		{
			string tempDirectory = Path.GetDirectoryName(varPath);
			if (!Directory.Exists(tempDirectory))
			{
				Directory.CreateDirectory(tempDirectory);
			}
			Application.OpenURL(tempDirectory);
		}
		EditorGUILayout.EndHorizontal();
		return varPath;
	}
	public static bool GUI_Button(string varTitle)
	{
		if (GUILayout.Button(varTitle))
		{
			return true;
		}
		return false;
	}
	public static bool GUI_Button(string varTitle, float varwidth)
	{
		if (GUILayout.Button(varTitle, GUILayout.Width(varwidth)))
		{
			return true;
		}
		return false;
	}
	/// <summary>
	/// 枚举按钮
	/// 
	///     15px的边距
	/// </summary>
	/// <typeparam name="T">枚举类型</typeparam>
	/// <param name="varEnum">枚举值</param>
	/// <param name="width">总宽度</param>
	/// <param name="options">按钮属性</param>
	/// <returns></returns>
	public static bool EnumButton<T>(ref T varEnum, /*float width, */params GUILayoutOption[] options)
	{
		EditorGUILayout.BeginHorizontal();
		GUILayout.FlexibleSpace();
		string[] tringname = System.Enum.GetNames(varEnum.GetType());
		int count = tringname.Length;
		//float bottonwidth = (width - Tools_barPadding * 2 - Tools_Buttonspacing * (count - 1)) / count;
		GUILayout.Space(Tools_barPadding);
		for (int i = 0; i < count; i++)
		{
			string tempName = tringname[i];
			if (GUILayout.Button(tempName, options))
			{
				object temp = (System.Enum.Parse(varEnum.GetType(), tempName));
				varEnum = (T)temp;
				return true;
			}
		}
		GUILayout.FlexibleSpace();
		EditorGUILayout.EndHorizontal();
		return false;
	}
    /// <summary>
    /// 居中按钮
    /// </summary>
    /// <param name="text">按钮文字</param>
    /// <param name="options">按钮属性</param>
    /// <returns></returns>
    public static bool CenterButton(string text, params GUILayoutOption[] options)
    {
        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        if (GUILayout.Button(text, options))
        {
            return true;
        }
        GUILayout.FlexibleSpace();
        GUILayout.EndHorizontal();
        return false;
    }
    /// <summary>
    /// 居中按钮
    /// </summary>
    /// <param name="text"></param>
    /// <param name="width">单宽度</param>
    /// <param name="index"></param>
    /// <param name="options">按钮属性</param>
    /// <returns></returns>
    public static bool CenterButton(string[] text, out int index, params GUILayoutOption[] options)
    {
    	index = 0;
        bool onclick = false;
        EditorGUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        string[] tringname = text;
        int count = tringname.Length;
        
        GUILayout.Space(Tools_barPadding);
        for (int i = 0; i < count; i++)
        {
            string tempName = tringname[i];
            if (GUILayout.Button(tempName, options))
            {
                index = i;
                onclick = true;
            }
        }
        GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal();
        return onclick;
    }
    /// <summary>
    /// 居中文字
    /// </summary>
    /// <param name="text"></param>
    /// <param name="options"></param>
    public static void CenterLabel(string text, params GUILayoutOption[] options)
    {
        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        GUILayout.Label(text, options);
        GUILayout.FlexibleSpace();
        GUILayout.EndHorizontal();
    }
    public static void CenterText(ref string[] text, params GUILayoutOption[] options)
    {
        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        for (int i = 0; i < text.Length; i++)
        {
            text[i] = GUILayout.TextField(text[i], options);
        }
        GUILayout.FlexibleSpace();
        GUILayout.EndHorizontal();
    }
    public static void LeftText(ref string[] text, params GUILayoutOption[] options)
    {
        if (text == null)
            return;
        GUILayout.BeginHorizontal();
        for (int i = 0; i < text.Length; i++)
        {
            text[i] = GUILayout.TextArea(text[i], options);
        }
        GUILayout.FlexibleSpace();
        GUILayout.EndHorizontal();
    }
    /// <summary>
    /// 右对齐按钮
    /// </summary>
    /// <param name="text"></param>
    /// <param name="options"></param>
    /// <returns></returns>
    public static bool RightButton(string text, params GUILayoutOption[] options)
    {
        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        if (GUILayout.Button(text, options))
        {
            return true;
        }
        GUILayout.EndHorizontal();
        return false;
    }
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值