Je veux exécuter le traitement Python → Traitement C # dans Unity
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!
//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 ;
}
}
}
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