private void RefreshTypeNames() { m_CurrentHotFormInfos = new List <HotFormInfo>(); for (int i = 0; i < m_HotFormInfos.arraySize; i++) { HotFormInfo iLFormInfo = new HotFormInfo(); iLFormInfo.Name = m_HotFormInfos.GetArrayElementAtIndex(i).FindPropertyRelative("m_Name").stringValue; iLFormInfo.TransformName = m_HotFormInfos.GetArrayElementAtIndex(i).FindPropertyRelative("m_TransformName").stringValue; iLFormInfo.HotAttributeType = (HotAttributeType)m_HotFormInfos.GetArrayElementAtIndex(i).FindPropertyRelative("m_HotAttributeType").enumValueIndex; iLFormInfo.Trans = (Transform)m_HotFormInfos.GetArrayElementAtIndex(i).FindPropertyRelative("m_Transform").objectReferenceValue; m_CurrentHotFormInfos.Add(iLFormInfo); } }
private void AddItem() { bool invalid = true; string errorMseeage = string.Empty; HotFormInfo hotFormInfo = new HotFormInfo(); if (m_AddTransform == null) { invalid = false; errorMseeage = "Add transform is invalid!"; } else { string transname = m_AddTransform.name; for (int i = 0; i < m_CurrentHotFormInfos.Count; i++) { if (transname == m_CurrentHotFormInfos[i].TransformName) { errorMseeage = "Transform name is already exist!"; invalid = false; break; } } if (invalid) { hotFormInfo.TransformName = transname; hotFormInfo.Trans = m_AddTransform; if (m_AddTransform.GetComponent <Dropdown>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.Dropdown; } else if (m_AddTransform.GetComponent <InputField>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.InputField; } else if (m_AddTransform.GetComponent <Mask>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.Mask; } else if (m_AddTransform.GetComponent <Toggle>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.Toggle; } else if (m_AddTransform.GetComponent <ScrollRect>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.ScrollRect; } else if (m_AddTransform.GetComponent <Scrollbar>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.Scrollbar; } else if (m_AddTransform.GetComponent <Slider>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.Slider; } else if (m_AddTransform.GetComponent <LocalizationText>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.LocalizationText; } else if (m_AddTransform.GetComponent <LocalizationImage>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.LocalizationImage; } else if (m_AddTransform.GetComponent <Button>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.Button; } else if (m_AddTransform.GetComponent <RawImage>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.RawImage; } else if (m_AddTransform.GetComponent <Image>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.Image; } else if (m_AddTransform.GetComponent <Text>() != null) { hotFormInfo.HotAttributeType = HotAttributeType.Text; } else { hotFormInfo.HotAttributeType = HotAttributeType.Unknow; } } } if (invalid) { m_CurrentHotFormInfos.Add(hotFormInfo); DrawAllHotFormInfo(); m_AddTransform = null; } else { Error(errorMseeage); } }
private void DrawILFormInfo(HotFormInfo iLFormInfo, int id) { GUILayout.BeginHorizontal("box"); { if (GUILayout.Button("", "ToggleMixed", GUILayout.Width(20f), GUILayout.Height(16f))) { remove = true; removeId = id; } GUILayout.BeginVertical("box"); { string oldname = iLFormInfo.Name; iLFormInfo.Name = EditorGUILayout.TextField(iLFormInfo.Name, GUILayout.MinWidth(30f), GUILayout.MaxWidth(150f)); if (oldname != iLFormInfo.Name) { change = true; } } GUILayout.EndVertical(); GUILayout.BeginVertical("box"); { string newtransname = EditorGUILayout.TextField(iLFormInfo.TransformName, GUILayout.MinWidth(30f), GUILayout.MaxWidth(150f)); if (newtransname != iLFormInfo.TransformName) { bool nameinvalid = true; for (int i = 0; i < m_CurrentHotFormInfos.Count; i++) { if (newtransname == m_CurrentHotFormInfos[i].TransformName) { nameinvalid = false; break; } } if (nameinvalid) { iLFormInfo.TransformName = newtransname; change = true; } else { Error("Transform name is already exist!"); } } } GUILayout.EndVertical(); GUILayout.BeginVertical("box"); { Transform oldtransform = iLFormInfo.Trans; iLFormInfo.Trans = (Transform)EditorGUILayout.ObjectField(iLFormInfo.Trans, typeof(Transform), true, GUILayout.MinWidth(40f)); if (oldtransform != iLFormInfo.Trans) { change = true; } } GUILayout.EndVertical(); GUILayout.BeginVertical("box"); { HotAttributeType oldhotAttributeType = iLFormInfo.HotAttributeType; iLFormInfo.HotAttributeType = (HotAttributeType)EditorGUILayout.EnumPopup(iLFormInfo.HotAttributeType, GUILayout.MinWidth(70f)); if (oldhotAttributeType != iLFormInfo.HotAttributeType) { change = true; } } GUILayout.EndVertical(); } GUILayout.EndHorizontal(); }
static void CreateTempUIForm() { if (Selection.transforms.Length == 0) { return; } Transform trans = Selection.transforms[0]; HotfixForm hotfixForm = trans.GetComponent <HotfixForm>(); if (hotfixForm == null) { Debug.LogError("该UI上没有HotfixForm脚本"); return; } string viewName = trans.gameObject.name; HotFormInfo[] hotFormInfos = hotfixForm.HotFormInfos; int len = hotFormInfos.Length; StringBuilder sbr = new StringBuilder(); sbr.Append("using UnityEngine;\r\n"); sbr.Append("using UnityEngine.UI;\r\n"); sbr.Append("using ZJY.Framework;\r\n"); sbr.Append("\r\n"); sbr.Append("namespace Hotfix\r\n"); sbr.Append("{\r\n"); sbr.AppendFormat(" public class {0}View : HotUIForm\r\n", viewName); sbr.Append(" {\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 窗口控制器\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.AppendFormat(" private {0}Ctrl m_{0}Ctrl;\r\n", viewName); sbr.Append("\r\n"); sbr.Append(" #region 组件\r\n"); for (int i = 0; i < len; i++) { HotFormInfo hotFormInfo = hotFormInfos[i]; sbr.Append(" /// <summary>\r\n"); sbr.AppendFormat(" /// {0}\r\n", hotFormInfo.Name); sbr.Append(" /// </summary>\r\n"); if (hotFormInfo.HotAttributeType == HotAttributeType.Unknow) { sbr.AppendFormat(" public {0} {1}\r\n", "Transform", hotFormInfo.Trans.name); } else { sbr.AppendFormat(" public {0} {1}\r\n", hotFormInfo.HotAttributeType.ToString(), hotFormInfo.Trans.name); } sbr.Append(" {\r\n"); sbr.Append(" get;\r\n"); sbr.Append(" private set;\r\n"); sbr.Append(" }\r\n"); sbr.Append("\r\n"); } sbr.Append(" #endregion\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面初始化\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"uiForm\">真正的UI窗口</param>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public override void OnInit(HotfixForm uiForm, object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" base.OnInit(uiForm, userData);\r\n"); for (int i = 0; i < len; i++) { HotFormInfo hotFormInfo = hotFormInfos[i]; if (hotFormInfo.HotAttributeType == HotAttributeType.Unknow) { sbr.AppendFormat(" {0} = uiForm.GetTransType({1}) as {2};\r\n", hotFormInfo.TransformName.ToString(), i.ToString(), "Transform"); } else { sbr.AppendFormat(" {0} = uiForm.GetTransType({1}) as {2};\r\n", hotFormInfo.TransformName.ToString(), i.ToString(), hotFormInfo.HotAttributeType.ToString()); } } sbr.AppendFormat(" m_{0}Ctrl = new {0}Ctrl();\r\n", viewName); sbr.AppendFormat(" m_{0}Ctrl.OnInit(this, userData);\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面打开\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public override void OnOpen(object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" base.OnOpen(userData);\r\n"); sbr.AppendFormat(" m_{0}Ctrl.OnOpen(userData);\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面关闭\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public override void OnClose(object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" base.OnClose(userData);\r\n"); sbr.AppendFormat(" m_{0}Ctrl.OnClose(userData);\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面暂停\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" public override void OnPause()\r\n"); sbr.Append(" {\r\n"); sbr.Append(" base.OnPause();\r\n"); sbr.AppendFormat(" m_{0}Ctrl.OnPause();\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面暂停恢复\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public override void OnResume(object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" base.OnResume(userData);\r\n"); sbr.AppendFormat(" m_{0}Ctrl.OnResume(userData);\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面遮挡\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public override void OnCover(object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" base.OnCover(userData);\r\n"); sbr.AppendFormat(" m_{0}Ctrl.OnCover(userData);\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面遮挡恢复\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" public override void OnReveal()\r\n"); sbr.Append(" {\r\n"); sbr.Append(" base.OnReveal();\r\n"); sbr.AppendFormat(" m_{0}Ctrl.OnReveal();\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面激活\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public override void OnRefocus(object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" base.OnRefocus(userData);\r\n"); sbr.AppendFormat(" m_{0}Ctrl.OnRefocus(userData);\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面轮询\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"deltaTime\">逻辑流逝时间,以秒为单位</param>\r\n"); sbr.Append(" /// <param name=\"unscaledDeltaTime\">真实流逝时间,以秒为单位</param>\r\n"); sbr.Append(" public override void OnUpdate(float deltaTime, float unscaledDeltaTime)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" base.OnUpdate(deltaTime, unscaledDeltaTime);\r\n"); sbr.AppendFormat(" m_{0}Ctrl.OnUpdate(deltaTime, unscaledDeltaTime);\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面深度改变\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"uiGroupDepth\">界面组深度</param>\r\n"); sbr.Append(" /// <param name=\"depthInUIGroup\">界面在界面组中的深度</param>\r\n"); sbr.Append(" public override void OnDepthChanged(int uiGroupDepth, int depthInUIGroup)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" base.OnDepthChanged(uiGroupDepth, depthInUIGroup);\r\n"); sbr.AppendFormat(" m_{0}Ctrl.OnDepthChanged(uiGroupDepth, depthInUIGroup);\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append(" }\r\n"); sbr.Append("}\r\n"); string viewpath = Application.dataPath + "/../Hotfix/Module/UI/Temp/" + viewName + "View.cs"; using (FileStream fs = new FileStream(viewpath, FileMode.Create)) { using (StreamWriter sw = new StreamWriter(fs)) { sw.Write(sbr.ToString()); } } sbr.Length = 0; sbr.Append("using UnityEngine;\r\n"); sbr.Append("using UnityEngine.UI;\r\n"); sbr.Append("using ZJY.Framework;\r\n"); sbr.Append("\r\n"); sbr.Append("namespace Hotfix\r\n"); sbr.Append("{\r\n"); sbr.AppendFormat(" public class {0}Ctrl\r\n", viewName); sbr.Append(" {\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 控制的窗口\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.AppendFormat(" private {0}View m_{0}View;\r\n", viewName); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面初始化\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"view\">控制的窗口</param>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.AppendFormat(" public void OnInit({0}View view, object userData)\r\n", viewName); sbr.Append(" {\r\n"); sbr.AppendFormat(" m_{0}View = view;\r\n", viewName); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面打开\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public void OnOpen(object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面关闭\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public void OnClose(object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面暂停\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" public void OnPause()\r\n"); sbr.Append(" {\r\n"); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面暂停恢复\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public void OnResume(object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面遮挡\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public void OnCover(object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面遮挡恢复\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" public void OnReveal()\r\n"); sbr.Append(" {\r\n"); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面激活\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"userData\">用户数据</param>\r\n"); sbr.Append(" public void OnRefocus(object userData)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面轮询\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"deltaTime\">逻辑流逝时间,以秒为单位</param>\r\n"); sbr.Append(" /// <param name=\"unscaledDeltaTime\">真实流逝时间,以秒为单位</param>\r\n"); sbr.Append(" public void OnUpdate(float deltaTime, float unscaledDeltaTime)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" }\r\n"); sbr.Append("\r\n"); sbr.Append(" /// <summary>\r\n"); sbr.Append(" /// 界面深度改变\r\n"); sbr.Append(" /// </summary>\r\n"); sbr.Append(" /// <param name=\"uiGroupDepth\">界面组深度</param>\r\n"); sbr.Append(" /// <param name=\"depthInUIGroup\">界面在界面组中的深度</param>\r\n"); sbr.Append(" public void OnDepthChanged(int uiGroupDepth, int depthInUIGroup)\r\n"); sbr.Append(" {\r\n"); sbr.Append(" }\r\n"); sbr.Append(" }\r\n"); sbr.Append("}\r\n"); string ctrlpath = Application.dataPath + "/../Hotfix/Module/UI/Temp/" + viewName + "Ctrl.cs"; using (FileStream fs = new FileStream(ctrlpath, FileMode.Create)) { using (StreamWriter sw = new StreamWriter(fs)) { sw.Write(sbr.ToString()); } } UnityEditor.EditorUtility.DisplayDialog("Create view & ctrl", "Create Temp View And Ctrl OK!", "OK"); }