
Das Evergine-Paketsystem
Wiederverwendbarkeit ist ein weit verbreitetes Konzept in der Softwareentwicklung, und als Entwickler überlegen wir ständig, wie wir Teile unseres Codes isolieren können, um Bibliotheken, Code-Snippets oder Assets zu erstellen, die in verschiedenen Projekten genutzt werden können. In der .NET-Welt ist es sehr üblich, Bibliotheken als NuGet-Pakete bereitzustellen.
Evergine selbst wird im NuGet-Format verteilt, und dadurch stellen wir zahlreiche integrierte Behaviors, Komponenten und Services bereit. Weniger einfach ist es jedoch, Assets wie Texturen, Effekte oder Materialien aus dem Content-Ordner eines Evergine-Projekts zu teilen. Um dieses Problem zu lösen, haben wir an einem neuen Paketsystem gearbeitet, mit dem Sie Assets verteilen können, die sich in vielen Projekten wiederverwenden lassen.
Ein vorhandenes Paket hinzufügen
Wenn ein Paket hinzugefügt wird, werden alle seine Assets, sein Quellcode und seine NuGet-Abhängigkeiten automatisch hinzugefügt.
Derzeit ist es nicht möglich, ein Paket über die Benutzeroberfläche von Evergine Studio hinzuzufügen; Sie müssen dies manuell tun. Öffnen Sie einfach Ihre Evergine-Projektdatei (.weproj-Datei) in Ihrem bevorzugten Texteditor und ergänzen Sie im Abschnitt Packages die Pakete, die Sie einbinden möchten.
Sehen Sie in der Liste der offiziellen Paket-IDs nach, um neue Einträge hinzuzufügen.
Zum Beispiel:

Wenn Sie Ihr Projekt danach in Evergine Studio öffnen, sollte im Project Explorer ein Knoten Dependencies erscheinen. Dieser Knoten enthält alle referenzierten Pakete. Sie können die Paketknoten aufklappen, um deren Inhalt anzuzeigen.
Assets, die Teil eines Pakets sind, sind schreibgeschützt. Wenn Sie eines davon ändern müssen, ist das dennoch möglich: Es wird eine Kopie des Assets in Ihrem Projekt erstellt. Diese lokale Kopie überschreibt das ursprüngliche Paket-Asset für Ihr aktuelles Projekt.

Alternativ können Sie ein Paket auch über einen lokalen Pfad referenzieren. Das ist nützlich, wenn Sie selbst erstellte Pakete einbinden. In diesem Fall lautet die Syntax:

Bitte beachten Sie, dass beim Referenzieren eines lokalen Pakets die Paket-Assets nicht schreibgeschützt sind. Wenn Sie sie ändern, ändern Sie die Dateien Ihres lokalen Pakets!
Ein eigenes Paket erstellen
Um ein eigenes Evergine-Paket zu erstellen, müssen Sie ein separates Projekt mit den Assets und Quellcodedateien anlegen, die Sie einbinden möchten. Zur Veranschaulichung erstellen wir ein fiktives Paket namens DummyPackage mit einer einzigen Textur und einer einzigen Komponente.
Nachdem Sie ein leeres Projekt erstellt haben, müssen Sie eine Paketdefinitionsdatei anlegen. Sie muss die Dateiendung .wespec haben, und darin können Sie Folgendes angeben:
- Owners: Name der Paketeigentümer.
- Authors: Name der Paketautoren.
- Description: Eine Beschreibung des Paketinhalts.
- Tags: Eine Liste von Tags zur Kategorisierung des Pakets.
- Nugets: Eine Liste von Abhängigkeiten, die über NuGet-Pakete bereitgestellt werden.

Die Paketdefinitionsdatei muss sich auf derselben Ebene wie die Projektdatei befinden.
Alle Assets wie Texturen, Materialien, Effekte usw. müssen in einem Ordner namens Content liegen, Quellcodedateien in einem Ordner namens Source.

Außerdem müssen Sie das NuGet-Paket Evergine.Packages.Targets in Ihr Projekt einbinden, damit beim Build des Projekts der Paketierungsprozess ausgeführt wird.

Wenn alles eingerichtet ist, erstellen Sie einfach einen Build Ihres Projekts. Im Ordner bin/Debug bzw. bin/Release finden Sie die generierte wepkg-Datei.

Wenn Sie dieses Paket als lokales Paket referenzieren möchten, denken Sie daran, den entsprechenden Eintrag in Ihrer weproj-Datei hinzuzufügen.

Ein funktionierendes Beispiel finden Sie in jedem unserer Paket-Repositorys, etwa im MixedRealityToolkit-Repository.
Zusammengefasst: Dieses neue Paketsystem ist entstanden, um uns Entwicklern das Leben leichter zu machen. In künftigen Versionen planen wir, die Verwaltung dieser Pakete vollständig in Evergine Studio zu integrieren und das Hinzufügen und Entfernen von Paketen zu vereinfachen.
