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 组件。