Gestor de paquets Unity

Unity és una plataforma que fa força temps i està en constant evolució. Tanmateix, quan hi treballeu amb diversos projectes alhora, encara podeu trobar dificultats per utilitzar fonts comunes (.cs), biblioteques (.dll) i altres actius (imatges, sons, models, prefabricats). En aquest article parlarem de la nostra experiència amb una solució nativa a aquest problema per a Unity.

Gestor de paquets Unity

Mètodes de distribució de recursos compartits

Hi ha més d'una manera d'utilitzar recursos compartits per a diferents projectes, però cada enfocament té els seus pros i contres.

1. Duplicació: dupliquem recursos entre projectes "a mà".

Pros:

  • Apte per a tot tipus de recursos.
  • Sense problemes de dependència.
  • No hi ha problemes amb els GUID de recursos.

Contres:

  • Repositoris gegants.
  • No hi ha possibilitat de versionar.
  • Dificultat per fer un seguiment dels canvis als recursos compartits.
  • Dificultat per actualitzar els recursos compartits.

2. Submòduls Git — distribució de recursos compartits mitjançant submòduls externs.

Pros:

  • Podeu treballar amb les fonts.
  • Podeu distribuir actius.
  • Sense problemes de dependència.

Contres:

  • Es requereix experiència Git.
  • Git no és molt amigable amb els fitxers binaris: haureu de connectar LFS.
  • Control d'accés als repositoris.
  • Dificultat per actualitzar i baixar versions.
  • Les col·lisions GUID són possibles i no hi ha cap comportament clar per part de Unity per resoldre'ls.

3. NuGet - distribució de biblioteques compartides mitjançant paquets NuGet.

Pros:

  • Treball convenient amb projectes que no depenen de Unity.
  • Versions convenient i resolució de dependències.

Contres:

  • Unity no pot funcionar amb paquets NuGet des de la caixa (a GitHub podeu trobar NuGet Package Manager per a Unity, que soluciona això, però hi ha alguns matisos).
  • Dificultats per distribuir altres tipus d'actius.

4. Unity Package Manager: distribució de recursos compartits mitjançant una solució nativa per a Unity.

Pros:

  • Interfície nativa per treballar amb paquets.
  • Protecció contra la sobreescritura de fitxers .meta als paquets a causa de conflictes de GUID.
  • Possibilitat de versionar.
  • Capacitat de distribuir tot tipus de recursos per a Unity.

Contres:

  • Encara es poden produir conflictes de GUID.
  • No hi ha documentació per a la implementació.

Aquest últim mètode té més avantatges que desavantatges. No obstant això, ara no és gaire popular per la manca de documentació i, per tant, ens hi atendrem amb detall.

Gestor de paquets Unity

Unity Package Manager (UPM) és una eina de gestió de paquets. Es va afegir a Unity 2018.1 i només es va utilitzar per a paquets desenvolupats per Unity Technologies. Tanmateix, a partir de la versió 2018.3, es va fer possible afegir paquets personalitzats.

Gestor de paquets Unity
Interfície del gestor de paquets Unity

Els paquets no acaben a les fonts del projecte (directori d'actius). Estan en un directori separat %projectFolder%/Library/PackageCache i no afecten el projecte de cap manera, la seva única menció al codi font es troba al fitxer packages/manifest.json.

Gestor de paquets Unity
Paquets al sistema de fitxers del projecte

Fonts de paquets

UPM pot utilitzar diverses fonts de paquets:

1. Sistema de fitxers.

Pros:

  • Velocitat d'implementació.
  • No requereix eines de tercers.

Contres:

  • Dificultat per versionar.
  • L'accés compartit al sistema de fitxers és necessari per a tothom que treballi amb el projecte.

2. Repositori Git.

Pros:

  • Tot el que necessiteu és un repositori Git.

Contres:

  • No podeu canviar entre versions a través de la finestra UPM.
  • No funciona amb tots els repositoris Git.

3. dipòsit npm.

Pros:

  • Admet totalment la funcionalitat UPM i s'utilitza per distribuir paquets oficials d'Unity.

Contres:

  • Actualment ignora totes les versions de cadena dels paquets excepte "-preview".

A continuació veurem la implementació d'UPM + npm. Aquest paquet és convenient perquè us permet treballar amb qualsevol tipus de recurs i gestionar versions de paquets, i també és compatible amb la interfície nativa d'UPM.

Podeu utilitzar-lo com a repositori npm Verdaccio. Hi ha un detallat documentació, i només calen un parell d'ordres per executar-lo.

Configuració de l'entorn

Primer cal instal·lar-lo NODE.JS.

Creació d'un paquet

Per crear un paquet, heu de col·locar el fitxer package.json, que el descriu, al directori amb el contingut d'aquest paquet. Heu de fer el següent:

Aneu al directori del projecte que volem fer un paquet.

Executeu l'ordre npm init i introduïu els valors requerits durant el diàleg. Per al nom, especifiqueu el nom en format de domini invers, per exemple com.plarium.somepackage.
Per mostrar còmodament el nom del paquet, afegiu la propietat displayName a package.json i ompliu-lo.

Com que npm està orientat a js, el fitxer conté les propietats main i scripts que no necessitem, que Unity no utilitza. És millor eliminar-los per no desordenar la descripció del paquet. El fitxer hauria de semblar a això:

  1. Aneu al directori del projecte que volem fer un paquet.
  2. Executeu l'ordre npm init i introduïu els valors requerits durant el diàleg. Per al nom, especifiqueu el nom en format de domini invers, per exemple com.plarium.somepackage.
  3. Per mostrar còmodament el nom del paquet, afegiu la propietat displayName a package.json i ompliu-lo.
  4. Com que npm està orientat a js, el fitxer conté les propietats main i scripts que no necessitem, que Unity no utilitza. És millor eliminar-los per no desordenar la descripció del paquet. El fitxer hauria de semblar a això:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Obriu Unity i genereu un fitxer .meta per a package.json (Unity no veu els actius sense fitxers .meta, els paquets per a Unity s'obren només de lectura).

Enviament d'un paquet

Per enviar el paquet cal que executeu l'ordre: npm publish --registry *адрес до хранилища пакетов*.

Instal·lació i actualització de paquets mitjançant Unity Package Manager

Per afegir un paquet a un projecte Unity, necessiteu:

  1. Afegeix al fitxer manifest.json informació sobre l'origen dels paquets. Per fer-ho, cal afegir la propietat scopedRegistries i indiqueu els àmbits i l'adreça d'origen on es cercaran àmbits específics.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Aneu a Unity i obriu la finestra Gestor de paquets (treballar amb paquets personalitzats no és diferent de treballar amb els integrats).
  3. Seleccioneu Tots els paquets.
  4. Trobeu el paquet que necessiteu i afegiu-lo.

Gestor de paquets Unity

Treball amb fonts i depuració

Per tal que les fonts es connectin al projecte, cal crear Definició de muntatge pel paquet.

L'ús de paquets no limita les vostres opcions de depuració. Tanmateix, quan treballeu amb paquets a Unity, no podeu anar a l'IDE fent clic a un error a la consola si l'error s'ha produït al paquet. Això es deu al fet que Unity no veu els scripts com a fitxers separats, ja que quan s'utilitza la definició d'assembly es recullen en una biblioteca i s'inclouen al projecte. Quan es treballa amb fonts d'un projecte, es pot fer clic a l'IDE.

Script en un projecte amb un paquet connectat:

Gestor de paquets Unity
Script del paquet amb un punt d'interrupció de treball:

Gestor de paquets Unity

Correccions urgents als paquets

Els paquets Unity afegits a un projecte són només de lectura, però es poden editar a la memòria cau del paquet. Per fer-ho necessites:

  1. Aneu al paquet a la memòria cau del paquet.

    Gestor de paquets Unity

  2. Feu els canvis necessaris.
  3. Actualitza la versió al fitxer package.json.
  4. Enviar paquet npm publish --registry *адрес до хранилища пакетов*.
  5. Actualitzeu la versió del paquet a la corregida mitjançant la interfície UPM.

Conflictes d'importació de paquets

Es poden produir els següents conflictes de GUID en importar paquets:

  1. Paquet - paquet. Si, en importar un paquet, es descobreix que els paquets ja afegits contenen actius amb el mateix GUID, els actius amb GUID coincidents del paquet importat no s'afegiran al projecte.
  2. Un paquet és un projecte. Si, en importar un paquet, es descobreix que el projecte conté actius amb GUID coincidents, els actius del paquet no s'afegiran al projecte. Tanmateix, els actius que en depenguin començaran a utilitzar els actius del projecte.

Transferència d'actius d'un projecte a un paquet

Si transferiu un actiu d'un projecte a un paquet mentre l'Unity està obert, la seva funcionalitat es conservarà i els enllaços dels actius dependents començaran a utilitzar l'actiu del paquet.

És important: Quan copieu un actiu d'un projecte a un paquet, es produirà el conflicte "Paquet - Projecte" descrit a la secció anterior.

Possibles solucions als conflictes

  1. Reassignació de GUID mitjançant els nostres propis algorismes quan s'importen tots els actius per eliminar les col·lisions.
  2. Afegir tots els actius a un projecte i després dividir-los en paquets.
  3. Creació d'una base de dades que contingui els GUID de tots els actius i realització de la validació en enviar paquets.

Conclusió

UPM és una nova solució per distribuir recursos compartits a Unity, que pot ser una alternativa digna als mètodes existents. Les recomanacions descrites a l'article es van basar en casos reals. Esperem que us siguin útils.

Font: www.habr.com

Afegeix comentari