Administrador de paquetes de Unity

Unity es una plataforma que existe desde hace mucho tiempo y está en constante evolución. Sin embargo, cuando se trabaja con varios proyectos al mismo tiempo, aún se pueden encontrar dificultades al utilizar fuentes comunes (.cs), bibliotecas (.dll) y otros activos (imágenes, sonidos, modelos, casas prefabricadas). En este artículo, hablaremos sobre nuestra experiencia con una solución nativa a este problema para Unity.

Administrador de paquetes de Unity

Métodos de distribución de recursos compartidos

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

1. Duplicación: "a mano" duplicamos recursos 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 posibilidad de versionar.
  • Dificultad para rastrear cambios en 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 fuentes.
  • Puedes distribuir activos.
  • Sin problemas de dependencia.

Contras:

  • Se requieren habilidades de Git.
  • Git no es muy amigable con los archivos binarios; debes incluir LFS.
  • Control de acceso a repositorios.
  • Dificultad para actualizar y degradar.
  • 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.
  • Cómodo control de versiones y resolución de dependencias.

Contras:

  • Unity no sabe cómo trabajar con paquetes NuGet listos para usar (puede encontrar el Administrador de paquetes NuGet para Unity en GitHub, que soluciona este problema, pero hay matices).
  • Dificultades para distribuir otro tipo 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 la sobrescritura de archivos .meta en paquetes en caso de conflictos GUID.
  • Capacidad de versiones.
  • Capacidad de distribuir todo tipo de recursos para Unity.

Contras:

  • Aún pueden ocurrir conflictos GUID.
  • No existe documentación para la implementación.

Este último método tiene más ventajas que desventajas. Sin embargo, ahora no es muy popular debido a la falta de documentación y, por lo tanto, nos detendremos en ello 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 solo se usó para paquetes desarrollados por Unity Technologies. Sin embargo, a partir de la versión 2018.3, fue posible agregar paquetes personalizados.

Administrador de paquetes de Unity
Interfaz del administrador de paquetes de Unity

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

Administrador de paquetes de Unity
Paquetes en el sistema de archivos del proyecto.

Fuentes de paquetes

UPM puede utilizar varias fuentes de paquetes:

1. Sistema de archivos.

Pros:

  • Velocidad de implementación.
  • No requiere herramientas de terceros.

Contras:

  • Complejidad de versiones.
  • Se requiere acceso compartido al sistema de archivos para todos los que trabajan con el proyecto.

2. Repositorio Git.

Pros:

  • Todo lo que necesitas es un repositorio Git.

Contras:

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

3. repositorio npm.

Pros:

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

Contras:

  • Actualmente ignora todas las versiones de cadenas de paquetes excepto "-preview".

Veremos la implementación de UPM + npm a continuación. 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.

Como repositorio npm, puedes usar Verdaccio. Tiene un detallado la documentación, y solo se requieren un par de comandos para ejecutarlo.

Configuración del entorno

Primero necesitas instalar Node.js.

Crear un paquete

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

Vaya al directorio del proyecto en el que queremos crear un paquete.

Ejecute el comando npm init e ingrese los valores requeridos durante el diálogo. Para el nombre, especifique el nombre en formato de dominio inverso, por ejemplo, com.plarium.somepackage.
Para mostrar cómodamente el nombre del paquete, agregue la propiedad displayName a package.json y rellénelo.

Dado que npm está orientado a js, el archivo contiene las propiedades main y scripts que no necesitamos y que Unity no usa. Es mejor eliminarlos para no obstruir la descripción del paquete. El archivo debería verse así:

  1. Vaya al directorio del proyecto en el que queremos crear un paquete.
  2. Ejecute el comando npm init e ingrese los valores requeridos durante el diálogo. Para el nombre, especifique el nombre en formato de dominio inverso, por ejemplo, com.plarium.somepackage.
  3. Para mostrar cómodamente el nombre del paquete, agregue la propiedad displayName a package.json y rellénelo.
  4. Dado que npm está orientado a js, el archivo contiene las propiedades main y scripts que no necesitamos y que Unity no usa. Es mejor eliminarlos para no obstruir 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 los recursos sin archivos .meta, los paquetes de Unity se abren en modo de solo lectura).

enviando un paquete

Para enviar un paquete, debe ejecutar el comando: npm publish --registry *адрес до хранилища пакетов*.

Instalación y actualización de paquetes a través del Administrador de paquetes de Unity

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

  1. escribir al archivo manifest.json información sobre el origen de los paquetes. Para hacer esto, necesita agregar una propiedad. scopedRegistries e indicar los alcances y la dirección de la fuente por la cual se buscarán alcances específicos.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Vaya a Unity y abra la ventana del Administrador de paquetes (trabajar con paquetes personalizados no es diferente de trabajar con los integrados).
  3. Seleccione Todos los paquetes.
  4. Busque el paquete requerido y agréguelo.

Administrador de paquetes de Unity

Trabajar con fuentes y depurar

Para que las fuentes estén conectadas al proyecto, debe crear Definición de ensamblaje para el paquete.

El uso de paquetes no limita el alcance de la depuración. Sin embargo, cuando trabaja 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 a 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 incluyen en el proyecto. Cuando se trabaja con fuentes de un proyecto, está disponible una transición de clic al IDE.

Script en un proyecto con un paquete conectado:

Administrador de paquetes de Unity
Script del paquete con un punto de interrupción funcional:

Administrador de paquetes de Unity

Correcciones urgentes a los paquetes.

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

  1. Vaya al paquete en la caché de paquetes.

    Administrador de paquetes de Unity

  2. Haz los cambios necesarios.
  3. Actualizar versión en 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 de UPM.

Conflictos de importación de paquetes

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

  1. El paquete es un paquete. Si, al importar un paquete, se descubre que los paquetes ya agregados tienen recursos con el mismo GUID, los activos con GUID coincidentes del paquete importado no se agregarán al proyecto.
  2. El paquete es un proyecto. Si, al importar un paquete, se descubre que el proyecto tiene activos con GUID coincidentes, los activos del paquete no se agregarán al proyecto. Sin embargo, los activos que dependen de ellos comenzarán a utilizar los activos del proyecto.

Transferir activos de un proyecto a un paquete

Si transfiere un activo de un proyecto a un paquete mientras Unity está abierto, se conservará su funcionalidad y los enlaces en activos dependientes comenzarán a utilizar el activo del paquete.

Es importante: Al copiar un recurso de un proyecto a un paquete, se producirá el conflicto paquete-proyecto descrito en la sección anterior.

Posibles soluciones a los conflictos.

  1. Reasignación de GUID según algoritmos propios al importar todos los activos para evitar colisiones.
  2. Agregar todos los activos a un proyecto con su posterior separación en paquetes.
  3. Cree una base de datos que contenga los GUID de todos los activos y valídela al enviar paquetes.

Conclusión

UPM es una nueva solución para distribuir recursos compartidos en Unity que puede ser una alternativa valiosa a los métodos existentes. Las recomendaciones descritas en el artículo surgieron a partir de casos reales. Esperamos que los encuentres útiles.

Fuente: habr.com

Añadir un comentario