private void DrawBlockButton(BlockButtonData button, int quadrant, int level) { BlockMenuDataManager bm = BlockMenuDataManager.Instance; GUI.changed = false; button.buttonId = EditorGUILayout.TextField("Button ID", button.buttonId); button.buttonName = EditorGUILayout.TextField("Button Name", button.buttonName); button.buttonColor = EditorGUILayout.ColorField("Button Color", button.buttonColor); button.buttonPic = EditorGUILayout.TextField("Button Pic", button.buttonPic); button.canClick = EditorGUILayout.Toggle("Can Click?", button.canClick); if (GUI.changed) { dirty = true; } if (button.subPanel == null) { if (GUILayout.Button("Create Sub Panel")) { button.subPanel = new BlockPanelData(); dirty = true; } } else { DrawBlockPanel(button.subPanel, level + 1, quadrant); } }
/// <summary> /// 创建一级菜单 /// </summary> /// <param name="panelData">菜单所使用的数据</param> /// <param name="parentButton">打开菜单的按钮,如果为null表示根菜单</param> /// <returns></returns> private BlockPanel CreatePanel(BlockPanelData panelData, BlockButton parentButton) { //GameObject panelObj = PrefabUtils.CreateGameObjectToParent(MenuBase.gameObject, panelPrefab); GameObject panelObj = new GameObject("Panel"); panelObj.transform.parent = MenuBase.transform; panelObj.transform.localPosition = Vector3.zero; panelObj.transform.localScale = Vector3.one; BlockPanel panel = panelObj.AddComponent <BlockPanel>(); panel.menu = this; if (parentButton != null) { parentButton.AddNextPanel(panel); } for (int i = 0; i < panelData.buttons.Count; i++) { BlockButtonData buttonData = panelData.buttons[i]; if (buttonData != null) { BlockButton button = CreateButton(panel, (QUADRANT)i, buttonData); if (buttonData.subPanel != null) { BlockPanel subPanel = CreatePanel(buttonData.subPanel, button); } } } return(panel); }
/// <summary> /// 在指定象限添加一个按钮 /// </summary> /// <param name="button"></param> /// <param name="q"></param> public BlockButton CreateButton(BlockPanel panel, QUADRANT q, BlockButtonData buttonData) { GameObject buttonObj = PrefabUtils.CreateGameObjectToParent(panel.gameObject, BlockButtonPrefab); BlockButton button = buttonObj.GetComponent <BlockButton>(); // 初始化按钮 button.Init(this, panel, q, buttonData); panel.SetButton(button, q); // 汇总按钮点击回调 //button.cbClick += this.OnClickButton; buttonObj.SetActive(false); // 所有button在menu中留记录,以便修改 // 这里暂时不判断按钮重名了……原则上,按钮不允许重名,可以在编辑器层面保证 buttonDic.Add(button.buttonId, button); return(button); }
/// <summary> /// 初始化按钮 /// </summary> /// <param name="panel"></param> /// <param name="q"></param> public void Init(BlockMenu menu, BlockPanel panel, QUADRANT q, BlockButtonData buttonData) { this.menu = menu; currentPanel = panel; Quadrant = q; buttonId = buttonData.buttonId; buttonName = buttonData.buttonName; canClick = buttonData.canClick; transBlock = transform as RectTransform; transBlock.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, menu.ButtonWidth); transBlock.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, menu.ButtonHeight); transButton = uiButton.transform as RectTransform; transButton.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, menu.ButtonWidth); transButton.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, menu.ButtonHeight); CenterPosition = new Vector2( (menu.ButtonWidth + menu.ButtonInterval) * COORDINATE_X[(int)q], (menu.ButtonHeight + menu.ButtonInterval) * COORDINATE_Y[(int)q]); //uiButton.onClick.AddListener(OnClick); // 设置按钮标题 SetText(buttonData.buttonName); // 设置颜色 SetButtonColor(buttonData.buttonColor); // 设置图片 SetButtonPic("UI/Texture/" + buttonData.buttonPic); }
public void DrawBlockPanel(BlockPanelData panel, int level, int fromQuadrant = -1) { for (int j = panel.buttons.Count; j < order.Length; j++) { panel.buttons.Add(null); } string panelTitle = level == 1 ? "Root Panel" : "Level " + level + " Panel"; if (EditorTools.DrawHeader(panelTitle)) { EditorTools.BeginContents(); for (int i = 0; i < order.Length; i++) { int quadrant = order[i]; string name = names[i]; if (EditorTools.DrawHeader(panelTitle + " -- " + names[quadrant] + " Button")) { EditorTools.BeginContents(); if (IsOppositeQuadrant(quadrant, fromQuadrant)) { EditorGUILayout.LabelField("Can not use"); } else { BlockButtonData button = panel.buttons[quadrant]; if (button == null) { if (GUILayout.Button("Create Button")) { button = new BlockButtonData(); panel.buttons[quadrant] = button; dirty = true; } } else { DrawBlockButton(button, quadrant, level); if (GUILayout.Button("Delete Button")) { panel.buttons[quadrant] = null; dirty = true; } } } EditorTools.EndContents(); } } if (GUI.changed) { dirty = true; } EditorTools.EndContents(); } }