首页 > 其他分享 >unity如何检测是否联网

unity如何检测是否联网

时间:2023-10-19 17:07:31浏览次数:29  
标签:return 检测 Ping dwFlag unity static false 联网 true

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


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


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


将脚本ChinarWeb挂载到相机上。

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如何检测是否联网_代理服务器_02

标签:return,检测,Ping,dwFlag,unity,static,false,联网,true
From: https://blog.51cto.com/u_8378185/7940647

相关文章

  • 检测表达
    load('shimi/bujiangweiduan')load('shimi/bujiangweiduan1')load('shimi/bujiangweishimi')load('shimi/bujiangweishimi1')load('allpositive')xishu=positive4*shimiallmo1=xishu*shimi'allmo=positive4-allmo1x......
  • Unity 如何设计网络框架
    在Unity框架设计中与游戏服务器对接的网络框架也是非常重要的一个模块,本文給大家分享如何来基于Unity来设计一个网络框架,主要的讲解以下几个点:(1)TCP半包粘包,长连接与短连接,IO阻塞;(2)TcpSocket与UDPSocket的技术方案;(3)Unity的序列化与反序列化技术方案;(4)TC......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(10) -- 在Dat
    有时候,一些数据的录入可能需要使用表格直接录入会显得更加方便快捷,这种情况有时候也是由于客户使用习惯而提出,本篇随笔介绍在WPF应用端上使用DataGrid来直接新增、编辑、保存数据的处理。录入数据的时候,我们都采用在一个窗体界面中,根据不同内容进行录入,但是有时候涉及主从表的数......
  • Unity3D 如何制作带厚度的透明图片详解
    Unity3D是一款功能强大的游戏开发引擎,可以实现各种复杂的游戏效果。本文将详细介绍如何使用Unity3D制作带厚度的透明图片,并提供代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。在Unity3D中,......
  • 最新Unity 如何打包发布到Android
    Unity打包Android现在UnityHub已经做的非常好了,可以直接下载对应Unity版本所对应得JDK,NDK,SDK,直接可以通过unityhub下载避免了,各种版本不同导致的编译问题,大大的降低了初学者的打包发布的难度,本文详细讲解UnityAndroid打包以及在打包中间需要理解的点, 如下:(1) Unityhu......
  • 软件性能测试怎么做,上海权威软件性能检测机构有哪些?
    ​性能测试报告作为衡量软件质量的重要指标之一,软件的性能是一种非功能特性,不关心系统是否可以完成特定的功能,而只关心软件系统在运行时的速度是否足够快、是否消耗足够少的资源。做好软件性能测试十分重要,有哪些方法可以提升软件的性能指标呢?一、软件性能测试有哪些方法?1.压......
  • 【Unity3D】UI Toolkit简介
    1前言​UIToolkit是一种基于Web技术的GUI框架,是为了解决UGUI效率问题而设计的新一代UI系统(UGUI的介绍详见→UGUI概述)。与UGUI不同,UIToolkit没有采用GameObject的方式,而是参考了Web技术的XML和CSS方案。这意味着它只保存变化的数据,而不是整个界面状态......
  • 【Unity3D】UI Toolkit容器
    1前言​UIToolkit简介中介绍了UIBuilder、样式属性、UQuery、Debugger,UIToolkit元素中介绍了Label、Button、TextField、Toggle、RadioButton、Slider、ProgressBar、Dropdown、Foldout等元素,UIToolkit样式选择器中介绍了简单选择器、复杂选择器、伪类选择器等......
  • Unity 常规用法
    刚体Rigidbody控制游戏对象的物理行为//获取刚体属性GetComponent<Rigidbody>();聚焦双击、F键窗口控制ALT+鼠标左键鼠标中键鼠标右键滑轮点击方向键移动物体E键调整角度场景视野透视视野、平行视野世界坐标原点小球设置0/0/0坐标Unity常用组件Transform:控制......
  • 使用 LF Edge eKuiper 将物联网流处理数据写入 Databend
    作者:韩山杰DatabendCloud研发工程师https://github.com/hantmacLFEdgeeKuiper是Golang实现的轻量级物联网边缘分析、流式处理开源软件,可以运行在各类资源受限的边缘设备上。eKuiper的主要目标是在边缘端提供一个流媒体软件框架(类似于ApacheFlink(opensnewwindo......