Xestor de paquetes Unity

Unity é unha plataforma que existe desde hai bastante tempo e está en constante evolución. Non obstante, ao traballar nel con varios proxectos ao mesmo tempo, aínda podes atopar dificultades para usar fontes comúns (.cs), bibliotecas (.dll) e outros recursos (imaxes, sons, modelos, prefabricados). Neste artigo falaremos da nosa experiencia cunha solución nativa a un problema deste tipo para Unity.

Xestor de paquetes Unity

Métodos de distribución de recursos compartidos

Hai máis dunha forma de utilizar recursos compartidos para proxectos diferentes, pero cada enfoque ten os seus pros e contras.

1. Duplicación: duplicamos recursos entre proxectos "a man".

Pros:

  • Apto para todo tipo de recursos.
  • Sen problemas de dependencia.
  • Non hai problemas cos GUID de activos.

Contras:

  • Repositorios xigantes.
  • Non hai posibilidade de versionar.
  • Dificultade para seguir os cambios nos recursos compartidos.
  • Dificultade para actualizar os recursos compartidos.

2. Submódulos Git — distribución de recursos compartidos mediante submódulos externos.

Pros:

  • Podes traballar coas fontes.
  • Podes distribuír activos.
  • Sen problemas de dependencia.

Contras:

  • Requírese experiencia en Git.
  • Git non é moi amigable cos ficheiros binarios - terás que conectar LFS.
  • Control de acceso a repositorios.
  • Dificultade para actualizar e baixar versións.
  • As colisións GUID son posibles e non hai un comportamento claro por parte de Unity para resolvelas.

3. NuGet - distribución de bibliotecas compartidas a través de paquetes NuGet.

Pros:

  • Traballo cómodo con proxectos que non dependen de Unity.
  • Cómodo versión e resolución de dependencias.

Contras:

  • Unity non pode funcionar con paquetes NuGet listos para usar (en GitHub podes atopar o xestor de paquetes NuGet para Unity, que soluciona isto, pero hai algúns matices).
  • Dificultades para distribuír outro tipo de activos.

4. Xestor de paquetes de Unity: distribución de recursos compartidos a través dunha solución nativa para Unity.

Pros:

  • Interface nativa para traballar con paquetes.
  • Protección contra a sobreescritura de ficheiros .meta en paquetes debido a conflitos de GUID.
  • Posibilidade de versionar.
  • Capacidade para distribuír todo tipo de recursos para Unity.

Contras:

  • Aínda poden producirse conflitos de GUID.
  • Non hai documentación para a súa implementación.

Este último método ten máis vantaxes que inconvenientes. Non obstante, agora non é moi popular debido á falta de documentación e, polo tanto, deterémonos en detalle.

Xestor de paquetes Unity

Unity Package Manager (UPM) é unha ferramenta de xestión de paquetes. Engadiuse en Unity 2018.1 e só se utilizou para paquetes que foron desenvolvidos por Unity Technologies. Non obstante, a partir da versión 2018.3, fíxose posible engadir paquetes personalizados.

Xestor de paquetes Unity
Interface do xestor de paquetes de Unity

Os paquetes non acaban nas fontes do proxecto (directorio de activos). Están nun directorio separado %projectFolder%/Library/PackageCache e non afectan de ningún xeito ao proxecto, a súa única mención no código fonte está no ficheiro packages/manifest.json.

Xestor de paquetes Unity
Paquetes no sistema de ficheiros do proxecto

Fontes de paquetes

UPM pode usar varias fontes de paquetes:

1. Sistema de ficheiros.

Pros:

  • Velocidade de implantación.
  • Non require ferramentas de terceiros.

Contras:

  • Dificultade na versión.
  • O acceso compartido ao sistema de ficheiros é necesario para todos os que traballen co proxecto.

2. Repositorio Git.

Pros:

  • Todo o que necesitas é un repositorio Git.

Contras:

  • Non pode cambiar de versión a través da xanela UPM.
  • Non funciona con todos os repositorios Git.

3. repositorio npm.

Pros:

  • Admite totalmente a funcionalidade de UPM e úsase para distribuír paquetes oficiais de Unity.

Contras:

  • Actualmente ignora todas as versións de cadeas dos paquetes excepto "-preview".

A continuación veremos a implementación de UPM + npm. Este paquete é conveniente porque permite traballar con calquera tipo de recurso e xestionar versións de paquetes, ademais de admitir totalmente a interface nativa de UPM.

Podes usalo como repositorio npm Verdaccio. Hai un detallado a documentación, e só son necesarios un par de comandos para executalo.

Configurando o medio ambiente

Primeiro cómpre instalar node.js.

Creando un paquete

Para crear un paquete, cómpre colocar o ficheiro package.json, que o describirá, ao directorio co contido deste paquete. Debes facer o seguinte:

Vaia ao directorio do proxecto no que queremos facer un paquete.

Execute o comando npm init e introduza os valores necesarios durante o diálogo. Para o nome, especifique o nome en formato de dominio inverso, por exemplo com.plarium.somepackage.
Para mostrar comodamente o nome do paquete, engade a propiedade displayName a package.json e enche-o.

Dado que npm está orientado a js, o ficheiro contén as propiedades main e scripts que non necesitamos, que Unity non usa. É mellor eliminalos para non desordenar a descrición do paquete. O ficheiro debería verse algo así:

  1. Vaia ao directorio do proxecto no que queremos facer un paquete.
  2. Execute o comando npm init e introduza os valores necesarios durante o diálogo. Para o nome, especifique o nome en formato de dominio inverso, por exemplo com.plarium.somepackage.
  3. Para mostrar comodamente o nome do paquete, engade a propiedade displayName a package.json e enche-o.
  4. Dado que npm está orientado a js, o ficheiro contén as propiedades main e scripts que non necesitamos, que Unity non usa. É mellor eliminalos para non desordenar a descrición do paquete. O ficheiro debería verse algo así:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Abre Unity e xera un ficheiro .meta para package.json (Unity non ve recursos sen ficheiros .meta, os paquetes para Unity abren só de lectura).

Enviando un paquete

Para enviar o paquete cómpre executar o comando: npm publish --registry *адрес до хранилища пакетов*.

Instalación e actualización de paquetes mediante Unity Package Manager

Para engadir un paquete a un proxecto de Unity, necesitas:

  1. Engadir ao ficheiro manifest.json información sobre a orixe dos paquetes. Para iso cómpre engadir a propiedade scopedRegistries e indique os ámbitos e o enderezo de orixe onde se buscarán ámbitos específicos.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Vaia a Unity e abra a xanela do Xestor de paquetes (traballar con paquetes personalizados non é diferente de traballar con paquetes integrados).
  3. Seleccione Todos os paquetes.
  4. Busca o paquete que necesitas e engádeo.

Xestor de paquetes Unity

Traballar con fontes e depurar

Para que as fontes estean conectadas ao proxecto, cómpre crear Definición de montaxe para o paquete.

O uso de paquetes non limita as opcións de depuración. Non obstante, ao traballar con paquetes en Unity, non pode ir ao IDE facendo clic nun erro na consola se o erro ocorreu no paquete. Isto débese a que Unity non ve os scripts como ficheiros separados, xa que cando se usa a Definición de ensamblaxe recóllense nunha biblioteca e inclúense no proxecto. Cando se traballa con fontes dun proxecto, está dispoñible facer clic no IDE.

Script nun proxecto cun paquete conectado:

Xestor de paquetes Unity
Script do paquete cun punto de interrupción de traballo:

Xestor de paquetes Unity

Correccións urxentes dos paquetes

Os paquetes de Unity engadidos a un proxecto son de só lectura, pero pódense editar na caché de paquetes. Para iso necesitas:

  1. Vaia ao paquete na caché do paquete.

    Xestor de paquetes Unity

  2. Fai os cambios necesarios.
  3. Actualizar a versión no ficheiro package.json.
  4. Enviar paquete npm publish --registry *адрес до хранилища пакетов*.
  5. Actualiza a versión do paquete á corrixida a través da interface UPM.

Conflitos de importación de paquetes

Poden producirse os seguintes conflitos de GUID ao importar paquetes:

  1. Paquete - paquete. Se, ao importar un paquete, se descobre que os paquetes xa engadidos conteñen activos co mesmo GUID, os activos con GUID coincidentes do paquete importado non se engadirán ao proxecto.
  2. Un paquete é un proxecto. Se, ao importar un paquete, se descobre que o proxecto contén activos con GUID coincidentes, entón os recursos do paquete non se engadirán ao proxecto. Non obstante, os activos que dependen deles comezarán a utilizar os activos do proxecto.

Transferencia de activos dun proxecto a un paquete

Se transfire un recurso dun proxecto a un paquete mentres Unity está aberto, a súa funcionalidade conservarase e as ligazóns dos activos dependentes comezarán a utilizar o recurso do paquete.

É importante: ao copiar un recurso dun proxecto a un paquete, producirase o conflito "Paquete - Proxecto" descrito na sección anterior.

Posibles solucións aos conflitos

  1. Reasignando GUID mediante os nosos propios algoritmos ao importar todos os recursos para eliminar colisións.
  2. Engadindo todos os activos a un proxecto e despois dividíndoos en paquetes.
  3. Crear unha base de datos que conteña os GUID de todos os activos e realizar a validación ao enviar paquetes.

Conclusión

UPM é unha nova solución para distribuír recursos compartidos en Unity, que pode ser unha alternativa digna aos métodos existentes. As recomendacións descritas no artigo baseáronse en casos reais. Esperamos que vos resulten útiles.

Fonte: www.habr.com

Engadir un comentario