Développement d’un plugin natif pour Unity 3D

unity-video-export-plugin

J’évite de multiplier les fronts, et ne travaille en général que sur un gros projet à la fois (depuis plus d’un an une suite applicative en swift sous macOS & iOS  pour le doublage et l’adaptation en studio de films de cinéma et de télévision). En parallèle, pour ne pas perdre la main,  quelques  heures-jours par mois,  je réalise des micro-prestations :  qualification de code, expertise, mini-conseil, micro-développements, etc.

C’est dans ce cadre, en Juillet, que mon client, une agence experte en réalité virtuelle, m’a sollicité pour implémenter un plugin natif iOS qui permette en arrière plan d’exporter des vidéos carrées optimisées à la volée depuis une application Unity 3D.

Les applications Unity sont écrites en C# et utilisent l’environnement d’exécution Mono ( tout comme Xamarin).  Depuis fin 2014  je développe tous mes nouveaux projets en Swift.  Par dérogation, j’ai décidé d’écrire ce plugin en Objective C 2.0, pour simplifier l’intégration depuis C# tout en assurant une parfaite compatibilité avec Swift par des annotations de nullité.

L’utilisation d’Objective C dans ce contexte ne pose aucun problème de performance ou de qualité, et permet d’obtenir un code plus facile à intégrer, durablement interopérable et offrant un niveau équivalent de protection contre les anomalies sémantiques dynamiques (des erreurs qui n’apparaissent qu’a l’exécution).

Les échanges entre le C# et l’Objective C passent par une struct en C et des blocs pour notifier la complétude et la progression des tâches. Unity utilise des stratégies de compilation LLVM très agressives qui rendent difficile le débogage dans Xcode sans une configuration fine. J’ai rencontré des problèmes liés aux  stratégies de gestion de la mémoire et de l’exécution concurrentielle…

Bref, si le code brut d’export vidéo reposant sur les classiques AVFoundation et des transformations affines via CoreGraphics s’est révélé relativement aisé à écrire, l’intégration à Unity a été bien plus complexe et délicate que prévu. J’ai finalement mis un peu plus de 24 heures à écrire la version finale. Mais je peux maintenant l’affirmer  – je maîtrise le dialogue unity3D/iOS&macOS! –  et vous,  vous savez à qui vous addresser pour le développement de vos petits plugins natifs!  Alors n’hésitez pas, consultez-moi!

Laisser un commentaire