noviembre 15, 2021

Sistema de paquetes Evergine

La reutilización es un concepto muy extendido en el desarrollo de software y nosotros, como desarrolladores, siempre estamos pensando en una forma de aislar partes de nuestro código para crear bibliotecas, fragmentos de código o recursos que puedan ser consumidos desde diferentes proyectos. En el mundo .NET, es muy común crear paquetes NuGet para compartir bibliotecas.

Evergine en sí mismo utiliza el formato NuGet para ser distribuido, y gracias a ello proporcionamos muchos comportamientos, componentes o servicios incorporados. Pero no es tan fácil si quieres compartir recursos como texturas, efectos o materiales desde la carpeta de Contents de un proyecto Evergine. Para resolver este problema, hemos estado trabajando en un nuevo sistema de paquetes, que te permitirá distribuir recursos que pueden ser reutilizados en muchos proyectos.

Añadir un paquete ya existente

Cuando se añade un paquete, todos sus recursos, código fuente y dependencias de NuGet se añadirán por ti.

Ahora mismo, no es posible añadir un paquete usando la interfaz de usuario de Evergine Studio, tienes que hacerlo manualmente. Simplemente abre tu archivo de proyecto Evergine (archivo .weproj) con tu editor de texto favorito y actualiza la sección Packages con aquellos paquetes que quieras incluir.

Sólo tiene que consultar la lista de ID de paquetes oficiales para añadir nuevas entradas.

Por ejemplo:

Después de hacer esto, al abrir tu proyecto con Evergine Studio debería añadir un nodo de Dependencies en tu Project Explorer. Ese nodo contendrá todos los paquetes referenciados. Puedes expandir los nodos de los paquetes para ver su contenido.

Como parte de un paquete, los recursos están marcados como de sólo lectura. Si necesita modificar alguno de ellos, es posible: se creará una copia del recurso en tu proyecto. Esta copia local sobrescribe el recurso original del paquete para tu proyecto actual.

Alternativamente, también puedes referenciar un paquete con una ruta local. Esto es útil si estás incluyendo tus propios paquetes. En este caso, la sintaxis será:

Por favor, ten en cuenta que la referencia a un paquete local no marca los recursos del paquete como de sólo lectura, y si los modificas, ¡estás cambiando los archivos del paquete local!

Crea tu propio paquete

Para crear tu propio paquete de Evergine necesitas crear un proyecto separado con los recursos y archivos de código fuente que quieras incluir. Para ilustrar esto vamos a crear un paquete ficticio llamado DummyPackage con una única textura y un solo componente.

Después de crear un proyecto vacío, necesitamos crear un archivo de definición de paquete. Debe tener un nombre de extensión .wespec y allí se puede especificar:

  • Owners: Nombre de los propietarios de los paquetes.
  • Authors: Nombre de los autores del paquete.
  • Description: Una descripción del contenido del paquete.
  • Tags: Una lista de etiquetas para clasificar el paquete.
  • Nugets: Una lista de dependencias proporcionadas a través de paquetes NuGet.

El archivo de definición del paquete debe colocarse al mismo nivel que el archivo del proyecto.

Todos los recursos, como texturas, materiales, efectos, etc., deben colocarse en una carpeta llamada Content, y los archivos de código fuente deben colocarse en una carpeta llamada Source.

Además, necesitas incluir el paquete Evergine.Packages.Targets NuGet en tu proyecto para ejecutar el proceso de empaquetado una vez construido el proyecto.

Una vez que tengas todo esto configurado, simplemente construye tu proyecto. En su carpeta bin/Debug o bin/Release, encontrará el archivo wepkg generado.

Si desea hacer referencia a este paquete como un paquete local, sólo recuerde añadir la entrada apropiada en su archivo weproj.

Para ver un ejemplo de funcionamiento, basta con echar un vistazo a cualquiera de nuestros repositorios de paquetes, como el repositorio MixedRealityToolkit.

En conclusión, este nuevo sistema de paquetes ha nacido para facilitarnos la vida a los desarrolladores. En futuras versiones estamos planeando añadir una experiencia completa de Evergine Studio para gestionar esos paquetes, y facilitar la adición y eliminación de paquetes.

Sergio Escalada
Author
Sergio Escalada
Plain Concepts Research
Categories