Effectuer un traitement C # après avoir exécuté le traitement Python de manière asynchrone dans Unity

Chose que tu veux faire

Je veux exécuter le traitement Python → Traitement C # dans Unity

Pourquoi j'ai écrit cet article

Si vous souhaitez exécuter un système de chat écrit en Python avec Unity, vous avez besoin d'un processus appelé Process in C #. Cependant, si vous effectuez un traitement lourd de manière synchrone avec Process, Unity se figera! Lorsqu'un traitement asynchrone est effectué dans Process, le traitement C # ne peut pas être exécuté après le traitement Python!

Méthode de réalisation

//Variable pour enregistrer les données de sortie
private StringBuilder output = new StringBuilder();

public void Python()
    {   
        //Lancer un nouveau processus
        var p = new Process();
        //Paramètres de processus
        p.StartInfo.FileName = pyExePath; //Emplacement des fichiers Python
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.Arguments = pyCodePath; //Nom du fichier à exécuter
        p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding("shift_jis"); //Sortie Shift Python-Convertir en jis

        //Paramètres du gestionnaire d'événements
        //Appelé à chaque fois qu'il y a une sortie de python
        p.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
        {
            string str = e.Data;

            if (!String.IsNullOrEmpty(str))
            {
                UnityEngine.Debug.Log(str);
                output.Append(str+"\n");
            }

        });
        p.Start();

        UnityEngine.Debug.Log("Démarré de manière asynchrone pendant l'exécution du processus");


    }

    void Update()
    {
        if(output.Length != 0){
            UnityEngine.Debug.Log("S'exécute une fois le processus terminé");
            output.Length = 0 ;
        }
    }
}

Bref commentaire

Si vous écrivez le processus suivant dans la fonction qui exécute Process, cela ne fonctionnera pas, donc en prenant la méthode pour l'exécuter avec la fonction Update lorsque le résultat de sortie de Python obtenu par Process est obtenu, il était possible de faire Python → C #.

Recommended Posts

Effectuer un traitement C # après avoir exécuté le traitement Python de manière asynchrone dans Unity
Traitement de fichiers en Python
Traitement multithread en python
Next Python en langage C
Traitement de texte avec Python
Traitement des requêtes en Python
API C en Python 3
Étendre python en C ++ (Boost.NumPy)
Traitement de texte UTF8 avec python
Recherche binaire en Python / C ++
Collection de traitement d'image en Python
Utilisation du mode Python dans le traitement
Traitement du signal en Python (1): transformée de Fourier
Opération de collecte de type Scala en Python
100 Language Processing Knock Chapitre 1 en Python
ABC166 en Python A ~ C problème
Résoudre ABC036 A ~ C avec Python
Comment envelopper C en Python
Résoudre ABC037 A ~ C avec Python
Ecrire un test unitaire de langage C en Python
Résoudre ABC175 A, B, C avec Python
Algorithme en Python (ABC 146 C Dichotomy
Implémenter le filtre FIR en langage Python et C
Ecrire le fichier O_SYNC en C et Python
Traitez facilement des images en Python avec Pillow
Générer un langage C à partir d'une expression S avec Python
Traitement des interdictions en double dans la banque de données GAE / Python
Exécutez Python en C ++ sur Visual Studio 2017
Statut de chaque système de traitement Python en 2020
Traitement asynchrone en Python: référence inverse asyncio
Comment utiliser la bibliothèque C en Python
Utilisez Python pour une sortie formatée telle que C / C ++ printf
Comment générer une séquence en Python et C ++
Afficher le résultat du traitement de la géométrie en Python
Exécutez Python YOLOv3 en C ++ sur Visual Studio 2017
Résultat du calcul après la virgule décimale en Python
J'ai étudié en détail le traitement des variables en python
Une manière intelligente de chronométrer le traitement avec Python
Remarque sur l'encodage lorsque LANG = C en Python
Effectuer une analyse d'entité à l'aide de spaCy / GiNZA en Python
Tutoriel Boost.NumPy pour l'extension de Python en C ++ (pratique)
Python: apprentissage profond du traitement du langage naturel: principes de base
Faisons quelques exemples de traitement des notifications en Python
Appel de scripts Python à partir de Python intégré en C ++ / C ++
Traitement Y / n avec bash, Python et Go
J'ai essayé d'ajouter un module Python 3 en C
Traitement parallèle sans signification profonde en Python
[python] [c ++] bisect (* _bound) dans la liste inversée (décroissante)
Premier apprentissage profond en C # -Imitation de l'implémentation en Python-
[Traitement du langage naturel / PNL] Comment effectuer facilement une traduction arrière par traduction automatique avec Python