XNA est t-il mort
? Doit-on encore s'intéresser à la technologie de Microsoft pour faire des jeux vidéo ?

Le , par LittleWhite, Responsable 2D/3D/Jeux


Présentation

En tant que développeur de jeux vidéo, vous avez sûrement entendu parler de XNA. Peut-être même que vous vous y êtes intéressé et que vous avez développé des programmes ou des jeux avec.
Pour rappel, XNA est une série d'outils proposée par Microsoft pour faciliter le développement de jeux pour les plateformes Windows, Zune, Windows Phone 7 et même la Xbox 360. Pour cela, XNA repose sur le langage C#, la bibliothèque de jeux DirectX, l'éditeur Visual Studio, le débogueur GPU PIX, l'outil audio XACT. Ce framework a été une des premières opportunités offerte aux développeurs indépendants de publier des jeux sur une console (la Xbox 360) et d'avoir une visibilité augmentée à travers le Xbox Live.
Le public visé par cet ensemble d'outils sont les étudiants, les passionnés et les développeurs indépendants. Afin de bénéficier de la publication sur le Xbox Live Marketplace, il est nécessaire d'avoir un compte premium vendu au prix de 99 $ par an.
Vous pouvez découvrir une présentation approfondie (analyse de l'architecture, description technique...) dans cet article.

Historique

La toute première version de XNA (appelée XNA Game Studio Express) a été publiée le 11 décembre 2006. Durant l'année 2007, une seconde version (XNA Game Studio Express 1.0 Refresh) est apparue, proposant une mise à jour de la version précédemment nommée. Ensuite, quatre autres versions ont été distribuées, toutes nommées XNA Game Studio (2.0, 3.0, 3.1, 4.0). La dernière version (4.0) a été publiée le 9 mars 2010.
Pour information, la version 3.0 apportait le support de Zune et de la communauté Xbox Live, le C# 3.0, LINQ et la plupart des versions de Visual Studio 2008. La version 3.1 rajoutait le support du playback vidéo, une nouvelle version de la bibliothèque audio et le support des avatars Xbox 360. Quant à la dernière version, elle apportait le support de Windows Phone 7.5 et de Visual Basic.

Avec cette version estampillée 4.0, les MVP (Most Valuable Professionals) ont été avertis que le support s'arrêterait courant avril 2014. Aucune autre version du framework n'est prévue et Microsoft ne travaille plus du tout dessus, comme il est possible de l'apprendre dans cette actualité. De plus, lors de la sortie de la quatrième version, des utilisateurs étaient confus par le rapprochement du framework avec le SDK de Windows Phone et à l'époque déjà, certains présageaient la mort du framework.

Les jeux développés avec XNA

De nombreux développeurs ont utilisé cette technologie pour publier leurs jeux, que ce soit sur Xbox 360 ou sur PC. Nous pouvons citer Terraria, Fez, Escape Goat, Dust : An Elysian Tail.... Il serait bien dommage d'oublier Chibis Bomba, un jeu présenté dans nos pages.

Les alternatives

Comme vous l'avez compris, Microsoft ne compte plus faire de mise à jour. Le support de Windows 8, ou des nouvelles versions de Visual Studio ne sera jamais réalisé. Pourtant, la technologie n'est pas morte. Cela est possible grâce au projet open source MonoGame. MonoGame est une implémentation libre de la bibliothèque XNA 4. La deuxième bonne nouvelle est que l'équipe ne se limite pas au support des plateformes Microsoft, car il vous sera aussi possible de cibler Mac OS, Linux, Android, PlayStation Mobile, OUYA ainsi que Windows 8 et Windows Phone 8.
Le projet est toujours en développement actif et la version 3.2 a été publiée le 7 avril 2014. De nombreux projets professionnels l'utilisent déjà comme Bastion ou encore Fez.
Il faut aussi noter que Microsoft utilise MonoGame pour supporter Windows 8 dans leur propre projet : Kodu.

Si vous cherchez à tout prix à installer XNA 4 sur Visual Studio 2012 ou 2013, vous pouvez utiliser cet outil qui se chargera d'activer le framework dans les éditeurs de Microsoft.

Conclusion

Lors de sa sortie, le framework avait donné une opportunité très intéressante pour les étudiants qui souhaitaient s'insérer facilement dans le monde du développement de jeux vidéo, notamment grâce à une bibliothèque simplifiée et l'utilisation du langage C#, mais aussi pour les développeurs indépendants souhaitant cibler la console de jeux de Microsoft.
Malheureusement, Microsoft abandonne finalement cette technologie, possiblement car le marché est devenu bien plus compétitif avec des solutions comme Unity. Toutefois, grâce au projet Monogame, les studios reposant sur XNA peuvent continuer leurs travaux et même s'offrir un support de plateforme étendu.

Votre opinion

Avez-vous essayé d'utiliser XNA ? Qu'en pensez-vous ? Quel est votre avis sur MonoGame ?
Pensez-vous que XNA/MonoGame est une technologie obsolète ? Pourquoi ?
Conseilleriez-vous aux nouveaux développeurs de partir sur d'autres solutions ? Lesquelles ?

Voir aussi

Guide de migration XNA vers MonoGame en français
Les tutoriels XNA/MonoGame de Developpez.com


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de jean_kevin_musclor jean_kevin_musclor - Inactif https://www.developpez.com
le 01/05/2014 à 18:07
XNA c'est surtout fait pour initier les débutants à la programmation de jeux vidéo, et pour prototyper des moteurs avant de les porter en c++, c'est pas vraiment pensé pour faire un produit commercial.

Pour faire du jeu commercialisable en c# on utilise plutôt unity.
Avatar de jean_kevin_musclor jean_kevin_musclor - Inactif https://www.developpez.com
le 01/05/2014 à 18:43
J'aurais peut-être pas du faire de comparaison avec unity car ça n'a vraiment rien à voir avec xna (le seul point commun c'est que parmi leurs langages utilisés il y'en a deux avec la même syntaxe, mais le c# pour ms framework et le c# pour mono c'est pas du tout la même mv dessous). Microsoft ça n'est pas leur boulot de faire des moteurs de jeux...

XNA n'est pas un moteur c'est juste l'actuel wrapper officiel de directx pour débuter et prototyper des jeux windows en c#/vb#. C'est juste la continuation du wrapper directx pour VB, qui lui même était la continuation du wrapper VGA pour QB. Ils lui ont juste donné un autre nom que "directx numéro x pour c#" car xna a l'avantage de faire abstraction de la version.

Alors bien sûr il y'a toujours eu des jeux à petit budget réalisés avec ces wrapper pour basic/c# mais ça a jamais été une solution géniale.

[edit] Je me demande si les développeurs de casual n'ont pas été embrouillés par tout ce bazar de syntaxes. Unity c'est la continuation de middlewares qui sont progressivement passés de syntaxes basic-like à des syntaxes java-like. Peut-être que les habitués du basic se sont du coup sentis plus à l'aise sur xna que unity ...

[edit2] Il faut dire aussi que les wrappers directx pour basic/c# c'est traître, parce que c'est des langage haut niveau lents, mais ça ne sert qu'à prototyper de l'algo bas niveau (et oui il faut tout coder soi-même) destinés à être porté en suite en c++. difficile d'obtenir des performances intéressantes en se contentant de xna donc, à moins de faire du gameplay 2d avec des calculs élémentaires.
ça n'a donc strictement rien à voir avec unity qui lui a les librairies physx et umbra qui s'occupent de tous les algo bas niveau et le script c# est reservé à la fonction du script d'un engine, donc au game design.
Avatar de Nathanael Marchand Nathanael Marchand - Rédacteur https://www.developpez.com
le 01/05/2014 à 20:58
Citation Envoyé par jean_kevin_musclor  Voir le message
Il faut dire aussi que les wrappers directx pour basic/c# c'est traître, parce que c'est des langage haut niveau lents, mais ça ne sert qu'à prototyper de l'algo bas niveau (et oui il faut tout coder soi-même) destinés à être porté en suite en c++. difficile d'obtenir des performances intéressantes en se contentant de xna donc, à moins de faire du gameplay 2d avec des calculs élémentaires.

A moins de vraiment utiliser des trucs du genre CUDA, on a des très bonnes perfs en C# (oui oui, même équivalentes à ce qui pourrait se faire en C++). On a même les instructions vectorielles et la compilation native
Avatar de jean_kevin_musclor jean_kevin_musclor - Inactif https://www.developpez.com
le 01/05/2014 à 21:11
J'ai déjà essayé... les instructions vectorielles natives ne sont pas suffisantes pour égaler les perfs du c++.

Les jeux 3d requièrent des algorithmes complexes comme le parcours de graph, la detection de collisions, le clipping, les déformations de mailles, etc... chaque objet est constemment en train de faire des tests sur une tonne d'autres objets.

Par exemple t'as tes 50 corps rigides mobiles actifs qui testent en permanence une cinquantaine de polygones et/ou volumes chacun et le test est fait en moyenne 5 fois pour la précision (on arrive déjà à un ordre de grandeur de type 10000 tests avec un algo compliqué à chaque fois...), le frustum camera qui clippe une trentaine de portails ou occluders, et puis tous ces objets en plus doivent parcourir des structures compliquées genre octree-bsp-etc, rajoute la partie du décor qui est partiellement mise à jour (explosions ou building).
Bref c'est vriament des calculs méga-lourdingues. Il est difficile d'obtenir des perf intéressantes avec c#-xna, et même en optimisant comme un malade tu n'arriveras jamais à égaler la vitesse de physx/umbra qui font ça nativement dans unity. j'ai essayé, ça marche pas...

En + xna n'est pas une solution portable donc c'est pas plus prévu que les jeux pros que ne l'était le wrapper dx pour vb ou le vga qb.

C'est fait pour débuter, s'entraîner et prototyper, et ça le fait très bien avec un environnement de prog simplifié. Il faut l'utiliser pour quoi c'est fait.
Avatar de I_Pnose I_Pnose - Membre chevronné https://www.developpez.com
le 02/05/2014 à 13:49
J’ai testé XNA puis Monogame. J’ai d’ailleurs créés quelques applis Windows 8 grâce à ce dernier (cf. ma signature).

C’est très bien pour de petits projets, mais là où un moteur de jeux (dans la trempe de Unity) permet au développeur de se concentrer véritablement sur son jeu, XNA/Monogame/N’importe quel autre framework va nécessiter beaucoup plus de travail de la part du développeur pour mettre sur pied une base de jeu minimale ; si on veut de la physique on se la code, si on veut des shaders on se farcie du HLSL à la main, si on veut un joli terrain avec LOD dynamique on se le code... Au final on passe plus de temps à développer un moteur de jeu qu’à véritablement développer son jeu.

C’est ce qui fait la force de Unity, UE, Cry Engine et consort, et c’est vers ces solutions qu’il faut s’orienter si on a la volonté de mener à bien un projet de jeu vidéo.

Pour ce qui est des perf de XNA vs Monogame vs C++, j’aime bien ce lien qui date un peu. On voit clairement que XNA peut être 10 fois plus lent que du Directx natif, et que SharpDx (qui est un wrapper DirectX pour .Net utilisé notamment par Monogame pour assurer le pan Windows) s’en sort plutôt bien (en réalité il s'en sort même bien mieux que ce que l'article laisse entrevoir, car pas mal d'opti ont été apportés depuis, et le ratio perf SharpDX/C++ s'approcherait plus des 1.15~1.25 que des 1.5~2.3).
Avatar de Thorna Thorna - Membre éclairé https://www.developpez.com
le 02/05/2014 à 14:39
XNA ne m'a servi que pour voir s'il était possible de faire un peu de 3D en C#.
Dès les premières rumeurs d'arrêt de XNA, j'ai migré en SharpDX. C'est plus bas niveau mais parfait pour ce dont j'avais besoin.
Puis, dans le cadre de ma grande quête "apprendre un truc nouveau", j'ai testé SharpGL et j'ai maintenant migré vers le langage D et Derelict3.
Avatar de Mat.M Mat.M - Expert éminent sénior https://www.developpez.com
le 03/05/2014 à 12:59
Citation Envoyé par jean_kevin_musclor  Voir le message
J'ai déjà essayé... les instructions vectorielles natives ne sont pas suffisantes pour égaler les perfs du c++.

Dans la prochaine version de Visual Studio, on pourra avoir du code C# transformé en natif.

Quant à Unity c'est sans doute un excellent outil mais sans vouloir relancer tout un débat, je doute qu'on puisse faire un jeu AAA avec.
C'est parfait pour les petites équipes qui ont peu de moyens; les studios un minimum expérimentés préférent construire leur propre middleware.
Avatar de ShadowTzu ShadowTzu - Membre actif https://www.developpez.com
le 03/05/2014 à 20:43
Au vue de l'abandon de DirectX Managed je n'ai jamais été attiré par XNA, il était clair pour moi qu'il (elle?) serait abandonné dés la fin de vie de la XBox360.
En ce qui concerne les perfs du .NET pour les "algorithmes complexes" c'est devenu vraiment négligeable notamment depuis DirectX11 avec DirectCompute.
Avatar de jean_kevin_musclor jean_kevin_musclor - Inactif https://www.developpez.com
le 03/05/2014 à 22:25
Mat.M > VB6 était transformé en natif aussi, ça n'est pas pour ça qu'il égalait la vitesse du c++ ... mais même sans tenir compte des problèmes de perf, c'est pas très intéressant de s'enfermer dans un truc qui ne marche que sur windows.

ShadowTzu > Le gpu est optimisé pour les calculs vectoriels et des "algorithmes" élémentaires dont la "complexité" est une bête boucle for donc on peut pas tellement parler d'algorithme c'est juste le même calcul répété. Tout le reste (ia, pathfind, broad phase, culling, mesh update, toutes les formules de collision que le gpu ne sait pas calculer, etc) c'est le cpu qui s'en charge. Sinon les jeux tourneraient à 1% cpu au lieu de 100%.
Avatar de jean_kevin_musclor jean_kevin_musclor - Inactif https://www.developpez.com
le 04/05/2014 à 2:50
Hé au fait on a oublié de répondre au quizz de littlewhite.

Votre opinion

Avez-vous essayé d'utiliser XNA ? Qu'en pensez-vous ? Quel est votre avis sur MonoGame ?

Non. J'ai débuté la 3d avec le basic. Donc j'en pense pas grand chose.

Pensez-vous que XNA/MonoGame est une technologie obsolète ? Pourquoi ?

XNA oui puisque microsoft l'a droppé. Monogame je sais pas trop si l'équipe de développement va suivre.

Conseilleriez-vous aux nouveaux développeurs de partir sur d'autres solutions ? Lesquelles ?

Pour ceux qui veulent produire des jeux vite il y'a les moteurs.

Pour ceux qui veulent apprendre la programmation de moteur 3d avec un langage plus facile que le c++, ou bien faire du prototypage, je conseillerais jogl ou webgl qui sont des solutions plus standard que xna.
Offres d'emploi IT
Ingénieur H/F
Safran - Ile de France - Moissy-Cramayel (77550)
Ingénieur conception en électronique de puissance H/F
Safran - Ile de France - Moissy-Cramayel (77550)
Ingénieur analyste programmeur (H/F)
Safran - Auvergne - Montluçon (03100)

Voir plus d'offres Voir la carte des offres IT
Responsable bénévole de la rubrique 2D - 3D - Jeux : LittleWhite -