前段时间测试的时候发现手机网络发生变化时会与服务器的连接断开,前后端都有心跳机制,会检测到掉线,但是如果心跳过长的话掉线两边都不知道了就,所以我们要实时监控客户端的网络状态,一旦用户切换网络,就自动为用户重连服务器,我先吧脚本放在下面,获取各种网络状态的方法:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Intel : MonoBehaviour {
public Text ShowState;
int Network = 0;
public GameObject Tips;
void Start()
{
//开始检测网络
StartCoroutine("Refresh");
}
IEnumerator Refresh()
{
int ShowNum=0;
while (true)
{
yield return new WaitForSeconds(1);
//无网络时
if (Application.internetReachability == NetworkReachability.NotReachable)
{
Network = 0;
ShowState.text = "当前没有网络";
Debug.Log("当前没有网络");
}
//WiFi网络时
if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
{
Network = 1;
ShowState.text = "当前是WiFi网络";
Debug.Log("当前是WiFi网络");
}
//手机流量时
if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
{
Network = 2;
ShowState.text = "当前手机网络";
Debug.Log("当前是手机网络");
}
if (Network != ShowNum)
{
ShowNum = Network;
Tips.SetActive(true);
}
}
}
public void Close()
{
Tips.SetActive(false);
}
}
我没有写在Update里面,因为考虑到Update里面可能会比较消耗性能,在一个说Update里面刷新速度较快,不适合做这个方法,脚本写完就可以基本达到实时检测用户网络状态,1秒的间隔,当然可以吧这个间隔调的大一点,按个人喜好吧,当然这里面还会有坑,你仔细研究下就会发现,这里我不再提。
脚本写完GoodLuck!