/// <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> /// 用Data数据对Menu进行初始化 /// </summary> /// <param name="data"></param> public void BuildMenu(BlockMenuData data) { menuName = data.name; BlockPanel panel = null; panel = CreatePanel(data.rootPanel, null); rootPanel = panel; }
/* * private void DoClick(Hashtable param) * { * * if (cbClick != null) * { * cbClick(this); * } * } */ /// <summary> /// 给按钮添加下一级面板 /// </summary> /// <param name="next"></param> public void AddNextPanel(BlockPanel next) { this.nextPanel = next; next.parentButton = this; Vector3 pos = Vector3.zero; pos.x = currentPanel.centerPosition.x + CenterPosition.x + COORDINATE_X[(int)Quadrant] * (menu.ButtonWidth + menu.ButtonInterval); pos.y = currentPanel.centerPosition.y + CenterPosition.y + COORDINATE_Y[(int)Quadrant] * (menu.ButtonHeight + menu.ButtonInterval); next.centerPosition = pos; }
/// <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="eventData"></param> public void OnGazeEnterObject() { if (!currentPanel.GetHasShow()) { return; } // 播放动画 tweenScaleForPointEnter.PlayForward(); // 准备打开子面板 if (nextPanel != null) { if (pointEnterTimerKey <= 0) { pointEnterTimerKey = TimerManager.Instance.RegisterTimer(TimerShowNextPanel, 0.2f, 1); } } // 检查同级其他按钮,如果有面板,则关闭 BlockPanel p = this.currentPanel; p.HideOthersSubPanel(this.Quadrant); if (nextPanel != null) { nextPanel.SetKeepShow(true); } currentPanel.SetKeepShow(true); if (canClick) { menu.uiCanBeClick = true; } // 这里屏蔽GazeGestureManager //GazeGestureManager.Instance.StopCapture(); }
/// <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); }