Administrador de paquetes de Unity

Unity es una plataforma que existe desde hace mucho tiempo y está en constante evolución. Sin embargo, al trabajar en él con varios proyectos al mismo tiempo, aún puede encontrar dificultades para usar fuentes comunes (.cs), bibliotecas (.dll) y otros activos (imágenes, sonidos, modelos, prefabricados). En este artículo, hablaremos sobre nuestra experiencia trabajando con una solución nativa a tal problema para Unity.


Métodos de distribución de recursos compartidos


Hay más de una forma de usar recursos compartidos para diferentes proyectos, pero cada enfoque tiene sus ventajas y desventajas.

1. Duplicación: recursos duplicados "manos" entre proyectos.

Pros:

  • Apto para todo tipo de recursos.
  • Sin problemas de dependencia.
  • No hay problema con los GUID de activos.

Contras:

  • Repositorios gigantes.
  • No hay versiones posibles.
  • La dificultad de realizar un seguimiento de los cambios en los recursos compartidos.
  • Dificultad para actualizar recursos compartidos.

2. Submódulos de Git : distribución de recursos compartidos a través de submódulos externos.

Pros:

  • Puedes trabajar con códigos fuente.
  • Los activos pueden ser distribuidos.
  • Sin problemas de dependencia.

Contras:

  • Git habilidades necesarias.
  • Git no es muy amigable con los archivos binarios: debe conectar LFS.
  • Control de acceso para repositorios.
  • Dificultades en la actualización y degradación.
  • Las colisiones de GUID son posibles y no existe un comportamiento inequívoco por parte de Unity para resolverlas.

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

Pros:

  • Trabajo conveniente con proyectos que no dependen de Unity.
  • Conveniente versionado y resolución de dependencias.

Contras:
  • Unity no sabe cómo trabajar con paquetes NuGet listos para usar (en GitHub puede encontrar NuGet Package Manager para Unity, que soluciona esto, pero hay algunos matices).
  • Dificultades para distribuir otros tipos de activos.

4. Unity Package Manager: distribución de recursos compartidos a través de una solución nativa para Unity.

Pros:

  • Interfaz nativa para trabajar con paquetes.
  • Protección contra sobrescritura de archivos .meta en paquetes en caso de conflictos GUID.
  • Posibilidad de versionar.
  • La capacidad de distribuir todo tipo de recursos para Unity.

Contras:

  • Los conflictos GUID aún pueden ocurrir.
  • No hay documentación para implementar.

El último método tiene más ventajas que desventajas. Sin embargo, no es muy popular en este momento debido a la falta de documentación y, por lo tanto, nos detendremos en detalle.

Administrador de paquetes de Unity


Unity Package Manager (en adelante, UPM) es una herramienta de gestión de paquetes. Se agregó en Unity 2018.1, y se usó solo para paquetes desarrollados por Unity Technologies. Sin embargo, a partir de la versión 2018.3, se hizo posible agregar paquetes personalizados.


Interfaz de Unity Package Manager

Los paquetes no se incluyen en las fuentes del proyecto (directorio de activos). Están ubicados en un directorio separado %projectFolder%/Library/PackageCache y no afectan el proyecto de ninguna manera, su única mención en las fuentes está en el archivo packages/manifest.json .


Paquetes en el sistema de archivos del proyecto

Fuentes de paquete


UPM puede usar varias fuentes de paquetes:

1. El sistema de archivos.

Pros:

  • Velocidad de implementación.
  • No se requieren herramientas de terceros.

Contras:

  • La complejidad de las versiones.
  • Se requiere compartir archivos para todos los que trabajan con el proyecto.

2. Repositorio de Git.

Pros:

  • Solo se necesita un repositorio Git.

Contras:

  • No puede cambiar entre versiones a través de la ventana UPM.
  • No funciona con todos los repositorios de Git.

3. repositorio npm.

Pros:

  • Totalmente compatible con la funcionalidad UPM y se utiliza para distribuir paquetes oficiales de Unity.

Contras:

  • Actualmente, ignora todas las versiones en cadena de los paquetes, excepto "-preview".

A continuación vemos la implementación de UPM + npm. Este paquete es conveniente porque le permite trabajar con cualquier tipo de recursos y administrar versiones de paquetes, y también es totalmente compatible con la interfaz nativa de UPM.

Puede usar Verdaccio como repositorio npm. Hay documentación detallada para ello, y se necesitarán solo un par de comandos para iniciarlo.

Entorno


Primero necesitas instalar node.js.

Creación de paquetes


Para crear un paquete, debe colocar el archivo package.json , que lo describirá, en el directorio con el contenido de este paquete. Debes hacer lo siguiente:

  1. Vaya al directorio del proyecto que queremos hacer un paquete.
  2. Ejecute el comando npm init e ingrese los valores requeridos durante el diálogo. Para nombre, especifique el nombre en el formato del dominio inverso, por ejemplo com.plarium.somepackage .
  3. Para mostrar convenientemente el nombre del paquete, agregue la propiedad displayName a package.json y package.json .
  4. Dado que npm está orientado a js, el archivo contiene propiedades que no necesitamos y scripts main que Unity no utiliza. Es mejor eliminarlos para no saturar la descripción del paquete. El archivo debería verse así:

     { "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" } 

  5. Abra Unity y genere un archivo .meta para package.json (Unity no ve activos sin archivos .meta, los paquetes para Unity se abren solo para lectura).

Envío de paquetes


Para enviar un paquete, debe ejecutar el comando: npm publish --registry * * .

Instalar y actualizar paquetes a través de Unity Package Manager


Para agregar un paquete a un proyecto de Unity, necesita:

  1. Agregue información de origen del paquete al archivo manifest.json . Para hacer esto, agregue la propiedad scopedRegistries y especifique los ámbitos y la dirección de origen donde se buscarán ámbitos específicos.

     "scopedRegistries": [ { "name": "Main", "url": "   ", "scopes": [ "com.plarium" ] } ] 
  2. Vaya a Unity y abra la ventana Administrador de paquetes (trabajar con paquetes personalizados no es diferente de trabajar con paquetes integrados).
  3. Seleccione todos los paquetes.
  4. Encuentre el paquete que necesita y agréguelo.


Trabaja con fuentes y depuración


Para que las fuentes se conecten al proyecto, debe crear una Definición de ensamblaje para el paquete.

El uso de paquetes no limita las capacidades de depuración. Sin embargo, cuando trabaje con paquetes en Unity, no puede ir al IDE haciendo clic en un error en la consola si el error ocurrió en el paquete. Esto se debe al hecho de que Unity no ve los scripts como archivos separados, porque cuando se usa la Definición de ensamblaje, se recopilan en una biblioteca y se conectan al proyecto. Al trabajar con códigos fuente de un proyecto, está disponible el cambio al IDE por clic.

El script en el proyecto con el paquete conectado:


Script del paquete con un punto de interrupción de trabajo:


Correcciones urgentes de parches


Los paquetes de Unity agregados al proyecto son de solo lectura, pero se pueden editar en la caché del paquete. Para hacer esto, debes:

  1. Vaya al paquete en la caché del paquete.


  2. Haz los cambios necesarios.
  3. Actualice la versión en el archivo package.json .
  4. Enviar paquete npm publish --registry * * .
  5. Actualice la versión del paquete a la corregida a través de la interfaz UPM.

Conflictos de importación de paquetes


Al importar paquetes, pueden ocurrir los siguientes conflictos de GUID:

  1. Paquete - paquete. Si, al importar un paquete, parece que los paquetes ya agregados tienen activos con el mismo GUID, los activos con GUID coincidentes del paquete importado no se agregarán al proyecto.
  2. Un paquete es un proyecto. Si, al importar un paquete, parece que el proyecto tiene activos con GUID coincidentes, entonces los activos del paquete no se agregarán al proyecto. Sin embargo, los activos que dependen de ellos comenzarán a usar los activos del proyecto.

Transferencia de activos de un proyecto a un paquete


Si transfiere activos de un proyecto a un paquete con Unity abierto, se preservará su funcionalidad y los enlaces en activos dependientes comenzarán a usar activos del paquete.

Importante : cuando copia un activo de un proyecto a un paquete, se producirá el conflicto "Paquete - Proyecto", como se describe en la sección anterior.

Posibles soluciones de conflictos


  1. Reasignación de GUID de acuerdo con sus propios algoritmos al importar todos los activos para evitar colisiones.
  2. Agregar todos los activos a un proyecto con su posterior división en paquetes.
  3. Creación de una base de datos que contiene GUID de todos los activos y validación al enviar paquetes.

Conclusión


UPM es una nueva solución para distribuir recursos compartidos a Unity, que puede ser una alternativa digna a los métodos existentes. Las recomendaciones descritas en el artículo surgieron sobre la base de casos reales. Esperamos que les sean de utilidad.

Source: https://habr.com/ru/post/445432/


All Articles