/// <summary>导出私有Item</summary> public static void ExportItemScript(UIOutlet ui) { string modName = SceneManager.GetActiveScene().name; string uiName = ui.gameObject.name.Replace("prefab", "");; CreateItem(modName, uiName, ui); CreateItemView(modName, uiName, ui); }
/// <summary>导出公有Item</summary> public static void ExportPublicItemScript(UIOutlet ui) { string modName = "PublicItem"; string uiName = ui.gameObject.name.Replace("prefab", ""); uiName = uiName.Substring(0, uiName.Length - 1); CreateItem(modName, uiName, ui); CreateItemView(modName, uiName, ui); }
private static void CreateUIView(string modName, string uiName, UIOutlet ui) { string saveFilePath = $"{ExportScriptDir}{modName}/UI/View/{uiName}View.cs"; StringBuilder fieldStrs = new StringBuilder(); StringBuilder getStrs = new StringBuilder(); UIOutlet.OutletInfo info; string objType; for (int i = ui.OutletInfos.Count; --i >= 0;) { info = ui.OutletInfos[i]; if (info == null) { continue; } objType = getTypeName(info.ComponentType); fieldStrs.AppendLine($" private {objType} {info.Name};"); if (objType == "GameObject") { getStrs.AppendLine($@" {info.Name} = Get(""{info.Name}"");"); } else { getStrs.AppendLine($@" {info.Name} = Get<{objType}>(""{info.Name}"");"); } } string fieldStr = $@"//工具生成不要修改 using System.Collections.Generic; using UnityEngine.UI; using UnityEngine; using GameFramework; namespace {AppSetting.MineGameName}.UI.{modName} {{ public partial class {uiName} : BaseUI {{ {fieldStrs} /// <summary>初始化UI控件</summary> override protected void InitializeComponent() {{ {getStrs} }} }} }} "; ToolsHelper.SaveFile(saveFilePath, fieldStr, true); }
private static void HierarchyItemCB(int instanceid, Rect selectionrect) { var obj = EditorUtility.InstanceIDToObject(instanceid) as GameObject; if (obj != null) { UIOutlet uiLua = obj.GetComponent <UIOutlet>(); if (uiLua != null) { Rect r = new Rect(selectionrect); r.x = r.width - 50; r.y += 2; var style = new GUIStyle(); style.normal.textColor = Color.yellow; string skinId = ""; GUI.Label(r, string.Format("Infos:{0}", uiLua.OutletInfos.Count + skinId), style); } } }
/// <summary>导出UI</summary> /// <param name="ui"></param> public static void ExportUIScript(UIOutlet ui) { string modName = SceneManager.GetActiveScene().name; string uiName = ui.gameObject.name; CreateUI(modName, uiName, ui); CreateUIView(modName, uiName, ui); //如果UI中含有Item,导出Item foreach (UIOutlet.OutletInfo info in ui.OutletInfos) { if (info.Name.EndsWith("Item")) { UIOutlet itemOut = (info.Object as GameObject).GetComponent <UIOutlet>(); if (itemOut != null) { ExportItemScript(itemOut); } } } }
protected void initGameObject(GameObject obj) { gameObject = obj; transform = obj.transform; Normalize(); rectTransform = obj.GetComponent <RectTransform>(); UIOutlet uiInfo = obj.GetComponent <UIOutlet>(); foreach (UIOutlet.OutletInfo item in uiInfo.OutletInfos) { objectList.Add(item.Name, item.Object as GameObject); } gameObject.SetActive(m_isActive); gameObject.SetVisible(m_isVisible); isInstance = true; InitializeComponent(); Initialize(); InitializeSkin(); //SetTextFont(); Awake(); }
static void CreateUIScript(MenuCommand menuCommadn) { GameObject target = menuCommadn.context as GameObject; if (target != null && target.transform.parent.name == "UICanvas" && target.name.EndsWith("UI")) { if (target.name.StartsWith("New UI")) { ToolsHelper.Log("请修改UI名称!!!"); return; } UIOutlet uiObj = target.GetComponent <UIOutlet>(); if (uiObj != null) { UIScriptExport.ExportUIScript(uiObj); ToolsHelper.Log("生成成功!!!"); AssetDatabase.Refresh(); return; } } ToolsHelper.Log("请选择有效果的UI对象!!!"); }
static void CreateItemScript(MenuCommand menuCommadn) { GameObject target = menuCommadn.context as GameObject; if (target != null && (target.name.EndsWith("Item"))) { UIOutlet uiObj = target.GetComponent <UIOutlet>(); if (uiObj != null) { UIScriptExport.ExportItemScript(uiObj); ToolsHelper.Log("生成成功!!!"); AssetDatabase.Refresh(); return; } } if (target != null && (target.name.EndsWith("ItemP"))) { ToolsHelper.Log("对于ItemP类型的Item,请在对应预设文件夹生成Item"); return; } ToolsHelper.Log("请选择有效果的Item对象!!!,Item包含UIOutlet脚本,并且以Item命名结尾"); }
private static void CreateUI(string modName, string uiName, UIOutlet ui) { string saveFilePath = $"{ExportScriptDir}{modName}/UI/{uiName}.cs"; StringBuilder eventAddStrs = new StringBuilder(); StringBuilder eventStrs = new StringBuilder(); UIOutlet.OutletInfo info; string objType; for (int i = ui.OutletInfos.Count; --i >= 0;) { info = ui.OutletInfos[i]; if (info == null) { continue; } objType = getTypeName(info.ComponentType); if (info.Object.name.StartsWith("btn")) //自动生成按钮事件 { eventAddStrs.AppendLine($" {info.Object.name}.AddClick({info.Object.name}_Click); //"); eventStrs.AppendLine($@" /// <summary></summary> void {info.Object.name}_Click() {{ }}"); } } string fieldStr = $@"using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using DG.Tweening; using GameFramework; namespace {AppSetting.MineGameName}.UI.{modName} {{ public partial class {uiName} : BaseUI {{ /// <summary>XXXX界面</summary> public {uiName}() {{ UINode = EUINode.UIWindow; //UI节点 OpenAnim = EUIAnim.None; //UI打开效果 CloseAnim = EUIAnim.None; //UI关闭效果 }} /// <summary>添加事件监听</summary> override protected void Awake() {{ {eventAddStrs} }} /// <summary>刷新</summary> public override void Refresh() {{ }} {eventStrs} /// <summary>释放UI引用</summary> public override void Dispose() {{ }} }} }} "; ToolsHelper.SaveFile(saveFilePath, fieldStr, false); }
private static void CreateItem(string modName, string uiName, UIOutlet ui) { string saveFilePath = $"{ExportScriptDir}{modName}/UI/Item/{uiName}.cs"; StringBuilder eventAddStrs = new StringBuilder(); StringBuilder eventStrs = new StringBuilder(); UIOutlet.OutletInfo info; string objType; for (int i = ui.OutletInfos.Count; --i >= 0;) { info = ui.OutletInfos[i]; if (info == null) { continue; } objType = getTypeName(info.ComponentType); if (info.Object.name.StartsWith("btn")) //自动生成按钮事件 { eventAddStrs.AppendLine($" {info.Object.name}.AddClick({info.Object.name}_Click); //"); eventStrs.AppendLine($@" /// <summary></summary> void {info.Object.name}_Click() {{ }}"); } } string selClick = " gameObject.AddClick(self_Click); //当前对象点击事件"; if (ui.GetComponent <Button>() != null) { selClick = " gameObject.GetComponent<Button>().AddClick(self_Click); //当前对象点击事件"; } string fieldStr = $@"using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; using GameFramework; namespace {AppSetting.MineGameName}.UI.{modName} {{ public partial class {uiName} : BaseItem {{ public Action<{uiName}> onClick; //Item点击事件 /// <summary>添加事件监听</summary> override protected void Awake() {{ {selClick} {eventAddStrs} }} /// <summary>设置数据<param name=""data""></param> /*public void SetData({uiName}Data data) {{ Data = data; txtServerName.text = data.ServerName; }}*/ /// <summary>刷新Item</summary> public override void Refresh() {{ }} /// <summary>当前对象点击事件</summary> void self_Click() {{ onClick?.Invoke(this); }} { eventStrs} /// <summary>释放Item引用</summary> public override void Dispose() {{ onClick = null; }} }} }} "; ToolsHelper.SaveFile(saveFilePath, fieldStr, false); }
/// <summary> /// 实例化Item /// </summary> /// <param name="prefab">预制体,会重新实例一个</param> /// <param name="parent">父对象</param> public void Instantiate(UIOutlet uiOut, Transform parent) { Instantiate(uiOut.gameObject, parent); }