Unity 長時間無操作檢測

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章