/// <summary> /// 输入code处理/ /// </summary> private void StickCodeHandle(StickButtonCode code) { if (code == StickButtonCode.L1_R1) { //呼出或者隐藏光标键 HideOrShowMouse(true); } else if (code == StickButtonCode.B) { HideOrShowMouse(false); } if (_mouseStatus == UIMouseStatus.MouseHide) { DispatchEvents(code); } else { //呼出光标键状态,不派发方向键盘事件,只处理鼠标的移动和确认事件/ if (Input.GetKey(KeyCode_X) || Input.GetKeyUp(KeyCode_X) || Input.GetKeyDown(KeyCode_X)) { DispatchEvents(code); } } }
private void CacheCode(StickButtonCode code) { //只处理两个以下按键的组合键/ if (codeList.Count < 3) { codeList.Add(code); } }
/// <summary> /// 派发事件 /// </summary> /// <param name="code"></param> private void DispatchEvents(StickButtonCode code) { if (inputListeners == null || inputListeners.Count == 0) { return; } for (int i = 0; i < inputListeners.Count; i++) { inputListeners[i].Invoke(code); } }
/// <summary> /// 检查是否是组合键 /// </summary> /// <param name="code1"></param> /// <param name="code2"></param> /// <returns></returns> private StickButtonCode CheckIsGroupCode(StickButtonCode code1, StickButtonCode code2) { if (code1 == code2) { return(StickButtonCode.None); } else { if (code1 == StickButtonCode.A) { if (code2 == StickButtonCode.L1) { return(StickButtonCode.L1_A); } else if (code2 == StickButtonCode.R1) { return(StickButtonCode.R1_A); } } else if (code1 == StickButtonCode.XUp) { if (code2 == StickButtonCode.L1) { return(StickButtonCode.L1_X); } else if (code2 == StickButtonCode.R1) { return(StickButtonCode.R1_X); } } else if (code1 == StickButtonCode.Y) { if (code2 == StickButtonCode.L1) { return(StickButtonCode.L1_Y); } else if (code2 == StickButtonCode.R1) { return(StickButtonCode.R1_Y); } } else if (code1 == StickButtonCode.L1) { if (code2 == StickButtonCode.A) { return(StickButtonCode.L1_A); } else if (code2 == StickButtonCode.XUp) { return(StickButtonCode.L1_X); } else if (code2 == StickButtonCode.Y) { return(StickButtonCode.L1_Y); } else if (code2 == StickButtonCode.R1) { return(StickButtonCode.L1_R1); } } else if (code1 == StickButtonCode.R1) { if (code2 == StickButtonCode.A) { return(StickButtonCode.R1_A); } else if (code2 == StickButtonCode.XUp) { return(StickButtonCode.R1_X); } else if (code2 == StickButtonCode.Y) { return(StickButtonCode.R1_Y); } else if (code2 == StickButtonCode.L1) { return(StickButtonCode.L1_R1); } } } return(StickButtonCode.Both); }
void Update() { int nowFrameCount = Time.frameCount; if (nowFrameCount > beforeDownFrame + detecFrameInterval && codeList.Count > 0) { //大于时间间隔,派发上一次的code事件/ for (int i = 0; i < codeList.Count; i++) { StickCodeHandle(codeList[i]); } beforeDownFrame = nowFrameCount; codeList.Clear(); } StickButtonCode tempStickCode = StickButtonCode.None; if (Input.GetKeyUp(KeyCode_A)) { tempStickCode = StickButtonCode.A; CacheCode(tempStickCode); } if (Input.GetKeyUp(KeyCode_B)) { tempStickCode = StickButtonCode.B; CacheCode(tempStickCode); } if (Input.GetKeyUp(KeyCode_X)) { tempStickCode = StickButtonCode.XUp; CacheCode(tempStickCode); } if (Input.GetKeyDown(KeyCode_X)) { tempStickCode = StickButtonCode.XDown; CacheCode(tempStickCode); } if (Input.GetKeyUp(KeyCode_Y)) { tempStickCode = StickButtonCode.Y; CacheCode(tempStickCode); } if (Input.GetKeyUp(KeyCode_L1)) { tempStickCode = StickButtonCode.L1; CacheCode(tempStickCode); } if (Input.GetKeyUp(KeyCode_R1)) { tempStickCode = StickButtonCode.R1; CacheCode(tempStickCode); } if (Input.GetKeyDown(KeyCode_Q)) { tempStickCode = StickButtonCode.Q; CacheCode(tempStickCode); } // if (Input.GetAxis("joy_vertical") != 0.0f || Input.GetAxis("joy_horizontal") != 0.0f || Input.GetAxis("dpad_vertical") != 0.0f || Input.GetAxis("dpad_horizontal") != 0.0f) // { // MouseMove(); // } if (_mouseStatus == UIMouseStatus.MouseActive) { //UI选中状态属于呼出状态,只响应确认键和方向键,暂时不处理组合键的情况/ if (Input.GetKey(KeyCode_X) || Input.GetKeyUp(KeyCode_X) || Input.GetKeyDown(KeyCode_X) || Input.GetKeyUp(KeyCode_B)) { //不处理任何code,UICamera处理KeyCode_X的状态/ StickCodeHandle(tempStickCode); codeList.Clear(); } return; } if (codeList.Count == 2) { //如果缓存列表中的按键个数已经达到组合键最大个数,处理按键事件/ StickButtonCode code1 = codeList[0]; StickButtonCode code2 = codeList[1]; if (code1 != code2) { StickButtonCode groupCode = CheckIsGroupCode(code1, code2); if (groupCode == StickButtonCode.Both) { StickCodeHandle(code2); StickCodeHandle(code1); } else { if (groupCode != StickButtonCode.None) { StickCodeHandle(groupCode); } } } codeList.Clear(); } else { if (tempStickCode != StickButtonCode.None) { //如果没有达到个数,稍作延迟处理,防止用户点击的非同时性/ beforeDownFrame = nowFrameCount; } } }