Unity Package Manager

Unity es una plataforma que ha existido durante bastante tiempo y sigue desarrollándose. Sin embargo, al trabajar en varios proyectos simultáneamente, aún se pueden enfrentar dificultades al utilizar fuentes comunes (.cs), bibliotecas (.dll) y otros activos (imágenes, sonidos, modelos, prefabs). En este artículo, compartiremos nuestra experiencia trabajando con una solución nativa para este problema en Unity.

Unity Package Manager

Métodos de distribución de recursos comunes

Existen más de una manera de usar recursos comunes para diferentes proyectos, pero cada enfoque tiene sus propios pros y contras.

1. Duplicación: duplicamos manualmente los recursos entre proyectos.

Pros:

  • Adecuado para todo tipo de recursos.
  • No hay problemas con las dependencias.
  • No hay problemas con los GUIDs de los activos.

Desventajas:

  • Repositorios gigantes.
  • No hay posibilidad de versionado.
  • Dificultad para rastrear cambios en los recursos compartidos.
  • Dificultad para actualizar los recursos compartidos.

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

Pros:

  • Se puede trabajar con las fuentes.
  • Se pueden distribuir activos.
  • No hay problemas con las dependencias.

Desventajas:

  • Se requiere habilidad para trabajar con Git.
  • Git no es muy amigable con los archivos binarios — será necesario conectar LFS.
  • Limitación del acceso a los repositorios.
  • Dificultades al subir y bajar versiones.
  • Pueden ocurrir colisiones de GUIDs y Unity no tiene un comportamiento claro para resolverlas.

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

Pros:

  • Trabajo cómodo con proyectos que no dependen de Unity.
  • Fácil versionado y resolución de dependencias.

Desventajas:

  • Unity no sabe cómo trabajar con paquetes de NuGet "de forma predeterminada" (se puede encontrar en GitHub un Gestor de Paquetes NuGet para Unity que soluciona esto, pero hay matices).
  • Dificultades al distribuir otros tipos de activos.

4. Gestor de Paquetes de Unity: 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 al haber conflictos de GUIDs.
  • Posibilidad de versionado.
  • Posibilidad de distribuir todos los tipos de recursos para Unity.

Desventajas:

  • Aún pueden ocurrir conflictos de GUIDs.
  • No hay documentación para la implementación.

La última opción tiene más ventajas que desventajas. Sin embargo, actualmente no es muy popular debido a la falta de documentación, por lo que nos detendremos en ella detalladamente.

Unity Package Manager

Unity Package Manager (en adelante UPM) es una herramienta para la gestión de paquetes. Se añadió en Unity 2018.1 y se utilizó únicamente para los paquetes desarrollados por Unity Technologies. Sin embargo, desde la versión 2018.3 se introdujo la posibilidad de añadir paquetes personalizados.

Unity Package Manager
Interfaz de Unity Package Manager

Los paquetes no se incluyen en los archivos del proyecto (directorio Assets). Se encuentran en un directorio separado. %projectFolder%/Library/PackageCache y no afectan al proyecto, su única mención en los archivos es en el archivo packages/manifest.json.

Unity Package Manager
Paquetes en el sistema de archivos del proyecto

Fuentes de paquetes

UPM puede utilizar múltiples fuentes de paquetes:

1. Sistema de archivos.

Pros:

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

Desventajas:

  • Complejidad del versionado.
  • Se necesita acceso compartido al sistema de archivos para todos los que trabajan en el proyecto.

2. Repositorio Git.

Pros:

  • Solo se necesita un repositorio Git.

Desventajas:

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

3. Repositorio npm.

Pros:

  • Admite por completo las funciones de UPM y se utiliza para la distribución de paquetes oficiales de Unity.

Desventajas:

  • En la actualidad ignora todas las versiones de paquetes en forma de cadena, excepto la «-preview».

A continuación, veremos la implementación de UPM + npm. Esta combinación es conveniente ya que permite trabajar con cualquier tipo de recursos y gestionar las versiones de paquetes, además de admitir completamente la interfaz nativa de UPM.

Como repositorio npm se puede usar Verdaccio. Hay una guía detallada sobre esto, y para su ejecución solo necesitas par de comandos. documentaciónConfiguración del entorno

Primero necesitas instalar

Creación de un paquete node.js.

Para crear un paquete, debes colocar el archivo

, que lo describirá, en el directorio que contiene el contenido de este paquete. Debes hacer lo siguiente: package.jsonIr al directorio del proyecto que deseas convertir en paquete.

Ejecutar el comando npm init y durante el diálogo introducir los valores necesarios. Para name indicamos el nombre en formato de dominio inverso, por ejemplo com.plarium.somepackage.

Para mostrar cómodamente el nombre del paquete, añade la propiedad displayName en package.json y complétala.
Dado que npm está orientado a js, el archivo tiene algunas propiedades innecesarias como main y scripts, que Unity no utiliza. Es mejor eliminarlas para no ensuciar la descripción del paquete. El archivo debería verse aproximadamente así:

Dado que npm está orientado a js, el archivo tiene propiedades innecesarias como main y scripts, que Unity no utiliza. Es mejor eliminarlas para no saturar la descripción del paquete. El archivo debería verse aproximadamente así:

  1. Ejecutar el comando npm init y durante el diálogo introducir los valores necesarios. Para name indicamos el nombre en formato de dominio inverso, por ejemplo com.plarium.somepackage.
  2. Para mostrar cómodamente el nombre del paquete, añade la propiedad displayName en package.json y complétala.
  3. Dado que npm está orientado a js, el archivo tiene algunas propiedades innecesarias como main y scripts, que Unity no utiliza. Es mejor eliminarlas para no ensuciar la descripción del paquete. El archivo debería verse aproximadamente así:
  4. Dado que npm está orientado a js, el archivo tiene propiedades innecesarias como main y scripts, que Unity no utiliza. Es mejor eliminarlas para no saturar la descripción del paquete. El archivo debería verse aproximadamente así:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Descripción del Paquete",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTOR",
     "license": "SIN LICENCIA"
    }

  5. Abre Unity y genera un archivo .meta para package.json (Unity no reconoce los assets sin archivos .meta, los paquetes para Unity se abren solo en modo lectura).

Enviar paquete

Para enviar el paquete, es necesario ejecutar el comando: npm publish --registry *dirección del registro de paquetes*.

Instalación y actualización de paquetes a través de Unity Package Manager

Para añadir un paquete al proyecto de Unity, debes:

  1. Modificar el archivo manifest.json con información sobre la fuente de los paquetes. Para esto es necesario añadir la propiedad scopedRegistries y especificar los scopes y la dirección de la fuente en la que se buscarán los scopes específicos.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "dirección del registro de paquetes",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Ve a Unity y abre la ventana del Package Manager (el trabajo con paquetes personalizados no difiere del trabajo con los integrados).
  3. Selecciona Todos los Paquetes.
  4. Busca el paquete deseado y añádelo.

Unity Package Manager

Trabajo con fuentes y depuración

Para que las fuentes se conecten al proyecto, es necesario crear un Assembly Definition para el paquete.

El uso de paquetes no limita las capacidades de depuración. Sin embargo, al trabajar con paquetes en Unity, no se puede ir al IDE al hacer 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, ya que al usar Assembly Definition se compilan en una biblioteca y se conectan al proyecto. Al trabajar con fuentes desde el proyecto, el acceso al IDE mediante clic es posible.

Script en el proyecto con el paquete conectado:

Unity Package Manager
Script del paquete con un breakpoint activo:

Unity Package Manager

Correcciones urgentes en los paquetes

Los paquetes de Unity añadidos al proyecto son solo de lectura, pero se pueden editar en la caché de paquetes. Para esto es necesario:

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

    Unity Package Manager

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

Conflictos en la importación de paquetes

Al importar paquetes pueden ocurrir los siguientes conflictos de GUID:

  1. Paquete — paquete. Si al importar un paquete se detecta que ya hay assets con el mismo GUID en los paquetes ya añadidos, los assets con los GUID coincidentes del paquete importado no se añadirán al proyecto.
  2. Un paquete es un proyecto. Si al importar un paquete se detecta que hay activos en el proyecto con GUID coincidentes, 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.

Transferir activos del proyecto al paquete

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

Importante: al copiar un activo del proyecto al paquete, ocurrirá un conflicto de "Paquete - proyecto", como se describe en la sección anterior.

Posibles soluciones a los conflictos

  1. Reasignar los GUID mediante algoritmos propios al importar todos los activos, para evitar colisiones.
  2. Agregar todos los activos a un solo proyecto y luego dividirlos en paquetes.
  3. Crear una base de datos que contenga los GUID de todos los activos y realizar validación al enviar paquetes.

Conclusión

UPM es una nueva solución para la distribución de recursos compartidos en Unity, que puede convertirse en una alternativa legítima a los métodos existentes. Las recomendaciones descritas en el artículo se basan en casos reales. Esperamos que te sean útiles.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster