Yoctopuce et Unity 5

Yoctopuce et Unity 5

Vous êtes plusieurs à nous avoir demandé s'il était possible d’utiliser nos modules avec le moteur de jeu Unity. Comme nous n'avons aucune expérience avec cet environnement, nous avons décidé d'essayer et de vous faire un compte rendu...





Unity est un moteur de jeu très populaire qui permet de réaliser des jeux pour de nombreuses plateformes (Windows, OS X, Linux, mais aussi iOS, Android etc.). Ce moteur est basé sur le framework Mono, et il est possible d'écrire la logique du jeu en C#. Cela tombe bien, nous avons une librairie C# :-)

Pour vérifier que notre librairie est utilisable avec Unity, nous allons créer un projet 2D avec quelques champs texte qui seront mis à jour avec les valeurs des senseurs d'un Yocto-Meteo. Les touches "haut" et "bas" permettront de changer la couleur des leds du Yocto-Color. Ce projet, extrêmement simple, a pour unique but de vérifier que notre librairie se comporte correctement avec le moteur Unity.

Extrait du code qui appelle notre librairie:

public class TestScript : MonoBehaviour
{

  public Text myText;

  ....

  YColorLed led1 = null, led2 = null;

  // Use this for initialization
  void Start ()
  {
    ...

    string msg = "";
    if (YAPI.RegisterHub ("usb", ref msg) != YAPI.SUCCESS) {
      state = State.ERROR;
      errmsg = msg;
      return;
    }
    YModule module = YModule.FirstModule ();
    while (module!=null) {
      string product = module.get_productName ();
      string serial = module.get_serialNumber ();
      if (product == "Yocto-Color") {
        colorSerial = serial;
        led1 = YColorLed.FindColorLed (serial + ".colorLed1");
        led2 = YColorLed.FindColorLed (serial + ".colorLed2");
      }
      module = module.nextModule ();
    }
    ....

  }

  // Update is called once per frame
  void Update ()
  {
    ...
    if (Input.GetKey (KeyCode.UpArrow)) {
      colorhue ++;
      if (colorhue > 0xff) {
        colorhue = 0;
      }
      led1.set_hslColor ((colorhue << 16) + 0xff80);
      led2.set_hslColor ((colorhue << 16) + 0xff80);
    } else if (Input.GetKey (KeyCode.DownArrow)) {
      colorhue --;
      if (colorhue < 0) {
        colorhue = 0xff;
      }
      led1.set_hslColor ((colorhue << 16) + 0xff80);
      led2.set_hslColor ((colorhue << 16) + 0xff80);
    } else if (Input.GetKeyDown (KeyCode.Escape)) {
      Application.Quit ();
    }
  }

}


Maintenant que nous avons écrit le code, il ne reste plus qu'à compiler le projet.

La librairie Yoctopuce C#


Pour rappel, notre librairie C# est composée de deux parties: Les fichiers C# qui implémentent les classes utilisables (YModule, YTemperature, YRelay, etc.) et une librairie dynamique yapi qui gère la communication USB ou TCP avec les modules Yoctopuce.

Jusqu'à la semaine passé, notre librairie C# incluait uniquement les versions Windows de cette librairie dynamique (la version Windows 32bits et la version Windows 64 bits). Depuis la versions 21486 la librairie contient aussi les versions Linux 32 et 64 bits ainsi qu'une version OS X. Toutes les versions précompilées sont disponibles dans le répertoire /unity de l'archive.

Compiler le projet Unity


Il faut donc compiler les fichiers .cs et copier la librairie dynamique yapi dans le répertoire de l’exécutable. La compilation des fichiers .cs est triviale: Il suffit de les copier dans le répertoire Assets du projet pour qu'ils soient automatiquement compilés par Unity et utilisables dans le projet.

Pour la librairie dynamique yapi, c'est un peu plus compliqué: il faut utiliser les plugins. C'est un mécanisme qui permet d'inclure les librairies dynamiques qui sont utilisées par le jeux. Lors de la compilation Unity va automatiquement copier les librairies qui se trouvent dans le répertoire /Assets/Plugings dans le répertoire final du jeux. Il est même possible de différencier les versions 32 et 64 bits d'une librairie en créant les sous-répertoires /Assets/Plugings/x86 et /Assets/Plugings/x86_64.

Concrètement, pour générer des builds pour Windows, Linux et OS X, il faut respecter la hiérarchie suivante:

  • /Assets/Plugins/x86/ contient les librairies Windows 32 bits et Linux 32 bits
  • /Assets/Plugins/x86_64/ contient les librairies Windows 64 bits et Linux 64 bits
  • /Assets/Plugins/ contient les librairies Mac OS X

Nous avons utilisé la même convention pour stoker les différentes versions de la librairie dynamique dans l'archive de la librairie Yoctopuce. Donc, il suffit de copier tout le contenu du répertoire Unity dans le dossier /Assets/Plugins/ pour avoir un projet Unity qui fonctionne.

Pour résumer


Pour utiliser la librairie Yoctopuce, il faut:

  1. Copier les fichiers .cs du répértoire /Source dans le répertoire /Assets du projet Unity.
  2. Copier le contenu du repertoire /unity dans le dans le répertoire /Assets/plugins du projet Unity.

Une fois que les fichiers .cs et toutes les librairies dynamiques sont ajoutés au projet, il est possible aussi bien de tester le jeu directement depuis l’éditeur que de générer un build pour n'importe quel OS.

Le wizard de création de build
Le wizard de création de build


Si vous désirez partir d'un projet existant, vous pouvez utiliser notre projet comme point de départ: https://github.com/yoctopuce-examples/unity_demo):

Conclusion


En conclusion, notre librairie fonctionne avec Unity. Pour cet article, nous avons utilisé Unity 5 mais nous avons aussi vérifié que cela fonctionne avec Unity 4.6. Seule limitation: cette solution basée sur une librairie dynamique ne s'applique pas à iOS ou Android.

Le "jeu" que nous avons écrit n'est clairement pas intéressant car le but de ce projet était de découvrir l’environnement et tester notre librairie, mais il n'est pas impossible que l'on essaie de réaliser quelque chose de plus fun dans un prochain article....

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.