Gestore pacchetti Unity

Unity è una piattaforma che esiste da parecchio tempo ed è in continua evoluzione. Tuttavia, quando si lavora con più progetti contemporaneamente, è ancora possibile incontrare difficoltà nell'utilizzo di fonti comuni (.cs), librerie (.dll) e altre risorse (immagini, suoni, modelli, prefabbricati). In questo articolo parleremo della nostra esperienza con una soluzione nativa a questo problema per Unity.

Gestore pacchetti Unity

Metodi di distribuzione delle risorse condivise

Esiste più di un modo per utilizzare le risorse condivise per diversi progetti, ma ogni approccio ha i suoi pro e i suoi contro.

1. Duplicazione: duplichiamo le risorse tra progetti “a mano”.

pro:

  • Adatto a tutti i tipi di risorse.
  • Nessun problema di dipendenza.
  • Non ci sono problemi con i GUID delle risorse.

contro:

  • Repository giganti.
  • Non c'è possibilità di controllo delle versioni.
  • Difficoltà a tenere traccia delle modifiche alle risorse condivise.
  • Difficoltà nell'aggiornamento delle risorse condivise.

2. Sottomoduli Git — distribuzione delle risorse condivise tramite sottomoduli esterni.

pro:

  • Puoi lavorare con le fonti.
  • Puoi distribuire le risorse.
  • Nessun problema di dipendenza.

contro:

  • È richiesta esperienza con Git.
  • Git non è molto amichevole con i file binari: dovrai connettere LFS.
  • Controllo degli accessi per i repository.
  • Difficoltà con le versioni di aggiornamento e downgrade.
  • Sono possibili collisioni GUID e non esiste un comportamento chiaro da parte di Unity per risolverle.

3. NuGet: distribuzione di librerie condivise tramite pacchetti NuGet.

pro:

  • Lavoro conveniente con progetti che non dipendono da Unity.
  • Comodo controllo delle versioni e risoluzione delle dipendenze.

contro:

  • Unity non può funzionare con i pacchetti NuGet pronti all'uso (su GitHub puoi trovare NuGet Package Manager per Unity, che risolve questo problema, ma ci sono alcune sfumature).
  • Difficoltà nella distribuzione di altre tipologie di asset.

4. Unity Package Manager: distribuzione di risorse condivise tramite una soluzione nativa per Unity.

pro:

  • Interfaccia nativa per lavorare con i pacchetti.
  • Protezione contro la sovrascrittura di file .meta nei pacchetti a causa di conflitti GUID.
  • Possibilità di versionamento.
  • Capacità di distribuire tutti i tipi di risorse per Unity.

contro:

  • Possono ancora verificarsi conflitti GUID.
  • Non esiste documentazione per l'implementazione.

Quest'ultimo metodo presenta più vantaggi che svantaggi. Tuttavia, ora non è molto popolare a causa della mancanza di documentazione, quindi ci soffermeremo su di esso in dettaglio.

Gestore pacchetti Unity

Unity Package Manager (UPM) è uno strumento di gestione dei pacchetti. È stato aggiunto in Unity 2018.1 ed è stato utilizzato solo per i pacchetti sviluppati da Unity Technologies. Tuttavia, a partire dalla versione 2018.3, è diventato possibile aggiungere pacchetti personalizzati.

Gestore pacchetti Unity
Interfaccia di gestione pacchetti Unity

I pacchetti non finiscono nelle origini del progetto (directory Assets). Si trovano in una directory separata %projectFolder%/Library/PackageCache e non influenzano in alcun modo il progetto, la loro unica menzione nel codice sorgente è nel file packages/manifest.json.

Gestore pacchetti Unity
Pacchetti nel file system del progetto

Origini del pacchetto

UPM può utilizzare diverse origini di pacchetti:

1. Sistema di file.

pro:

  • Velocità di implementazione.
  • Non richiede strumenti di terze parti.

contro:

  • Difficoltà nel controllo delle versioni.
  • È richiesto l'accesso condiviso al file system per tutti coloro che lavorano al progetto.

2. Repository Git.

pro:

  • Tutto ciò di cui hai bisogno è un repository Git.

contro:

  • Non è possibile passare da una versione all'altra tramite la finestra UPM.
  • Non funziona con tutti i repository Git.

3. archivio npm.

pro:

  • Supporta pienamente la funzionalità UPM e viene utilizzato per distribuire i pacchetti Unity ufficiali.

contro:

  • Attualmente ignora tutte le versioni in formato stringa dei pacchetti tranne "-preview".

Di seguito esamineremo l'implementazione UPM + npm. Questo pacchetto è conveniente perché ti consente di lavorare con qualsiasi tipo di risorsa e gestire le versioni dei pacchetti, oltre a supportare completamente l'interfaccia UPM nativa.

Puoi usarlo come repository npm Verdaccio. C'è un dettagliato la documentazione, e per eseguirlo sono necessari solo un paio di comandi.

Configurazione dell'ambiente

Per prima cosa devi installare node.js.

Creazione di un pacchetto

Per creare un pacchetto, è necessario posizionare il file package.json, che lo descriverà, nella directory con il contenuto di questo pacchetto. È necessario effettuare le seguenti operazioni:

Vai alla directory del progetto in cui vogliamo creare un pacchetto.

Esegui il comando npm init e inserisci i valori richiesti durante la finestra di dialogo. Per nome, specificare il nome nel formato di dominio inverso, ad esempio com.plarium.somepackage.
Per visualizzare comodamente il nome del pacchetto, aggiungi la proprietà displayName a package.json e compilalo.

Poiché npm è orientato a js, il file contiene le proprietà principali e degli script di cui non abbiamo bisogno, che Unity non utilizza. È meglio rimuoverli per non ingombrare la descrizione del pacchetto. Il file dovrebbe assomigliare a questo:

  1. Vai alla directory del progetto in cui vogliamo creare un pacchetto.
  2. Esegui il comando npm init e inserisci i valori richiesti durante la finestra di dialogo. Per nome, specificare il nome nel formato di dominio inverso, ad esempio com.plarium.somepackage.
  3. Per visualizzare comodamente il nome del pacchetto, aggiungi la proprietà displayName a package.json e compilalo.
  4. Poiché npm è orientato a js, il file contiene le proprietà principali e degli script di cui non abbiamo bisogno, che Unity non utilizza. È meglio rimuoverli per non ingombrare la descrizione del pacchetto. Il file dovrebbe assomigliare a questo:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Apri Unity e genera un file .meta per package.json (Unity non vede le risorse senza file .meta, i pacchetti per Unity sono aperti in sola lettura).

Invio di un pacco

Per inviare il pacco è necessario eseguire il comando: npm publish --registry *адрес до хранилища пакетов*.

Installazione e aggiornamento dei pacchetti tramite Unity Package Manager

Per aggiungere un pacchetto a un progetto Unity, è necessario:

  1. Aggiungi al file manifest.json informazioni sulla provenienza dei pacchetti. Per fare ciò è necessario aggiungere la proprietà scopedRegistries e indicare gli ambiti e l'indirizzo di origine in cui verranno ricercati ambiti specifici.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Vai su Unity e apri la finestra Gestione pacchetti (lavorare con pacchetti personalizzati non è diverso da lavorare con quelli integrati).
  3. Seleziona tutti i pacchetti.
  4. Trova il pacchetto che ti serve e aggiungilo.

Gestore pacchetti Unity

Lavorare con i sorgenti e fare il debug

Affinché le fonti possano essere collegate al progetto, è necessario creare Definizione di assemblaggio per il pacchetto.

L'uso dei pacchetti non limita le opzioni di debug. Tuttavia, quando si lavora con i pacchetti in Unity, non è possibile accedere all'IDE facendo clic su un errore nella console se l'errore si è verificato nel pacchetto. Ciò è dovuto al fatto che Unity non vede gli script come file separati, poiché quando si utilizza Assembly Definition vengono raccolti in una libreria e inclusi nel progetto. Quando si lavora con le fonti di un progetto, è possibile fare clic sull'IDE.

Script in un progetto con un pacchetto connesso:

Gestore pacchetti Unity
Script dal pacchetto con un punto di interruzione funzionante:

Gestore pacchetti Unity

Correzioni urgenti ai pacchetti

I pacchetti Unity aggiunti a un progetto sono di sola lettura, ma possono essere modificati nella cache dei pacchetti. Per fare questo è necessario:

  1. Vai al pacchetto nella cache dei pacchetti.

    Gestore pacchetti Unity

  2. Apportare le modifiche necessarie.
  3. Aggiorna la versione nel file package.json.
  4. Invia pacco npm publish --registry *адрес до хранилища пакетов*.
  5. Aggiorna la versione del pacchetto a quella corretta tramite l'interfaccia UPM.

Conflitti di importazione dei pacchetti

Potrebbero verificarsi i seguenti conflitti GUID durante l'importazione di pacchetti:

  1. Pacchetto - pacchetto. Se, durante l'importazione di un pacchetto, si scopre che i pacchetti già aggiunti contengono risorse con lo stesso GUID, le risorse con GUID corrispondenti dal pacchetto importato non verranno aggiunte al progetto.
  2. Un pacchetto è un progetto. Se, durante l'importazione di un pacchetto, viene rilevato che il progetto contiene risorse con GUID corrispondenti, le risorse del pacchetto non verranno aggiunte al progetto. Tuttavia, le risorse che dipendono da essi inizieranno a utilizzare le risorse del progetto.

Trasferimento di risorse da un progetto a un pacchetto

Se trasferisci una risorsa da un progetto a un pacchetto mentre Unity è aperto, la sua funzionalità verrà preservata e i collegamenti nelle risorse dipendenti inizieranno a utilizzare la risorsa dal pacchetto.

È importante: quando si copia una risorsa da un progetto a un pacchetto, si verificherà il conflitto "Pacchetto - Progetto" descritto nella sezione precedente.

Possibili soluzioni ai conflitti

  1. Riassegnazione dei GUID utilizzando i nostri algoritmi durante l'importazione di tutte le risorse per eliminare le collisioni.
  2. Aggiungere tutte le risorse a un progetto e quindi dividerle in pacchetti.
  3. Creazione di un database contenente i GUID di tutte le risorse ed esecuzione della convalida durante l'invio di pacchetti.

conclusione

UPM è una nuova soluzione per la distribuzione delle risorse condivise in Unity, che può rappresentare una degna alternativa ai metodi esistenti. Le raccomandazioni descritte nell'articolo erano basate su casi reali. Ci auguriamo che li troviate utili.

Fonte: habr.com

Aggiungi un commento