在UI的基类内放入下面的代码
public void BaseUpdate()
{
if (isGameClick && Manager.isShowGuid)
{
return;
}
if (ControllerManager.Instance.GetKeyDown(XboxControllerKey.LUp, 0) || ControllerManager.Instance.GetKeyDown(XboxControllerKey.LUp, 1) || Input.GetKeyDown(KeyCode.W))
{
//上
Vertical_Click(-1);
Debug.Log("XBoxClick.DPadHorizontal2" + "-1");
}
if (ControllerManager.Instance.GetKeyDown(XboxControllerKey.LDown, 0) || ControllerManager.Instance.GetKeyDown(XboxControllerKey.LDown, 1) || Input.GetKeyDown(KeyCode.S))
{
//下
Vertical_Click(1);
Debug.Log("XBoxClick.DPadHorizontal2" + 1);
}
if (ControllerManager.Instance.GetKeyDown(XboxControllerKey.LLeft, 0) || ControllerManager.Instance.GetKeyDown(XboxControllerKey.LLeft, 1) || Input.GetKeyDown(KeyCode.A))
{
//左
Horizontal_Click(-1);
Debug.Log("XBoxClick.RightStickVertical" + "-1");
}
if (ControllerManager.Instance.GetKeyDown(XboxControllerKey.LRight, 0) || ControllerManager.Instance.GetKeyDown(XboxControllerKey.LRight, 1) || Input.GetKeyDown(KeyCode.D))
{
//右
Horizontal_Click(1);
Debug.Log("XBoxClick.RightStickVertical" + "-1");
}
if (ControllerManager.Instance.GetKeyDown(XboxControllerKey.A, 0) || ControllerManager.Instance.GetKeyDown(XboxControllerKey.A, 1) || Input.GetKeyDown(KeyCode.Q))
{
//A键
Debug.Log("Update" + "-1");
Sure_Click();
}
if (ControllerManager.Instance.GetKeyDown(XboxControllerKey.B, 0) || ControllerManager.Instance.GetKeyDown(XboxControllerKey.B, 1) || Input.GetKeyDown(KeyCode.Space))
{
//B键
Back_Click();
}
if (isAllowClick)
{
clickTime += Time.deltaTime;
if (clickTime > 0.2)
{
isAllowClick = false;
clickTime = 0;
}
}
}
[HideInInspector]
//横向选择
public int h_Index = 0;
[HideInInspector]
//纵向选择
public int v_Index = 0;
public List<List<Button>> buttons = new List<List<Button>>();
[HideInInspector]
public bool isAllowClick = false;
//[HideInInspector]
public bool isGameClick = false;
float clickTime = 0;
//选中的下标横向变换
public virtual void Horizontal_Click(int num)
{
if (isAllowClick)
{
return;
}
isAllowClick = true;
h_Index += num;
RefreshDown();
//Debug.Log("Horizontal_Click" + num);
}
//选中的下标纵向变换
public virtual void Vertical_Click(int num)
{
if (isAllowClick)
{
return;
}
isAllowClick = true;
v_Index += num;
RefreshDown();
//Debug.Log("Vertical_Click" + num);
}
Button selectBtn = null;
//刷新选中显示
public virtual void RefreshDown()
{
if (h_Index < 0)
{
h_Index = buttons.Count - 1;
}
if (h_Index >= buttons.Count)
{
h_Index = 0;
}
int vertiaclNum = 0;
if (buttons.Count > 0)
{
vertiaclNum = buttons[h_Index].Count;
}
if (v_Index < 0)
{
v_Index = vertiaclNum - 1;
}
if (v_Index >= vertiaclNum)
{
v_Index = 0;
}
for (int i = 0; i < buttons.Count; i++)
{
var btns = buttons[i];
for (int j = 0; j < btns.Count; j++)
{
bool isShow = i == h_Index && j == v_Index;
if (isShow)
{
selectBtn = btns[j];
}
//将选中标志高亮的图显示出来
//需要自己添加高亮图,改名
btns[j].transform.Find("ClickDown").gameObject.SetActive(isShow);
}
}
}
//确认
public virtual void Sure_Click()
{
if (isAllowClick)
{//防止连击
return;
}
isAllowClick = true;
if (selectBtn != null)
{
selectBtn.onClick.Invoke();
}
}
//返回键
public virtual void Back_Click()
{
if (isAllowClick)
{
return;
}
isAllowClick = true;
}
将下面代码放入UI的子类
//将要控制显示的按钮
public List<Button> buttons1 = new List<Button>();
public List<Button> buttons2 = new List<Button>();
public List<Button> buttons3 = new List<Button>();
public List<Button> buttons4 = new List<Button>();
private void Start()
{
buttons.Add(buttons3);
buttons.Add(buttons1);
buttons.Add(buttons2);
buttons.Add(buttons4);
RefreshDown();
}
private void OnEnable()
{
//设置开始显示选中的按钮
h_Index = 1;
}
//将父类的BaseUpdate放入update生效
private void Update()
{
BaseUpdate();
}
//重写确定部分可以加入自己需要的内容
public override void Sure_Click()
{
Manager.isHandShank = true;
base.Sure_Click();
}
public override void Back_Click()
{
base.Back_Click();
UIManager.Instance.exitPanel.OnEnter();
}