当前位置: 首页 > news >正文

【100个 Unity实用技能】| Unity中 检查当前设备网络状态 的几种方法整理

在这里插入图片描述

Unity 小科普

老规矩,先介绍一下 Unity 的科普小知识:

  • Unity是 实时3D互动内容创作和运营平台 。
  • 包括游戏开发美术建筑汽车设计影视在内的所有创作者,借助 Unity 将创意变成现实。
  • Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机平板电脑PC游戏主机增强现实虚拟现实设备。
  • 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏
  • 🎬 博客主页:https://xiaoy.blog.csdn.net

  • 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉

  • 🎄 学习专栏推荐:Unity系统学习专栏

  • 🌲 游戏制作专栏推荐:游戏制作

  • 🌲Unity实战100例专栏推荐:Unity 实战100例 教程

  • 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📆 未来很长,值得我们全力奔赴更美好的生活✨

  • ------------------❤️分割线❤️-------------------------

请添加图片描述


Unity 实用小技能学习

Unity中 检查当前设备网络状态 的几种方法整理

在做项目时有时候可能需要拿到当前设备的网络状态,所以本文整理了在Unity中可以用到的一些拿到网络状态的方法,下面一起来看看吧。

第一种:使用Unity自己的API判断网络状态

Unity API 如下:https://docs.unity3d.com/ScriptReference/NetworkReachability.ReachableViaLocalAreaNetwork.html

/// <summary>
///   <para>Describes network reachability options.</para>
/// </summary>
public enum NetworkReachability
{
	/// <summary>
	///   <para>Network is not reachable.</para>
	/// </summary>
	NotReachable,
	/// <summary>
	///   <para>Network is reachable via carrier data network.</para>
	/// </summary>
	ReachableViaCarrierDataNetwork,
	/// <summary>
	///   <para>Network is reachable via WiFi or cable.</para>
	/// </summary>
	ReachableViaLocalAreaNetwork
}

使用方法如下:

    void Start()
    {   
        // 1
        Debug.Log("当前网络状态:"+ Application.internetReachability);
    
        // 2
        switch (Application.internetReachability)
        {
            case NetworkReachability.NotReachable:
                Debug.Log("当前网络不可用");
                break;
            case NetworkReachability.ReachableViaCarrierDataNetwork:
                Debug.Log("当前网络为移动网络");
                break;
            case NetworkReachability.ReachableViaLocalAreaNetwork:
                Debug.Log("当前网络为Wifi");
                break;
            default:
                break;
        }
        
        // 3
        if (Application.internetReachability == NetworkReachability.NotReachable)
        {
            Debug.Log("当前网络不可用");
        }
        else if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
        {
            Debug.Log("当前网络为移动网络");
        }
        else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
        {
            Debug.Log("当前网络为Wifi");
        }
    }

优点:方便快捷,使用一行API代码就可以查询此时的网络状态
缺点:项目打包成exe后无法通过该方法判断网络状态

第二种方法:引用外部库wininet

    [DllImport("wininet")]
    private extern static bool InternetGetConnectedState(ref int connectionDescription, int reservedValue);

    public bool IsConnectedInternet()
    {
        int i = 0;
        if (InternetGetConnectedState(ref i, 0))
        {
            Debug.Log("已联网");
            return true;
        }
        else
        {
            Debug.Log("未联网");
            return false;
        }
    }

第三种方法:Ping命令检测网络是否畅通

    public bool PingIsHaveNet(string url)
    {
        System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();

        PingReply ret = ping.Send(url);
        try
        {
            if (ret.Status != IPStatus.Success)
            {
                Debug.Log("未联网");
                return false;
            }
            else
            {
                Debug.Log("已联网");
                return true;
            }
        }
        catch (Exception e)
        {
            Debug.Log("Ping URL 失败");
            return false;
        }
    }

第四种方法: 通过 .Net.NetworkInformation 方法检测

需要引用命名空间 using System.Net.NetworkInformation

    private bool UrlExistsUsingSockets(string url)
    {
        if (url.StartsWith("https://")) url = url.Remove(0, "https://".Length);
        try
        {
            System.Net.IPHostEntry ipHost = System.Net.Dns.GetHostEntry(url);// System.Net.Dns.Resolve(url);
            Debug.Log("已联网");
            return true;
        }
        catch (System.Net.Sockets.SocketException se)
        {
            System.Diagnostics.Trace.Write(se.Message);
            return false;
        }
    }

以上就是整理的几种查询当前设备网络状态的几种方法,如果有更好的方法可以评论区留言提出哦~


在这里插入图片描述

相关文章:

  • 如何在 Git 中处理和解决分支合并冲突?
  • 升级版网创教程wordpress插件自动采集并发布
  • Kafka-ACK机制(ack应答原理、冥等性、事务)
  • Vivado IP核的快速入门 官方手册和例程
  • Mac Pro中的开源虚拟机UTM安装ubuntu(Applce M1,M2芯片)(1)
  • LeetCode题练习与总结:二叉树的最大深度--104
  • 虚拟机中window7界面太小解决办法
  • HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)
  • 【GPTs分享】GPTs分享之Write For Me
  • vue使用gitshot生成gif
  • 二 线性代数-向量
  • 基于SpringBoot的气象数据监测分析大屏
  • Db2数据库计算年龄
  • C++继承时常见问题
  • 【带你了解C语言预处理指令】
  • SLAM本质剖析-Boost之Geometry函数大全(一)
  • 4、MySQL数据管理
  • 谈谈测试员的地位:此刻,我想为所有从事测试职业的人发声…
  • DBCO-PEG12-Maleimide,DBCO-PEG12-Mal具有DBCO和Maleimide巯基反应试剂
  • 在Spring Boot项目中使用统一返回结果
  • 249 - 数据流
  • 程序员日均写7行代码被开除,这个行业真的还是普通人的最优选吗
  • NVIDIA VPI架构解析
  • 在字节跳动干了3年测试开发,30岁即将退休的我,告诉你软件测试的真实就业前景
  • 【计算机毕业设计】Java 基于微信小程序的高校游泳馆管理系统
  • JVM的组成
  • pyqt5的安装
  • springmvc参数解析
  • 开荒手册2——小论文篇
  • PreScan快速入门到精通第三十六讲PreScan中使用车道线传感器
  • 什么是关系选择器
  • 【Vue3】快速入门Vue3 -上篇