1.前言:
在項目中被要求,長時間不操作,斷掉socket,提示用戶,減少服務器的性能消耗,在用戶點擊提示,在重新連接。於是我就寫了長時間不操作檢測,代碼如下:
2.代碼
using LuaFramework;
using UnityEngine;
/// <summary>
/// 長時間無操作
/// </summary>
public class LongTimeNoOperation : MonoBehaviour
{
public float maxTimeOffset = 180;//檢測時間間隔
[Header("編輯器是否開啓檢測")]
public bool IsEditorOpen = false;
private float lasterTime;//上次的時間
private bool isOpenCheck = false;//是否檢測
void Start()
{
}
/// <summary>
/// 打開無操作檢測
/// </summary>
public void OpenCheck()
{
lasterTime = Time.time; //設置初始時間
if (Application.isMobilePlatform)//移動端
isOpenCheck = true;
else
{
if (IsEditorOpen)
isOpenCheck = true;
else
isOpenCheck = false;
}
}
/// <summary>
/// 關閉無操作檢測
/// </summary>
public void CloseCheck()
{
isOpenCheck = false;
}
void Update()
{
if (isOpenCheck == false)
return;
float nowTime = Time.time;
if (Application.isEditor)
{
if (Input.GetMouseButtonDown(0))
{
lasterTime = nowTime;//更新觸摸時間
//Debuger.Log("更新觸摸時間:" + lasterTime);
}
}
else if (Application.isMobilePlatform)
{
if (Input.touchCount > 0)//有屏幕手指 接觸
lasterTime = nowTime;//更新觸摸時間
}
float offsetTime = Mathf.Abs(nowTime - lasterTime);
if (offsetTime > maxTimeOffset)
{
Debug.Log("長時間無操作 offsetTime:" + offsetTime);
//向上層派發消息 -->這裏需要自己實現
EventDispatch.DispatchLua(Protocal.LongTimeNoOperation, null);
CloseCheck();
}
}
}
3.用法
只需創建空節點,掛載LongTimeNoOperation 組件。