Gestionnaire de packages Unity

Unity — une plateforme qui existe depuis longtemps et qui est en constante Ă©volution. Cependant, en travaillant sur plusieurs projets en mĂȘme temps, il est encore possible de rencontrer des difficultĂ©s avec l'utilisation de sources communes (.cs), de bibliothĂšques (.dll) et d'autres ressources (images, sons, modĂšles, prefabs). Dans cet article, nous partagerons notre expĂ©rience de travail avec une solution native Ă  ce problĂšme pour Unity.

Gestionnaire de packages Unity

Méthodes de partage des ressources communes

Il existe plusieurs façons d'utiliser des ressources communes pour différents projets, mais chaque approche a ses avantages et ses inconvénients.

1. Duplication — duplication manuelle des ressources entre les projets.

Avantages :

  • Convient Ă  tous les types de ressources.
  • Aucun problĂšme de dĂ©pendances.
  • Aucun problĂšme de GUID des ressources.

Inconvénients :

  • RĂ©pertoires gigantesques.
  • Aucune possibilitĂ© de versioning.
  • DifficultĂ© de suivi des modifications des ressources communes.
  • DifficultĂ© de mise Ă  jour des ressources communes.

2. Sous-modules Git — partage de ressources communes via des sous-modules externes.

Avantages :

  • Il est possible de travailler avec des sources.
  • Il est possible de partager des ressources.
  • Aucun problĂšme de dĂ©pendances.

Inconvénients :

  • NĂ©cessite des compĂ©tences en Git.
  • Git ne gĂšre pas trĂšs bien les fichiers binaires — il faudra utiliser LFS.
  • ContrĂŽle d'accĂšs pour les rĂ©pertoires.
  • DifficultĂ©s lors de l'augmentation et de la diminution des versions.
  • Des collisions de GUID sont possibles et il n'y a pas de comportement univoque de la part d'Unity pour les rĂ©soudre.

3. NuGet — partage des bibliothùques communes via des paquets NuGet.

Avantages :

  • Travail pratique avec des projets indĂ©pendants d'Unity.
  • Versioning et rĂ©solution des dĂ©pendances faciles.

Inconvénients :

  • Unity ne sait pas travailler avec des paquets NuGet « par dĂ©faut » (il est possible de trouver sur GitHub un gestionnaire de paquets NuGet pour Unity qui corrige cela, mais il y a des nuances).
  • DifficultĂ©s lors du partage d'autres types de ressources.

4. Gestionnaire de paquets Unity — partage de ressources communes via une solution native pour Unity.

Avantages :

  • Interface native pour travailler avec des paquets.
  • Protection contre l'Ă©crasement des fichiers .meta dans les paquets lors des conflits de GUID.
  • PossibilitĂ© de versioning.
  • PossibilitĂ© de partager tous les types de ressources pour Unity.

Inconvénients :

  • Des conflits de GUID peuvent toujours survenir.
  • Aucune documentation pour la mise en Ɠuvre.

La derniÚre méthode présente plus d'avantages que d'inconvénients. Cependant, elle n'est pas trÚs populaire en raison de l'absence de documentation, et c'est pourquoi nous allons nous y attarder en détail.

Gestionnaire de packages Unity

Unity Package Manager (ci-aprÚs UPM) est un outil de gestion des paquets. Il a été ajouté à Unity 2018.1 et n'était utilisé que pour les paquets développés par Unity Technologies. Cependant, à partir de la version 2018.3, il est possible d'ajouter des paquets personnalisés.

Gestionnaire de packages Unity
Interface de Unity Package Manager

Les paquets ne se trouvent pas dans les sources du projet (répertoire Assets). Ils se trouvent dans un répertoire séparé. %projectFolder%/Library/PackageCache et n'influencent en rien le projet, leur seule mention dans les sources se trouve dans le fichier packages/manifest.json.

Gestionnaire de packages Unity
Paquets dans le systĂšme de fichiers du projet

Sources des paquets

UPM peut utiliser plusieurs sources de paquets :

1. SystĂšme de fichiers.

Avantages :

  • Vitesse de mise en Ɠuvre.
  • Ne nĂ©cessite pas d'outils tiers.

Inconvénients :

  • ComplexitĂ© de la gestion des versions.
  • Un accĂšs commun au systĂšme de fichiers est nĂ©cessaire pour tous ceux qui travaillent sur le projet.

2. DépÎt Git.

Avantages :

  • Seul un dĂ©pĂŽt Git est nĂ©cessaire.

Inconvénients :

  • Il n'est pas possible de changer de version via l'interface UPM.
  • Ne fonctionne pas avec tous les dĂ©pĂŽts Git.

3. DépÎt npm.

Avantages :

  • Prend entiĂšrement en charge la fonctionnalitĂ© UPM et est utilisĂ© pour distribuer les paquets Unity officiels.

Inconvénients :

  • Actuellement, toutes les versions de chaĂźne de paquets, sauf "-preview", sont ignorĂ©es.

Nous examinerons ci-dessous la mise en Ɠuvre de UPM + npm. Cette combinaison est pratique car elle permet de travailler avec tous les types de ressources et de gĂ©rer les versions des paquets tout en prenant en charge l'interface native UPM.

Comme dépÎt npm, on peut utiliser Verdaccio. Une documentation détaillée est disponible, et son lancement nécessite littéralement quelques commandes. documentationConfiguration de l'environnement

Pour commencer, vous devez installer

Création d'un paquet node.js.

Pour créer un paquet, il est nécessaire de placer le fichier

, qui le décrira, dans le répertoire contenant le contenu de ce paquet. Voici ce qu'il faut faire : package.jsonAccédez au répertoire du projet que vous souhaitez transformer en paquet.

Exécutez la commande npm init et pendant le dialogue, saisissez les valeurs nécessaires. Pour name, indiquez un nom au format inverse de domaine, par exemple com.plarium.somepackage.

Pour une meilleure affichage du nom du paquet, ajoutez la propriété displayName dans le package.json et remplissez-la.
Étant donnĂ© que npm est orientĂ© vers js, le fichier contient des propriĂ©tĂ©s main et scripts qui ne nous sont pas utiles et que Unity n'utilise pas. Il vaut mieux les supprimer pour ne pas encombrer la description du paquet. Le fichier doit ressembler Ă  ceci :

Étant donnĂ© que npm est orientĂ© vers le JS, le fichier contient des propriĂ©tĂ©s main et scripts qui ne sont pas nĂ©cessaires pour Unity. Il est prĂ©fĂ©rable de les supprimer afin de ne pas surcharger la description du paquet. Le fichier devrait ressembler Ă  ceci :

  1. Exécutez la commande npm init et pendant le dialogue, saisissez les valeurs nécessaires. Pour name, indiquez un nom au format inverse de domaine, par exemple com.plarium.somepackage.
  2. Pour une meilleure affichage du nom du paquet, ajoutez la propriété displayName dans le package.json et remplissez-la.
  3. Étant donnĂ© que npm est orientĂ© vers js, le fichier contient des propriĂ©tĂ©s main et scripts qui ne nous sont pas utiles et que Unity n'utilise pas. Il vaut mieux les supprimer pour ne pas encombrer la description du paquet. Le fichier doit ressembler Ă  ceci :
  4. Étant donnĂ© que npm est orientĂ© vers le JS, le fichier contient des propriĂ©tĂ©s main et scripts qui ne sont pas nĂ©cessaires pour Unity. Il est prĂ©fĂ©rable de les supprimer afin de ne pas surcharger la description du paquet. Le fichier devrait ressembler Ă  ceci :
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Ouvrez Unity et générez un fichier .meta pour package.json (Unity ne voit pas les assets sans fichiers .meta, les packages pour Unity s'ouvrent en mode lecture seule).

Envoi de package

Pour envoyer le package, vous devez exécuter la commande : npm publish --registry *adresse du dépÎt de packages*.

Installation et mise Ă  jour des packages via le gestionnaire de packages Unity

Pour ajouter un package Ă  un projet Unity, il faut :

  1. Modifier le fichier manifest.json avec les informations sur la source des packages. Pour cela, il faut ajouter la propriĂ©tĂ© scopedRegistries et indiquer les scopes et l'adresse de la source oĂč seront recherchĂ©s les scopes spĂ©cifiques.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "adresse du dépÎt de packages",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. AccĂ©dez Ă  Unity et ouvrez la fenĂȘtre du gestionnaire de packages (le travail avec des packages personnalisĂ©s ne diffĂšre pas de celui avec les intĂ©grĂ©s).
  3. Sélectionnez Tous les Packages.
  4. Trouvez le package requis et ajoutez-le.

Gestionnaire de packages Unity

Travail avec les sources et débogage

Pour que les sources se connectent au projet, vous devez créer un Assembly Definition pour le package.

L'utilisation des packages ne limite pas les possibilités de débogage. Cependant, lors de l'utilisation de packages dans Unity, il n'est pas possible de passer à l'IDE en cliquant sur une erreur dans la console, si l'erreur s'est produite dans le package. Cela est dû au fait qu'Unity ne voit pas les scripts comme des fichiers distincts, car lors de l'utilisation de l'Assembly Definition, ils sont compilés dans une bibliothÚque et intégrés au projet. Lors de l'utilisation des sources du projet, le passage à l'IDE par un clic est disponible.

Script dans un projet avec un package connecté :

Gestionnaire de packages Unity
Script du package avec un point d'arrĂȘt actif :

Gestionnaire de packages Unity

Modifications urgentes dans les packages

Les packages Unity ajoutĂ©s au projet sont en lecture seule, mais ils peuvent ĂȘtre modifiĂ©s dans le cache des packages. Pour cela, vous devez :

  1. Accéder au package dans le cache des packages.

    Gestionnaire de packages Unity

  2. Apporter les modifications nécessaires.
  3. Mettre Ă  jour la version dans le fichier package.json.
  4. Envoyer le package npm publish --registry *adresse du dépÎt de packages*.
  5. Mettre à jour la version du package corrigée via l'interface UPM.

Conflits d'importation de packages

Lors de l'importation de packages, les conflits de GUID suivants peuvent survenir :

  1. Package — package. Si, lors de l'importation d'un package, il s'avĂšre que dans les packages dĂ©jĂ  ajoutĂ©s, il existe des assets avec le mĂȘme GUID, les assets avec des GUID correspondants du package importĂ© ne seront pas ajoutĂ©s au projet.
  2. Un paquet est un projet. Si, lors de l'importation d'un paquet, des actifs avec des GUIDs correspondants sont détectés dans le projet, ces actifs ne seront pas ajoutés au projet. Cependant, les actifs qui en dépendent commenceront à utiliser les actifs du projet.

Transfert des actifs du projet vers le paquet

Si un actif est transféré du projet vers le paquet pendant que Unity est ouvert, sa fonctionnalité sera conservée et les références dans les actifs dépendants commenceront à utiliser l'actif du paquet.

Important: lors de la copie d'un actif du projet vers le paquet, un conflit « Paquet – projet » se produira, comme dĂ©crit dans la section prĂ©cĂ©dente.

Solutions possibles aux conflits

  1. Réaffectation des GUIDs selon des algorithmes propres lors de l'importation de tous les actifs, afin d'éviter les collisions.
  2. Ajout de tous les actifs dans un seul projet puis leur division en paquets.
  3. Création d'une base de données contenant les GUIDs de tous les actifs et validation lors de l'envoi des paquets.

Conclusion

UPM est une nouvelle solution pour la distribution de ressources partagées sur Unity, qui peut devenir une alternative valable aux méthodes existantes. Les recommandations décrites dans l'article sont basées sur des cas réels. Nous espérons qu'elles vous seront utiles.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster