[SWIFT] [Unity] J'ai essayé de créer un plug-in natif UniNWPathMonitor en utilisant NWPathMonitor

Unity a une fonction de vérification de connexion réseau ʻApplication.internetReachability`, mais j'ai osé créer un plug-in Swift natif en utilisant ** NWPathMonitor **.

Utilisez NWPathMonitor, qui est plus simple que l'accessibilité, pour détecter l'état de la connexion réseau d'iOS. --Qiita Pour le traitement autour de Swift, je me suis référé à l'article ici.

Côté Swift

UniNWPathMonitor.swift


monitor.pathUpdateHandler = { path in
    if path.status == .satisfied {
        // connected
        self._onCallback("1")
    } else {
        // No connected
        self._onCallback("0")
    }
}

Si vous êtes connecté en utilisant l'instance NWPathMonitor (moniteur), il sera renvoyé avec «" 1 "», et s'il est déconnecté, il sera renvoyé avec un rappel prédéfini.

Côté Objective-C ++

API_AVAILABLE(ios(12.0))
UniNWPathMonitor *_monitor;

Étant donné qu'iOS12 ou version ultérieure est nécessaire pour utiliser NWPathMonitor cette fois, déclarez que iOS12 ou version ultérieure est nécessaire avec ʻAPI_AVAILABLE`.

UniNWPathMonitorBridge.mm


[_monitor setCallbackOnCallback:^(NSString * value) {
    UnitySendMessage("UniNWPathMonitor", "Noti", [value UTF8String]);
}];

Définissez un rappel pour UniNWPathMonitor. Lorsque le rappel est renvoyé, utilisez ʻUnitySendMessage` pour renvoyer les informations de connexion du côté Unity.

Pour la description d'Objective-C ++, veuillez vous référer à l'article ici que j'ai écrit plus tôt. [Unity] Implémentation la plus courte pour exécuter Swift à partir de C # dans Unity récent --Qiita

Côté unité

C'est ainsi qu'il est utilisé du côté de Unity. Exécutez simplement StartMonitor sur UniNWPathMonitor et définissez le rappel.

Sample.cs


void Start()
{
    UniNWPathMonitor.StartMonitor();
    UniNWPathMonitor.onChangeNetworkStatus += status =>
    {
        if (status == UniNWPathMonitor.NetworkStatus.satisfied)
            //de liaison
        else
            //Coupe
    };
}

anim.gif Cliquez ici pour voir ce que j'ai réellement fait. J'active et éteins le Wifi et je reçois le rappel du côté Unity. Il semble y avoir un léger décalage jusqu'à ce que le rappel soit renvoyé à Unity après la commutation.

finalement

Comme je l'ai mentionné au début, ce plug-in n'est pas requis pour Buchake Unity car ** Application.internetReachability ** existe. * Je l'ai fait parce que je voulais le faire.

Pour moi, j'ai beaucoup appris en le réalisant. Je suis heureux d'avoir eu l'occasion d'en apprendre davantage sur Swift, que j'étudie actuellement, comme la grammaire de rappel Swift qui est sortie pour la première fois et comment rendre iOS 12 ou une version ultérieure obligatoire.


Toutes les sources sont téléchargées ci-dessous, veuillez donc vous y référer. https://github.com/baobao/UniNWPathMonitor

Environnement de développement

Recommended Posts

[Unity] J'ai essayé de créer un plug-in natif UniNWPathMonitor en utilisant NWPathMonitor
Comment créer un plug-in natif Unity (version Android)
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
J'ai essayé de créer une fonction de connexion avec Java
J'ai créé un client RESAS-API en Java
Comment créer un plug-in Jenkins
J'ai essayé de créer une application simple en utilisant Dockder + Rails Scaffold
J'ai essayé d'en faire une URL arbitraire en utilisant l'imbrication de routage
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
J'ai essayé de créer une fonction de groupe (babillard) avec Rails
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "J'ai essayé de créer une fenêtre avec Bootstrap 3"
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
[iOS] J'ai essayé de créer une application de traitement de type insta avec Swift
J'ai essayé de créer une API Web qui se connecte à DB avec Quarkus
J'ai essayé de créer mon propre guide de transfert en utilisant OpenTrip Planner et GTFS
Un débutant Java a essayé de créer une application Web simple à l'aide de Spring Boot
J'ai créé un bot de transaction d'arbitrage de monnaie virtuelle et essayé de gagner de l'argent
J'ai essayé de créer un exemple de programme en utilisant le problème du spécialiste des bases de données dans la conception pilotée par domaine
J'ai essayé de faire une authentification de base avec Java
java j'ai essayé de casser un simple bloc
J'ai essayé de développer un outil de gestion des effectifs
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
J'ai essayé de développer un site Web pour étudier DUO3.0.
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
J'ai essayé de créer une application de clonage LINE
J'ai essayé de développer un site Web pour enregistrer les dépenses.
J'ai essayé de casser le bloc avec java (1)
[LINE @] J'ai essayé de créer un BOT de conversion de calendrier occidental de calendrier japonais [API de messagerie]
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part3 ~ Practice ~
J'ai essayé de faire un jeu simple avec Javafx ① "Trouvons le jeu du bonheur" (inachevé)
[Java] J'ai essayé de me connecter en utilisant le pool de connexion avec Servlet (tomcat) & MySQL & Java
[Android] J'ai créé un écran de liste de matériaux avec ListView + Bottom Sheet
[Petite histoire] J'ai essayé de rendre java ArrayList un peu plus pratique
J'ai essayé d'utiliser une connexion à une base de données dans le développement Android
J'ai essayé de créer un nouvel algorithme de tri, mais je ne sais pas si c'est vraiment nouveau
J'ai trébuché lorsque j'ai essayé d'utiliser neo4j dans l'environnement jenv, alors prenez note
J'ai essayé de développer un site Web de partage de boutique de ramen.
J'ai essayé d'utiliser Gson
J'ai essayé de faire fonctionner SQS en utilisant AWS Java SDK
Lors de la création d'une application personnelle, je me demandais si je devais la faire en utilisant haml
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de message de l'extension Rails Tutorial (Partie 1): Créer un modèle
J'ai essayé d'utiliser TestNG
J'ai essayé d'utiliser Log4j2 sur un serveur Java EE
J'ai essayé d'utiliser Galasa
J'ai essayé de gratter un graphique boursier en utilisant Java (Jsoup)
J'ai essayé de faire une fonction de réponse de l'extension Rails Tutorial (Partie 3): Correction d'un malentendu des spécifications
J'ai essayé de convertir l'exemple d'application en microservice selon l'idée du livre "Microservice Architecture".
[Java] J'ai essayé de créer un jeu Janken que les débutants peuvent exécuter sur la console
J'ai essayé de créer une fonction de message pour l'extension Rails Tutorial (Partie 2): Créer un écran à afficher
J'ai essayé de faire une demande en 3 mois d'inexpérimenté
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé d'utiliser le référentiel GitHub comme serveur de bibliothèque