unity如何检测是否联网
  aIm4e3TeJr90 2023年11月13日 26 0

有些程序要求必须联网才可以运行。

如何在unity中进行检测当前运行程序的环境是否连接到网络?

新建一个场景,先在log里来显示内容。

将脚本ChinarWeb挂载到相机上。


unity如何检测是否联网_unity检测是否联网


下面是脚本内容:

using UnityEngine;
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
using Ping = System.Net.NetworkInformation.Ping;


/// <summary>
/// 简化
/// 封装函数 —— 检测本地网络链接状态
/// </summary>
public class ChinarWeb : MonoBehaviour
{
    [DllImport("winInet.dll")]                                                            //引用外部库
    private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved); //库中函数

    public static bool getnetsuccess;//获取网络连接状态

    void Start()
    {
        //放入一个可以访问的网址
        ChinarPing("https://mail.qq.com/cgi-bin/frame_html?sid=k4TYjM0LzgSSLBt5&r=9fef6941cc5387a2183ad813fa36a8ef&lang=zh");
    }


    void Update()
    {
        IsConnectedInternet();
    }


    /// <summary>
    /// 判断本地的连接状态
    /// </summary>
    private static bool IsConnectedInternet()
    {
        int dwFlag = new int();
        if (!InternetGetConnectedState(ref dwFlag, 0))
        {
            PrintR("当前没有联网,请您先联网后再进行操作!");
            if ((dwFlag & 0x14) == 0) return false;
            Debug.LogWarning("本地系统处于脱机模式。");
            return false;
        }
        else
        {
            if ((dwFlag & 0x01) != 0)
            {
                Print("调制解调器上网。");
                return true;
            }
            else if ((dwFlag & 0x02) != 0)
            {
                Print("网卡上网。");
                return true;
            }
            else if ((dwFlag & 0x04) != 0)
            {
                Print("代理服务器上网。");
                return true;
            }
            else if ((dwFlag & 0x40) != 0)
            {
                Print("虽然可以联网,但可能链接也可能不连接。");
                return true;
            }
        }

        return false;
    }


    /// <summary>
    /// Chinar 闪亮输出
    /// </summary>
    public static void Print(string str)
    {
        getnetsuccess = true;
        Debug.Log("可以上网,上网类型输出:" + str);
    }


    /// <summary>
    /// Chinar 警告输出
    /// </summary>
    public static void PrintR(string str)
    {
        getnetsuccess = false;
       Debug.Log("不可上网的警告输出" + str);

       
    }


    /// <summary>
    /// Ping命令检测网络是否畅通
    /// </summary>
    /// <param name="url">URL地址</param>
    /// <returns>是否ping通</returns>
    public static bool ChinarPing(string url)
    {
        bool isSucceed = true;
        Ping ping = new Ping();
        try
        {
            var pingReply = ping.Send(url);
            if (pingReply != null && pingReply.Status != IPStatus.Success)
            {
                isSucceed = false;
            }

            if (pingReply != null) print("Ping 网址:<" + url + ">------状态:" + pingReply.Status);
        }
        catch
        {
            isSucceed = false;
        }

        return isSucceed;
    }
}

运行后,可以通过log来看网络情况:

unity如何检测是否联网_UI_02

如果想要加入UI。

新建UI,内容和效果都如下图:

unity如何检测是否联网_System_03

unity如何检测是否联网_静态方法_04

文本用来显示log中的内容。


按钮用来点击。


unity如何检测是否联网_unity检测是否联网_05

注意:文本处,代码里有的静态方法应修改为非静态才可以使用。

 public static  void Print(string str)// GetText为非静态成员,所以方法应修改为非静态方法
    {
        getnetsuccess = true;
        Debug.Log("可以上网,上网类型输出:" + str);
        GetText.text = "可以上网,上网类型输出:" + str;
    }

新加入一个方法,用来调用连接网络,当点击按钮时调用这个方法。


    public void LinkAgain()
    {
        IsConnectedInternet();
       
    }

unity如何检测是否联网_UI_06



这样就完成了UI和


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  cnCTZTo8tgOC   2023年11月02日   58   0   0 Systemjavad3
  lh6O4DgR0ZQ8   2023年11月19日   17   0   0 Systemide多态
  kIM7GUNpnV3x   2023年11月02日   47   0   0 数组Systemi++
aIm4e3TeJr90