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