/// <summary> /// 生成自动绑定代码 /// </summary> private void GenAutoBindCode() { GameObject go = m_Target.gameObject; string className = !string.IsNullOrEmpty(m_Target.ClassName) ? m_Target.ClassName : go.name; string codePath = !string.IsNullOrEmpty(m_Target.CodePath) ? m_Target.CodePath : m_Setting.CodePath; if (!Directory.Exists(codePath)) { Debug.LogError($"{go.name}的代码保存路径{codePath}无效"); } using (StreamWriter sw = new StreamWriter($"{codePath}/{className}.BindComponents.cs")) { sw.WriteLine("using UnityEngine;"); sw.WriteLine("using UnityEngine.UI;"); sw.WriteLine(""); sw.WriteLine("//自动生成于:" + DateTime.Now); if (!string.IsNullOrEmpty(m_Target.Namespace)) { //命名空间 sw.WriteLine("namespace " + m_Target.Namespace); sw.WriteLine("{"); sw.WriteLine(""); } //类名 sw.WriteLine($"\tpublic partial class {className}"); sw.WriteLine("\t{"); sw.WriteLine(""); //组件字段 foreach (BindData data in m_Target.BindDatas) { sw.WriteLine($"\t\tprivate {data.BindCom.GetType().Name} m_{data.Name};"); } sw.WriteLine(""); sw.WriteLine("\t\tprivate void GetBindComponents(GameObject go)"); sw.WriteLine("\t\t{"); //获取autoBindTool上的Component sw.WriteLine($"\t\t\tComponentAutoBindTool autoBindTool = go.GetComponent<ComponentAutoBindTool>();"); sw.WriteLine(""); //根据索引获取 for (int i = 0; i < m_Target.BindDatas.Count; i++) { BindData data = m_Target.BindDatas[i]; string filedName = $"m_{data.Name}"; sw.WriteLine($"\t\t\t{filedName} = autoBindTool.GetBindComponent<{data.BindCom.GetType().Name}>({i});"); } sw.WriteLine("\t\t}"); sw.WriteLine("\t}"); if (!string.IsNullOrEmpty(m_Target.Namespace)) { sw.WriteLine("}"); } } AssetDatabase.Refresh(); EditorUtility.DisplayDialog("提示", "代码生成完毕", "OK"); }
/// <summary> /// 生成自动绑定代码 /// </summary> private void GenAutoBindCode() { GameObject go = m_Target.gameObject; string className = !string.IsNullOrEmpty(m_Target.ClassName) ? m_Target.ClassName : go.name; string codePath = !string.IsNullOrEmpty(m_Target.CodePath) ? m_Target.CodePath : m_Setting.CodePath; if (!Directory.Exists(codePath)) { Debug.LogError(go.name + "的代码保存路径" + codePath + "无效"); } codePath = codePath + "/" + className + ".BindComponents.cs"; using (StreamWriter sw = new StreamWriter(codePath)) { sw.WriteLine("using UnityEngine;"); sw.WriteLine("using UnityEngine.UI;"); sw.WriteLine(""); sw.WriteLine("//自动生成于:" + DateTime.Now); if (!string.IsNullOrEmpty(m_Target.Namespace)) { //命名空间 sw.WriteLine("namespace " + m_Target.Namespace); sw.WriteLine("{"); sw.WriteLine(""); } //类名 sw.WriteLine("\tpublic partial class " + className); sw.WriteLine("\t{"); sw.WriteLine(""); //组件字段 foreach (BindData data in m_Target.BindDatas) { string dataBindCom = "\t\tprivate " + data.BindCom.GetType().Name + " m_" + data.Name + ";"; sw.WriteLine(dataBindCom); } sw.WriteLine(""); sw.WriteLine("\t\tprivate void GetBindComponents(GameObject go)"); sw.WriteLine("\t\t{"); //获取autoBindTool上的Component sw.WriteLine("\t\t\tComponentAutoBindTool autoBindTool = go.GetComponent<ComponentAutoBindTool>();"); sw.WriteLine(""); //根据索引获取 for (int i = 0; i < m_Target.BindDatas.Count; i++) { BindData data = m_Target.BindDatas[i]; string filedName = "m_" + data.Name; string filedNameformat = string.Format("\t\t\t{0} = autoBindTool.GetBindComponent<{1}>({2});", filedName, data.BindCom.GetType().Name, i); sw.WriteLine(filedNameformat); } sw.WriteLine("\t\t}"); sw.WriteLine("\t}"); if (!string.IsNullOrEmpty(m_Target.Namespace)) { sw.WriteLine("}"); } } AssetDatabase.Refresh(); EditorUtility.DisplayDialog("提示", "代码生成完毕", "OK"); }