【m】框架大更新
This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
using DG.Tweening;
|
||||
using Stary.Evo;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class DeviceXEventHandler : MonoBehaviour
|
||||
{
|
||||
public static DeviceXEventHandler Global;
|
||||
public bool XBackOrReturn = false;
|
||||
private float pressStartTime;
|
||||
private bool isPressing = false;
|
||||
public HierarchyType hierarchyType;
|
||||
|
||||
// 在类中添加计时器和计数器变量
|
||||
private float _lastJoystickButton2PressTime = 0f;
|
||||
private int _joystickButton2PressCount = 0;
|
||||
private const float DOUBLE_PRESS_TIME_THRESHOLD = 2f; // 2秒时间阈值
|
||||
|
||||
/// <summary>
|
||||
/// 确定面板的CanvasGroup组件
|
||||
/// </summary>
|
||||
private CanvasGroup _confirmCGP;
|
||||
|
||||
/// <summary>
|
||||
/// 退出面板的CanvasGroup组件
|
||||
/// </summary>
|
||||
private CanvasGroup _exitTimeCGP;
|
||||
|
||||
private Text _exitTimeText;
|
||||
private GameObject exitPanelAni;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (Global == null)
|
||||
{
|
||||
Global = this;
|
||||
}
|
||||
else
|
||||
{
|
||||
Destroy(this);
|
||||
return;
|
||||
}
|
||||
|
||||
var deviceXEventPanelHandle = Resources.Load<GameObject>("DeviceXEventPanel");
|
||||
if (deviceXEventPanelHandle)
|
||||
{
|
||||
var deviceXEventPanel = Instantiate(deviceXEventPanelHandle);
|
||||
_confirmCGP = deviceXEventPanel.GetComponent<CanvasGroup>();
|
||||
_confirmCGP.alpha = 0f;
|
||||
}
|
||||
|
||||
var exitPanelHandle = Resources.Load<GameObject>("ExitTimePanel");
|
||||
if (exitPanelHandle)
|
||||
{
|
||||
var exitPanel = Instantiate(exitPanelHandle);
|
||||
_exitTimeCGP = exitPanel.GetComponent<CanvasGroup>();
|
||||
_exitTimeText = exitPanel.GetComponentInChildren<Text>();
|
||||
_exitTimeCGP.alpha = 0f;
|
||||
exitPanelAni = _exitTimeCGP.GetComponentInChildren<Animator>().gameObject;
|
||||
}
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
StringEventSystem.Global.Register<bool>("X_Button", SetXbutton);
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
StringEventSystem.Global.UnRegister<bool>("X_Button", SetXbutton);
|
||||
}
|
||||
|
||||
void SetXbutton(bool isActive)
|
||||
{
|
||||
XBackOrReturn = isActive;
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (XBackOrReturn)
|
||||
{
|
||||
OnJoystickButton2DoubleUpdate(KeyCode.JoystickButton2);
|
||||
OnJoystickButton2DoubleUpdate(KeyCode.X);
|
||||
}
|
||||
else
|
||||
{
|
||||
OnJoystickButton2ExitTimeUpdate(KeyCode.JoystickButton2);
|
||||
OnJoystickButton2ExitTimeUpdate(KeyCode.X);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnJoystickButton2ExitTimeUpdate(KeyCode keyCode)
|
||||
{
|
||||
if (Input.GetKeyDown(keyCode))
|
||||
{
|
||||
isPressing = true;
|
||||
_exitTimeCGP.alpha = 1;
|
||||
_exitTimeText.text = "5";
|
||||
exitPanelAni.SetActive(true);
|
||||
pressStartTime = Time.time;
|
||||
}
|
||||
|
||||
if (isPressing)
|
||||
{
|
||||
float time = Time.time - pressStartTime;
|
||||
_exitTimeText.text = (5 - (int)time).ToString();
|
||||
if (time >= 5f)
|
||||
{
|
||||
Debug.Log("UnityEvo:程序已退出!!");
|
||||
Application.Quit();
|
||||
}
|
||||
}
|
||||
|
||||
if (Input.GetKeyUp(keyCode))
|
||||
{
|
||||
isPressing = false;
|
||||
_exitTimeText.text = "5";
|
||||
_exitTimeCGP.alpha = 0;
|
||||
exitPanelAni.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnJoystickButton2DoubleUpdate(KeyCode keyCode)
|
||||
{
|
||||
// ... existing code ...
|
||||
|
||||
// JoystickButton2 双击检测
|
||||
if (Input.GetKeyDown(keyCode))
|
||||
{
|
||||
float currentTime = Time.time;
|
||||
|
||||
// 如果是第一次按下或者在时间阈值内再次按下
|
||||
if (_joystickButton2PressCount == 0 ||
|
||||
(currentTime - _lastJoystickButton2PressTime) <= DOUBLE_PRESS_TIME_THRESHOLD)
|
||||
{
|
||||
_joystickButton2PressCount++;
|
||||
_lastJoystickButton2PressTime = currentTime;
|
||||
// 如果达到一次按下,执行单击逻辑
|
||||
if (_joystickButton2PressCount == 1)
|
||||
{
|
||||
_confirmCGP.alpha = 1f;
|
||||
_confirmCGP.DOFade(0f, 2f).OnKill(() => { _confirmCGP.alpha = 0; });
|
||||
}
|
||||
|
||||
// 如果达到两次按下,执行双击逻辑
|
||||
if (_joystickButton2PressCount >= 2)
|
||||
{
|
||||
_confirmCGP.DOKill();
|
||||
OnJoystickButton2DoublePress();
|
||||
_joystickButton2PressCount = 0; // 重置计数器
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 超过时间阈值,重置计数器
|
||||
_joystickButton2PressCount = 1;
|
||||
_lastJoystickButton2PressTime = currentTime;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否超过时间阈值需要重置计数器
|
||||
if (_joystickButton2PressCount > 0 &&
|
||||
(Time.time - _lastJoystickButton2PressTime) > DOUBLE_PRESS_TIME_THRESHOLD)
|
||||
{
|
||||
_confirmCGP.DOKill();
|
||||
_joystickButton2PressCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 双击事件处理方法
|
||||
private void OnJoystickButton2DoublePress()
|
||||
{
|
||||
// 在这里执行双击后的逻辑
|
||||
Debug.Log("JoystickButton2 双击事件触发!");
|
||||
switch (hierarchyType)
|
||||
{
|
||||
case HierarchyType.Domain:
|
||||
// 域层级双击逻辑
|
||||
break;
|
||||
case HierarchyType.ScenePanel:
|
||||
// 场景面板层级双击逻辑
|
||||
StringEventSystem.Global.Send("Rollback");
|
||||
break;
|
||||
case HierarchyType.SceneActive:
|
||||
// 场景激活层级双击逻辑
|
||||
StringEventSystem.Global.Send("UnloadCurrentScene");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public enum HierarchyType
|
||||
{
|
||||
/// <summary>
|
||||
/// 域层级
|
||||
/// </summary>
|
||||
Domain,
|
||||
|
||||
/// <summary>
|
||||
/// 场景面板层级
|
||||
/// </summary>
|
||||
ScenePanel,
|
||||
|
||||
/// <summary>
|
||||
/// 场景激活层级
|
||||
/// </summary>
|
||||
SceneActive
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user