Passer au contenu principal
Steamworks et le XBOX Game Development Kit (GDK) présentent un certain nombre de différences en matière de structure, de modèles d’API et d’objectif. Elles sont décrites dans cette rubrique.

Pas de singleton d’API dans le XBOX Game Development Kit (GDK)

Steamworks suit un modèle dans lequel chaque ensemble de fonctionnalités de l’API est défini comme une interface (par exemple, toutes les fonctions de statistiques utilisateur se trouvent dans l’interface ISteamUserStats et le stockage distant dans ISteamRemoteStorage), dont les instances sont disponibles dès que l’API est initialisée par le jeu dans le code. Le singleton de l’API Steamworks initialisé au démarrage du jeu fournit ces fonctions et suit l’état pendant toute la durée de vie de l’application. Ce n’est pas le cas des API du XBOX Game Development Kit (GDK), qui privilégient une API C dans laquelle une grande partie du contexte et de l’état actuel des données de l’API doit être conservée par le jeu lui-même et transmise aux différentes fonctions de l’API. Par exemple, après avoir authentifié un utilisateur auprès des services XBOX, le jeu doit conserver le handle de contexte des services XBOX et un handle d’utilisateur. Les API utilisées pour obtenir ces informations ne les « mémorisent » pas pendant toute la durée de vie de vos jeux, contrairement à Steamworks. Vous devez donc ajouter des variables membres à votre classe de jeu ou suivre autrement ces handles dans votre jeu.

Fonctions asynchrones et rappels

Les fonctions asynchrones de Steamworks déclenchent des événements auxquels vous pouvez vous abonner avec la macro STEAM_CALLBACK ou une variable CCallResult. Lorsqu’un événement correspondant au type de struct d’événement spécifié est déclenché, la méthode spécifiée est appelée et reçoit une struct d’événement comme unique argument. Cette struct contient le résultat renvoyé par l’API ainsi que des informations contextuelles déjà disponibles qui peuvent être nécessaires pour traiter les résultats de l’appel. Par exemple, lors de l’appel de ISteamUserStats::DownloadLeaderboardEntries, vous avez besoin d’un handle SteamLeaderboard_t dans la fonction de rappel à passer à ISteamUserStats::DownloadLeaderboardEntries, que vous pouvez obtenir en tant que membre de la struct LeaderboardScoresDownloaded_t passée en paramètre à la méthode de rappel que vous avez définie. Dans le XBOX Game Development Kit (GDK), toutes les actions asynchrones suivent un modèle différent : vous créez une struct XAsyncBlock, l’affectez éventuellement à une file d’attente de tâches, puis appelez la méthode d’API asynchrone. Une fois cet appel d’API terminé, il déclenche la fonction de rappel définie comme membre de XAsyncBlock et fournit un pointeur vers le bloc asynchrone comme unique argument. Si vous devez accéder à des informations dans la fonction de rappel, vous pouvez utiliser le membre pointeur de contexte du bloc asynchrone. Contrairement à Steam, les informations de cette struct de contexte ne sont pas fournies automatiquement : vous devez la construire vous-même. Pour reprendre notre exemple précédent, si vous avez besoin d’accéder à un ensemble de données dans votre fonction de rappel, vous pouvez procéder comme indiqué dans l’exemple de code suivant.
L’exemple précédent inclut également un pointeur vers this via shared_from_this() afin que la fonction de rappel puisse appeler des méthodes d’instance ou accéder à des variables membres si nécessaire. Soyez très prudent lorsque vous transmettez des pointeurs bruts en raison des problèmes de durée de vie. Notez également que si vous n’avez besoin d’accéder qu’à une seule variable dans votre rappel, vous pouvez simplement définir la valeur du pointeur context de votre bloc asynchrone comme un pointeur vers cette valeur, puis effectuer un cast vers le type de cette valeur dans votre rappel, au lieu de devoir définir une struct.
Steamworks exige également que le code du jeu déclenche les rappels à intervalles réguliers à l’aide de la fonction SteamAPI_RunCallbacks. Cela n’est pas nécessaire dans le XBOX Game Development Kit (GDK). Les rappels sont déclenchés une fois la tâche asynchrone distribuée par sa file d’attente de tâches terminée, si vous utilisez une file d’attente de tâches de pool de threads, ce qui est le comportement par défaut. Pour plus de contrôle, vous pouvez distribuer manuellement la tâche asynchrone à un thread spécifique en appelant XTaskQueueDispatch lorsque vous utilisez une file d’attente de tâches manuelle. Cette méthode est plus complexe et sa mise en œuvre dépasse le cadre de ce guide. Pour plus d’informations sur la façon dont le XBOX Game Development Kit (GDK) gère les opérations d’API asynchrones, y compris un exemple de code, consultez Modèle de programmation asynchrone.

Source de vérité pour les API gérées par le titre

Avec Steamworks, l’API est la source unique de vérité pour pratiquement toutes les valeurs qui la concernent. Les statistiques utilisateur sont récupérées depuis l’API et calculées à partir des valeurs de ISteamUserStats::GetStat/ISteamUserStats::SetStat, par exemple, et vous n’êtes pas tenu de stocker ces valeurs ailleurs vous-même. Les API de succès et de statistiques/classements du XBOX Game Development Kit (GDK) offrent toutes deux une option de gestion par le titre pour les développeurs qui souhaitent plus de flexibilité et de simplicité dans les appels qu’ils doivent effectuer. Les valeurs des API gérées par le titre sont, comme leur nom l’indique, gérées par votre titre. La source unique de vérité pour ces valeurs est votre jeu, qui peut les stocker n’importe où, par exemple dans un fichier de sauvegarde, un stockage cloud ou un serveur back-end tiers. La valeur stockée sur les serveurs du réseau XBOX (également appelé XBOX Live) peut servir d’instantané que vous mettez à jour occasionnellement, mais elle ne doit pas constituer votre source unique de vérité au moment de l’exécution. Une alternative aux statistiques/succès gérés par le titre est constituée par les statistiques/succès basés sur les événements. Ceux-ci utilisent des événements de télémétrie pour mettre à jour la progression d’un utilisateur dans un succès ou recalculer ses statistiques, et ils considèrent les services XBOX comme leur source de vérité. Vous pouvez choisir l’API que vous souhaitez utiliser pour les statistiques et les succès dans la page Gameplay Setting de votre jeu dans Partner Center. Pour plus d’informations à ce sujet, consultez les descriptions dans les rubriques qui comparent les statistiques basées sur les événements et gérées par le titre et les succès basés sur les événements et gérés par le titre. Ces API sont parfois désignées par leurs anciens noms : Stats/Achievements 2013 (basés sur les événements) et Stats/Achievements 2017 (gérés par le titre).

Le XBOX Game Development Kit (GDK) est multiplateforme

Les jeux qui utilisent les API Steamworks peuvent supposer qu’ils sont toujours lancés via Steam ; l’API peut donc injecter à l’initialisation un certain contexte sur la personne qui joue. Le XBOX Game Development Kit (GDK) peut être utilisé par des jeux qui s’exécutent sur une console XBOX, sur un PC via l’application XBOX, ou sur de nombreux autres appareils et lanceurs. Par conséquent, certains éléments de contexte disponibles automatiquement avec Steam peuvent devoir être initialisés manuellement avec le XBOX Game Development Kit (GDK), comme l’identité de l’utilisateur. Pour accéder à ces informations, vous pouvez suivre les étapes de la rubrique Initialisation du GDK de ce guide, qui fournit des instructions pour authentifier un utilisateur avec son compte Microsoft/gamertag. Cela signifie également que certains paradigmes des fonctions du XBOX Game Development Kit (GDK) sont adaptés aux scénarios sur console, comme la prise en charge de la connexion de plusieurs utilisateurs pour les API XUser, qui n’ont pas d’équivalent sur PC.

Empaquetage

La plupart des jeux sur Steam peuvent utiliser les fonctions de l’API Steamworks simplement en configurant les informations du jeu dans le portail d’administration Steamworks, en téléchargeant le SDK, en important les fichiers requis et en initialisant l’API dans le code. Une fois ces étapes effectuées, votre jeu s’intègre à l’API Steamworks quel que soit l’endroit d’où il est lancé, par exemple un éditeur de moteur de jeu. Pour que les API du XBOX Game Development Kit (GDK) fonctionnent, votre jeu doit d’abord être empaqueté. Pour empaqueter correctement votre jeu, vous devez modifier le fichier MicrosoftGame.config de votre jeu et utiliser l’outil MakePkg du XBOX Game Development Kit (GDK) pour créer le package MSIXVC de votre jeu, que vous pouvez ensuite charger de manière indépendante (sideload) en tant qu’application du Microsoft Store sur un PC dont le mode développeur est activé. Cela signifie également que, contrairement aux jeux Steamworks, certaines fonctionnalités du XBOX Game Development Kit (GDK) ne fonctionnent pas dans un éditeur de moteur de jeu ou dans d’autres environnements de développement sans empaquetage préalable du jeu. Pour plus d’informations sur l’empaquetage, consultez les ressources suivantes.

Développement et test de jeux Unity

Les jeux créés avec le moteur de jeu Unity peuvent utiliser le plug-in GDK Unity pour développer leurs titres. Ce plug-in est inclus dans l’offre du XBOX Game Development Kit (GDK) et disponible en tant que complément autonome sur le portail XBOX Developer Downloads. Il comprend des wrappers d’API qui vous permettent d’appeler les fonctions du XBOX Game Development Kit (GDK) dans le code C# de votre jeu. Pour plus d’informations sur le plug-in GDK Unity, consultez Prise en main d’Unity pour le développement sur PC.
Dernière modification le 6 octobre 2026