Avant qu'un projet réalisé avec l'Unreal Engine puisse être distribué aux utilisateurs, il doit être correctement empaqueté. L'empaquetage permet de garantir que tout le code et le contenu sont bien à jour et au bon format pour la plateforme cible.
Plusieurs étapes sont effectuées pendant le processus d'empaquetage. Le code source spécifique au projet est tout d'abord compilé. Une fois le code compilé, tout le contenu requis est converti (ou "préparé") dans un format qui peut être utilisé par la plateforme cible. Ensuite, le code compilé et le contenu préparé sont empaquetés en un ensemble de fichiers distribuable, comme un programme d'installation, par exemple.
Le menu principal Fichier comporte une option nommée Empaqueter le projet dotée d'un sous-menu. Ce sous-menu affiche une liste des plateformes compatibles pour lesquelles vous pouvez empaqueter votre projet.
Pour l'empaquetage vers Android, il y a plusieurs choix possibles. Consultez la page Références Android pour en savoir plus.
Il existe également des options avancées que vous pouvez définir avant l'empaquetage.
Configurer la carte de jeu par défaut
Avant d'empaqueter votre jeu, vous devez définir une carte de jeu par défaut, qui se charge au démarrage de votre jeu empaqueté. Si vous ne configurez pas de carte et utilisez un projet vide, vous ne verrez qu'un écran noir au lancement du jeu empaqueté. Si vous avez utilisé l'un des modèles de carte, comme le modèle à la troisième personne, la carte de départ sera chargée.
Pour configurer la carte de jeu par défaut, cliquez sur Modifier > Paramètres de projet > Cartes et modes dans le menu principal de l'éditeur :
Créer des empaquetages
Pour empaqueter un projet pour une plateforme spécifique, cliquez sur Fichier > Empaqueter le projet > [Nom de la plateforme] dans le menu principal de l'éditeur :
Une fenêtre s'affiche, dans laquelle vous pouvez sélectionner le répertoire cible. Une fois l'empaquetage terminé, ce répertoire contiendra le projet empaqueté.
Une fois le répertoire cible confirmé, le processus d'empaquetage du projet pour la plateforme sélectionnée est lancé. Comme l'empaquetage requiert beaucoup de temps, ce processus s'exécute en arrière-plan et vous pouvez continuer à utiliser l'éditeur pendant ce temps. Un indicateur de statut s'affiche dans le coin inférieur droit de l'éditeur pour indiquer la progression :
Un bouton Cancel est aussi présent sur l'indicateur de statut et permet de stopper le processus d'empaquetage. Par ailleurs, le bouton Show Log permet d'afficher la fenêtre Output Log avec des informations détaillées, afin de trouver plus facilement les problèmes quand le processus d'empaquetage échoue ou de trouver des avertissements qui pourraient révéler des bugs potentiels dans le produit :
Les messages les plus importants, comme les erreurs et les avertissements, sont affichés dans la fenêtre Message Log :
Si ces fenêtres ne sont pas visibles, vous pouvez y accéder en cliquant sur Fenêtre > Outils du développeur > Journal de sortie/Journal des messages.
Distribution
Pour distribuer un jeu iOS ou Android sur l'App Store ou sur Google Play, vous devez créer votre empaquetage avec le mode Distribution. Pour ce faire, accédez à l'option Paramètres d'empaquetage dans le menu Empaquetage et cochez la case Distribution.
Pour iOS, vous devrez créer un certificat de distribution et un profil d'approvisionnement (fichier MOBILEPROVISION) sur le site Developer d'Apple. Installez le certificat de distribution de la même façon que le certificat de développement et nommez votre profil de distribution avec le préfixe « Distro_ », en regard de l'autre (vous devriez donc avoir à la fois Distro_MyProject.mobileprovision et MyProject.mobileprovision).
Sous Android, vous devez créer une clé pour signer le fichier .apk et fournir certaines informations à nos outils de build avec un fichier nommé SigningConfig.xml. Ce fichier se trouve dans le dossier d'installation du moteur (Engine/Build/Android/Java/). Si vous modifiez ce fichier, les changements s'appliqueront à tous vos projets. Cependant, vous pouvez copier ce fichier dans le répertoire Build/Android/ de votre projet (en omettant le chemin du sous-dossier Java/) ; il ne sera alors appliqué qu'à ce projet. Les instructions pour la génération de la clé et le remplissage du fichier se trouvent dans le fichier en question.
Paramètres avancés
Cliquez sur Fichier > Empaqueter le projet > Paramètres d'empaquetage… ou sur Modifier > Paramètres du projet > Empaquetage dans le menu principal pour accéder à certaines options de configuration avancées de la fonctionnalité d'empaquetage.
À l'heure actuelle, les options suivantes sont disponibles :
| Option | Description |
|---|---|
Générer la configuration | Détermine la configuration de build à utiliser pour compiler votre projet en code. Pour déboguer un projet en code, sélectionnez DebugGame. Pour réaliser des versions de développement avec un minimum d'aide au débogage, mais une meilleure performance, sélectionnez Development. Pour le build de livraison final, qui ne contiendra aucune information ou fonctionnalité de débogage (telles que les formes de débogage ou l'impression de messages de débogage à l'écran), sélectionnez Shipping. Remarque : pour les projets réalisés uniquement avec Blueprint, vous n'avez pas accès à l'option pour créer un build DebugGame. |
Répertoire intermédiaire | Détermine le répertoire qui contiendra votre build empaqueté. Ce paramètre est automatiquement modifié quand vous sélectionnez un autre répertoire lors de la sélection du répertoire cible. |
Regénération complète | Détermine si tout le code doit être compilé ou non. Lorsque cette option est désactivée, seul le code modifié est compilé. Cela permet d'accélérer le processus d'empaquetage. Mais pour les builds à livrer, il faut toujours faire une compilation complète pour s'assurer que rien ne manque et que tout a bien été mis à jour. Cette option est activée par défaut. |
Utiliser le fichier pak | Détermine si les ressources du projet doivent être empaquetées sous forme de fichiers individuels ou en un empaquetage unique. Si cette option est activée, toutes les ressources seront empaquetées dans un fichier PAK unique au lieu de fichiers individuels. Si votre projet utilise de nombreux fichiers de ressources, l'usage d'un fichier PAK peut faciliter la distribution, car il permet de réduire la quantité de fichiers à transférer. Cette option est désactivée par défaut. |
Générer des tronçons | Détermine s'il faut générer ou non des tronçons de fichier PAK qui permettent de faciliter les installations en streaming. |
Générer les données d'installation des tronçons HTTP | Détermine s'il faut générer ou non des données pour le programme d'installation HTTP par tronçons. Cela permet d'héberger les données sur un serveur web afin de les installer à l'exécution. |
Répertoire des données d'installation des tronçons HTTP | Détermine le répertoire dans lequel les données seront installées. |
Version des données d'installation des tronçons HTTP | Détermine le nom de version pour les données d'installation HTTP par tronçons. |
Inclure le programme d'installation des composants requis | Détermine s'il faut inclure ou non des programmes d'installation pour les éléments prérequis des jeux empaquetés, tels que des composants redistribuables de système d'exploitation. |
Répertoires à toujours préparer | Détermine une liste de répertoires dont les fichiers seront systématiquement préparés. Par défaut, la fonctionnalité d'empaquetage détecte et prépare automatiquement tout le contenu référencé par votre jeu. Cependant, une partie des contenus peut ne pas être directement référencée. C'est notamment le cas des textures pour les IU personnalisées créées avec Slate. Les répertoires dans lesquels ce contenu est stocké doivent être listés ici afin que le contenu soit inclus dans l'empaquetage. |
Signature et cryptage
Lors de la publication de la version 4.22 de l'Unreal Engine, nous avons intégré la bibliothèque OpenSSL standard pour les plateformes de bureau (Windows, Mac et Linux).
Lorsqu'ils sont distribués avec un produit livré, les fichiers .pak peuvent être signés ou chiffrés, généralement dans le but d'empêcher l'extraction ou la falsification des données. Pour activer, désactiver ou ajuster les paramètres de chiffrement de votre projet, accédez au menu Paramètres du projet et recherchez la section Chiffrement.
Dans ce menu, vous avez accès aux paramètres suivants :
| Option | Description |
|---|---|
Chiffrer les fichiers INI pak | Chiffre tous les fichiers |
Chiffrer l'index pak | Chiffre l'index du fichier |
Chiffrer les fichiers UAsset | Chiffre les fichiers |
Chiffrer les ressources | Chiffre entièrement toutes les ressources incluses dans le fichier Remarque : ce paramètre a un effet significatif sur la performance E/S lors de l'exécution et augmente le niveau d'entropie de vos données finales empaquetées, ce qui diminue l'efficacité du système de distribution de patchs. |
Activer la signature pak | Permet d'activer ou désactiver la signature pour les fichiers PAK. |
Par ailleurs, les clés pour la signature ou le cryptage peuvent être configurées ou supprimées.
Préparation de contenu
Quand on travaille en tant que développeur sur du contenu nouveau ou modifié, le processus d'empaquetage complet nécessaire avant d'exécuter le jeu peut s'avérer fastidieux. Vous avez la possibilité de préparer uniquement le contenu d'une plateforme cible spécifique sans avoir à l'empaqueter, en cliquant sur Fichier > Préparer le contenu > [nom de la plateforme].
Il est à noter que cette fonctionnalité se contente de mettre le contenu à jour dans l'espace de travail local de développement et ne copie aucune ressource vers le répertoire d'organisation. Vous pouvez ensuite exécuter le jeu directement depuis l'espace de travail local de développement pour travailler plus rapidement dessus.
Optimisation des temps de chargement
Des temps de chargement courts sont essentiels pour les jeux en monde ouvert et également très utiles pour tous les autres types de jeux. L'Unreal Engine offre plusieurs méthodes pour optimiser les temps de chargement de votre projet durant le processus d'empaquetage. Voici quelques pratiques recommandées pour réduire les temps de chargement dans vos jeux. Pour en savoir plus sur les modes d'empaquetage de votre projet, consultez la section Empaqueter et préparer les jeux.
Utiliser les systèmes EDL (Event Driven Loader) et ALT (Asynchronous Loading Thread)
Le thread de chargement asynchrone (ALT) est désactivé par défaut, mais vous pouvez l'activer dans le menu Paramètres du projet de la section Moteur > Chargement dynamique. Pour les versions modifiées du moteur, certains ajustements seront peut-être nécessaires, mais le système ALT permet généralement de doubler la vitesse de chargement, notamment pour les jeux avec des temps de chargement préalables et les jeux qui chargent des données en continu. L'ALT fonctionne via la sérialisation et le post-chargement simultanés de code sur deux threads d'exécution distincts. Par conséquent, les constructeurs de classe
UObject, les fonctionsPostInitPropertieset les fonctionsSerializedu code de votre jeu doivent être thread-safe. Quand il est activé, le système ALT permet de doubler les vitesses de chargement. Pour en savoir plus sur les méthodes de chargement asynchrone (en C++), consultez la page Asynchronous Asset Loading.Le chargeur piloté par les événements est activé par défaut, mais vous pouvez le désactiver dans le menu Paramètres du projet de la section Moteur > Chargement dynamique. Pour la plupart des projets, le système EDL permet de diviser les temps de chargement par deux. Le système EDL est stable et peut être importé vers les versions antérieures de l'Unreal Engine ou ajusté pour s'adapter aux versions modifiées du moteur.
Compression du fichier PAK
Pour utiliser la compression des fichiers
.pakdans votre projet, ouvrez les paramètres du projet et recherchez la section Empaquetage. Dans cette section, ouvrez la section de l'en-tête Packaging et cochez la case "Create compressed cooked packages".La plupart des plateformes ne fournissent pas de compression automatique ; la compression de vos fichiers
.pakréduit les délais de chargement, mais vous devez tenir compte de certains cas particuliers :
| Plateforme | Recommandation |
|---|---|
Steam | Steam compresse les fichiers pendant qu'ils sont téléchargés par les utilisateurs. Le temps de téléchargement initial ne sera donc pas affecté par l'éventuelle compression du fichier PAK de votre jeu. Cependant, le système de patch différentiel de Steam fonctionnera mieux avec les fichiers non compressés. Les fichiers PAK compressés permettent d'économiser de l'espace sur le système de l'utilisateur, mais le téléchargement de patchs prendra plus de temps. |
Oculus | N'activez pas la compression des fichiers |
Organisation du fichier PAK
Un fichier .pak correctement organisé est essentiel pour réduire les temps de chargement. Pour vous aider à organiser votre fichier .pak de façon optimale, l'UE4 dispose d'un ensemble d'outils permettant de déterminer l'ordre requis de vos ressources de données et de créer ainsi des paquets qui se chargent plus rapidement. Ce concept est un peu similaire à l'optimisation dirigée par les profils. Procédez comme suit pour organiser votre fichier .pak :
Générez et exécutez le jeu empaqueté avec l'option de ligne de commande
-fileopenlog: le moteur consigne ainsi l'ordre dans lequel il ouvre les fichiers.Jouez à toutes les zones majeures du jeu. Chargez chaque niveau, chaque personnage jouable, chaque arme, chaque véhicule, etc. Une fois que tout a été chargé, quittez le jeu.
Votre jeu déployé comporte un fichier appelé
GameOpenOrder.logcontenant les informations nécessaires pour optimiser l'ordre de votre fichier .pak . Par exemple, dans les builds Windows, ce fichier se trouve dans le dossierWindows/(votre jeu)/Build/Windows/FileOpenOrder/. Copiez ce fichier dans votre répertoire de développement, à l'emplacement/Build/Windows/FileOpenOrder/. Dans les builds Mac, ce fichier se trouve dans le dossierMacNoEditor/(votre jeu)/Build/WindowsNoEditor/FileOpenOrder/. Copiez ce fichier dans votre répertoire de développement, à l'emplacementBuild/Mac/FileOpenOrder/.Une fois le fichier de registre en place, recréez le fichier
.pak. Ce fichier ainsi que tous les futurs fichiers.pakproduits utiliseront l'ordre des fichiers indiqué dans le fichier de registre.
Dans un environnement de production, il convient d'archiver le fichier de registre dans le contrôle source et de le mettre à jour régulièrement avec les résultats des nouvelles exécutions de la commande -fileopenlog, sans oublier une exécution finale lorsque le jeu est prêt à être commercialisé.