/// 根据输入的按钮出现顺序,设置一个按钮的基准点和实际位置 /// </summary> /// <param name="qFrom">从哪个象限出发</param> public void SetShowDirection(QUADRANT qFrom) { QUADRANT qTo = this.Quadrant; float dx = COORDINATE_X[(int)qFrom] - COORDINATE_X[(int)qTo]; float dy = COORDINATE_Y[(int)qFrom] - COORDINATE_Y[(int)qTo]; // 设置重心 Vector2 pivot; pivot.x = ((dx * 0.5f) + 0.5f); pivot.y = ((dy * 0.5f) + 0.5f); transBlock.pivot = pivot; // 设置位置 Vector3 pos; pos.x = CenterPosition.x + (pivot.x - 0.5f) * menu.ButtonWidth; pos.y = CenterPosition.y + (pivot.y - 0.5f) * menu.ButtonHeight; pos.z = 0; transBlock.localPosition = pos; // 设置转场 tweenRotationForShow.from.x = dy * 90; tweenRotationForShow.from.y = dx * 90; //Debug.Log(" " + qFrom + " -> " + Quadrant); //Debug.Log("center=" + CenterPosition); //Debug.Log("pivot=" + pivot); //Debug.Log("pos=" + pos); }
/// <summary> /// 关闭除指定位置之外的其他位置上的按钮所包含的自面板 /// </summary> /// <param name="q"></param> public void HideOthersSubPanel(QUADRANT q) { for (int i = 0; i < buttons.Length; i++) { if (i == (int)q) { continue; } BlockButton otherBtn = buttons[i]; if (otherBtn == null) { continue; } if (otherBtn.nextPanel != null) { otherBtn.nextPanel.HideImmediately(); } } }
/// <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); }
/// <summary> /// 设置一个指定位置的按钮 /// </summary> /// <param name="button"></param> /// <param name="q"></param> public void SetButton(BlockButton button, QUADRANT q) { buttons[(int)q] = button; }
/// <summary> /// 按象限获取按钮 /// </summary> /// <param name="q"></param> /// <returns></returns> public BlockButton GetButton(QUADRANT q) { return(buttons[(int)q]); }