Neuigkeiten in Evergine Studio

Mit diesem Release haben wir die Benutzerfreundlichkeit von Evergine Studio deutlich verbessert. In diesem Artikel stellen wir die wichtigsten Änderungen vor, die Ihnen hoffentlich gefallen und Ihre tägliche Arbeit an Evergine-Studio-Projekten etwas erleichtern.

Evergine Studio 2026.11.4.444 mit einer geöffneten Szene

Behaviors und Physik direkt in Evergine Studio simulieren

Evergine Studio verfügt jetzt über einen Play Mode, der Behaviors und Physik im Editor simuliert. Es war eine der am häufigsten gewünschten Funktionen. Bisher mussten Sie die Anwendung erstellen und starten, um zu sehen, wie sich eine Szene verhält, und dann zurück in den Editor wechseln, um Fehler zu beheben. Jetzt können Sie komplexe Physikszenen einrichten oder prüfen, wie Ihre Behaviors implementiert sind und sich verhalten – direkt in Evergine Studio, mit einem einzigen Klick.

Die obere Leiste des Szenen-Viewports hat drei neue Schaltflächen:

Ausführen einer Szene mit Play, Pause und Step im Scene Viewer

Der Play Mode führt eine aus dem Asset erstellte Kopie der Szene aus, sodass die Szene, die Sie bearbeiten, nie verändert wird: Wenn Sie auf Stop klicken, erhalten Sie sie genau so zurück, wie sie vor dem Klick auf Play war. Beachten Sie, dass das Szenen-Asset ausgeführt wird, nicht Ihre gesamte Anwendung: Code, den Sie Ihrer Klasse Scene (zum Beispiel in MyScene.cs) oder Ihrer Klasse Application hinzufügen, wird nicht ausgeführt. Hat die Szene keine aktive Kamera, zeigt der Viewport einen Hinweis statt eines schwarzen Bildschirms.

Um Platz für die neuen Schaltflächen zu schaffen, haben wir auch die Szenen-Toolbar neu organisiert. Bisher zeigte sie alle drei Snap-Optionen (Verschiebung, Rotation und Skalierung) gleichzeitig an. Jetzt zeigt sie nur noch die für das ausgewählte Transformationswerkzeug.

Vorheriges Release:

Die Szenen-Toolbar in der vorherigen Version mit den drei Snap-Optionen

Neues Release:

Die Szenen-Toolbar in der neuen Version mit einer einzigen Snap-Option und den Schaltflächen Play, Step und Stop

Neue Manipulatoren

Außerdem haben wir alle Manipulatoren neu entwickelt, mit denen Entitäten im Szenen-Viewport verschoben, gedreht und skaliert werden. Sie nutzen jetzt die Implementierung der Bibliothek ImGuizmo, die auch viele andere Engines und Tools verwenden. Die neuen Manipulatoren reagieren besser, lassen sich leichter greifen und bringen Verbesserungen mit, etwa die Anzeige der zurückgelegten Strecke bei einer Verschiebung:

Verschieben einer Entität mit dem neuen Manipulator, der die zurückgelegte Strecke anzeigt

Oder die Gradzahl bei einer Rotation:

Drehen einer Entität mit dem neuen Manipulator, der den Drehwinkel in Grad und Radiant anzeigt

Snapping, Pivot und Mehrfachauswahl funktionieren weiterhin, sodass Sie mehrere Entitäten gleichzeitig transformieren können.

Zusammen mit den Manipulatoren kommt der View Cube, ebenfalls aus ImGuizmo. Er zeigt die Kameraausrichtung in einer Ecke des Viewports an, und ein Klick auf eine seiner Flächen wechselt zur Vorder-, Drauf-, Seiten- oder jeder anderen Ansicht. So ist die Ansicht zum Bearbeiten einer Szene jetzt deutlich schneller eingerichtet.

Wechseln der Ansicht mit dem View Cube in der Ecke des Viewports

Pixelgenaue Auswahl

Eine weitere große Verbesserung im Viewport von Evergine Studio ist das Auswahlsystem. Bisher wählte der Editor Entitäten anhand vereinfachter Volumen aus (an jedes Modell angepasste Quader und Kugeln). Ein Klick in den leeren Raum um ein Objekt konnte daher dieses Objekt auswählen, und ein kleines Objekt hinter einem großen war schwer zu treffen. Die Auswahl ist jetzt pixelgenau: Sie wählen genau das aus, was Sie unter dem Cursor sehen – deutlich präziser bei der Arbeit mit komplexen Szenen. Zudem wird die ausgewählte Entität mit einer orangefarbenen Kontur um ihre Silhouette gezeichnet, sodass Sie auf einen Blick erkennen, welche es ist.

Pixelgenaue Auswahl: Ein Klick auf jedes Objekt wählt es aus und zeichnet seine orangefarbene Kontur

Wenn Sie die Wurzel einer Entitätshierarchie auswählen, werden ihre Kinder und Enkel mit einer blauen Kontur gezeichnet. Das zeigt Ihnen, dass sie nicht die ausgewählte Entität sind, die Transformationen, die Sie darauf anwenden, sie aber mitbewegen.

Eine ausgewählte Hierarchie: die Wurzel-Teekanne mit orangefarbener Kontur und der untergeordnete Kegel und Zylinder mit blauer Kontur

Einige weitere Details machen die Auswahl komfortabler:

Die Konturfarben, die Konturbreite, die Deckkraft verdeckter Teile und die Hervorhebung beim Überfahren werden unter Preferences > Viewport eingestellt.

Die Optionen für die Auswahlkontur im Abschnitt Viewport des Dialogs Preferences

Services in den Project Settings verwalten

In Evergine sind Services (Klassen, die von Service oder UpdatableService abgeleitet sind) das Gegenstück zu einer Komponente oder einem Behavior auf Anwendungsebene: Sie verwenden sie, wenn Sie globale Logik oder einen globalen Zustand benötigen, der nicht von den Szenen Ihres Projekts abhängt. Bisher mussten Sie sie im Code Ihrer Klasse Application registrieren. Mit diesem Release können Sie Services im Panel Project Settings von Evergine Studio verwalten, ohne Code zu schreiben.

Im neuen Abschnitt Services können Sie die Services Ihres Projekts hinzufügen, entfernen und ihre Eigenschaften konfigurieren. Das Eigenschaften-Panel verwendet dieselben Editoren wie Entity Details, sodass die RenderProperty-Attribute, die Sie bereits in Ihren Komponenten verwenden, in Ihren Services genauso funktionieren.

Der Abschnitt Services in den Project Settings mit einem Service und seinen Eigenschaften

Die Konfiguration wird mit dem Projekt gespeichert, und die Services werden beim Start der Anwendung über generierten Code registriert. Wenn Sie in Ihrer Klasse Application bereits einen Service desselben Typs registrieren, hat Ihre Registrierung Vorrang, sodass bestehende Projekte wie bisher funktionieren. Services für den internen Gebrauch lassen sich mit dem Attribut [Discoverable(false)] aus der Liste ausblenden.

Projekte werden in weniger als der Hälfte der Zeit erstellt

Wir haben auch an den Build-Zeiten des Editors gearbeitet. Evergine Studio erstellt Ihre Projekte jetzt in weniger als der Hälfte der Zeit, die die vorherige Version benötigte. Da Studio ein Projekt beim Öffnen erstellt, macht sich das auch jedes Mal bemerkbar, wenn Sie eines öffnen.

Wir haben die Zeiten mit zwei Projekten gemessen: einem leeren Projekt und dem Fahrzeugphysik-Beispiel.

ProjektSzenarioVorherige VersionNeue VersionReduzierung
Leeres ProjektClean Build8,90 s3,73 s58%
Leeres ProjektKeine Änderungen8,13 s3,04 s63%
Leeres ProjektC#-Änderung8,06 s3,06 s62%
VehiclePhysicsSampleClean Build10,19 s4,41 s57%
VehiclePhysicsSampleKeine Änderungen9,49 s3,63 s62%
VehiclePhysicsSampleC#-Änderung9,42 s3,69 s61%

Die Verbesserung ergibt sich aus der Art, wie der Build gestartet wird:

Bessere Asset-Verwaltung

Auch die Asset-Verwaltung hat sich in diesem Release stark verändert: Assets lassen sich einfacher und intuitiver finden und Komponenten und Entitäten zuweisen.

Drag & Drop von Assets

Jede Asset-Auswahl unterstützt jetzt Drag & Drop: Ziehen Sie ein beliebiges Asset aus dem Panel Assets und legen Sie es in Entity Details auf der Eigenschaft ab, die es benötigt. Zum Beispiel ein Material auf einem MaterialComponent, eine Schriftart auf einem 3D-Text oder einen Sound auf einem SoundEmitter3D. Das ging bereits über die Dropdown-Listen, doch Ziehen ist deutlich komfortabler und schneller. Asset-Viewer verwenden dieselben Eigenschaftseditoren, sodass Sie auch im Material-Viewer eine Textur auf einem Material ablegen und das Ergebnis sofort sehen können.

Ziehen eines Materials aus dem Panel Assets auf die Eigenschaft Material einer Entität

Auch das Organisieren Ihrer Inhalte ist einfacher geworden. Die Baumansicht des Project Explorer unterstützt jetzt Drag & Drop von Ordnern, auf Wunsch auch mehrerer gleichzeitig, und Sie können Assets auf einen Ordner im Baum ziehen, um sie zu verschieben.

Drag & Drop von Entitäten

Sie können jetzt auch Entitäten aus dem Panel Scene Hierarchy auf die Entitätseigenschaften von Komponenten in Entity Details ziehen. Das ist besonders beim Einrichten von Physikszenen nützlich: Die Eigenschaft Connected Body von Constraints, die einen Körper mit einem anderen verbindet, wird festgelegt, indem Sie die andere Entität darauf ziehen. Wenn Sie möchten, können Sie in der Auswahl auch nach dem Namen der Entität suchen.

Ziehen einer Entität aus der Scene Hierarchy auf eine Entitätseigenschaft

Ihre eigenen Komponenten können dies über eine Eigenschaft vom Typ Entity nutzen. Das Attribut RenderPropertyAsEntity beschränkt die zulässigen Entitäten auf solche mit bestimmten Komponenten:

public class Follower : Behavior
{
    // Only accepts entities with a Transform3D component
    [RenderPropertyAsEntity(typeof(Transform3D))]
    public Entity Target { get; set; }
}

Referenzen werden per ID gespeichert und beim Laden der Szene aufgelöst. Wenn Sie ein Prefab instanziieren oder Entitäten duplizieren oder einfügen, werden sie automatisch neu zugeordnet, sodass die Kopien auf die kopierten Entitäten verweisen und nicht auf die Originale.

Raw Assets über AssetsService

Zum Laden und Verarbeiten von Assets im Code hat Evergine schon immer AssetsService verwendet, wo alles rund um Assets zusammenläuft. Neben den erkannten Asset-Typen kann es jetzt auch Raw Assets laden: Dateien in Formaten, die Evergine nicht erkennt, etwa eine JSON-Konfigurationsdatei, eine CSV-Datei mit Daten oder ein eigenes Format. Die neue Methode LoadRaw<T> liefert Ihnen einen Stream der Datei, und Sie entscheiden, wie Sie ihn lesen – mit aller Flexibilität, die Sie benötigen. Außerdem laden Sie unterstützte und Raw Assets auf dieselbe Weise, was Sie bisher separat handhaben mussten, indem Sie den Dateipfad von Hand zusammensetzten.

protected override void CreateScene()
{
    var assetsService = Application.Current.Container.Resolve<AssetsService>();

    var text = assetsService.LoadRaw<string>(EvergineContent.Raw.hello_txt, stream =>
    {
        using var reader = new StreamReader(stream);
        return reader.ReadToEnd();
    });

    var textComponent = this.Managers.EntityManager.FindFirstComponentOfType<Text3DMesh>();
    textComponent.Text = text;
}

Die Asset-ID stammt wie bei jedem anderen Asset aus der generierten Klasse EvergineContent. Das Ergebnis wird nicht zwischengespeichert: Jeder Aufruf liest die Datei erneut. Behalten Sie es also, wenn Sie es mehrfach benötigen.

Allgemeine Verbesserungen

Zum Schluss noch einige kleinere Verbesserungen an der Oberfläche von Evergine Studio. Sie fallen weniger ins Auge, tragen aber ebenfalls viel zu der besseren Benutzererfahrung bei, auf die das Evergine-Team in diesem Release hingearbeitet hat.

Ein Output-Panel, aus dem Sie kopieren können

Wir haben das Panel Output neu geschrieben, in dem der Editor alles protokolliert, was er tut. Bisher wurde jede Meldung als Element einer Liste angezeigt, und mehrere Zeilen zu kopieren war nahezu unmöglich. Jetzt können Sie Text direkt markieren oder per Rechtsklick Select All verwenden, um ihn zu kopieren oder mit einem externen Tool zu analysieren. Das erleichtert das Debugging und das Melden von Problemen.

Markierter Text im Panel Output mit dem Menü Copy, Select All und Clear

HDR-Bereich im Texture Viewer

Der Texture Viewer hat ein neues Range-Steuerelement, mit dem Sie sich durch die Werte von HDR-Texturen bewegen können, die weit über 1 hinausgehen. Passen Sie den Bereich an, um Details zu sehen, die nur in einem bestimmten Band sichtbar werden, etwa in den hellsten oder dunkelsten Bereichen einer Environment Map.

Eine HDR-Textur im Texture Viewer mit angepasstem Range-Steuerelement

Mehrzeilige String-Eigenschaften

Sie können jetzt mehrzeilige Strings im Editor bearbeiten. Fügen Sie einfach das Attribut RenderPropertyAsTextBox zur Eigenschaft Ihrer Komponente, Ihres Behaviors oder Ihres Drawables hinzu:

[RenderPropertyAsTextBox(multiline: true, maxLength: 512, placeholder: "Custom text")]
public string DisplayTag { get; set; }

In Evergine Studio erscheint die Eigenschaft als mehrzeiliges Feld, mit einem Platzhalter, wenn sie leer ist, und einem Zeichenzähler, der die maximale Länge durchsetzt.

Die Eigenschaft DisplayTag als mehrzeiliger Text bearbeitet, mit dem Zähler 122/512

Alle Tabs schließen

Ein Rechtsklick auf einen Dokument-Tab zeigt Close, Close Others und Close All. Wie in Visual Studio wirken sie pro Fenster: Wenn Sie alles in einem schwebenden Fenster schließen, werden die Dokumente im Hauptfenster nicht geschlossen.

Tab-Menü mit den Optionen Close, Close Others und Close All

Profilwerte zurücksetzen

Jedes Profil (Windows, Android, Web …) kann Textureinstellungen und Shader-Direktiven überschreiben. Bisher gab es keinen einfachen Weg zurück, wenn Sie einen dieser Werte einmal geändert hatten. Profile haben jetzt eine Schaltfläche, um mit einem einzigen Klick die ursprünglichen Werte wiederherzustellen.

Und außerdem

Jetzt ausprobieren

Alle diese Verbesserungen sind im neuen Evergine-Release verfügbar. Aktualisieren Sie über den Evergine Launcher, öffnen Sie Ihr Projekt und probieren Sie den Play Mode, die neue Auswahl und die Manipulatoren aus. Wenn Sie auf ein Problem stoßen oder Ideen zur Verbesserung von Evergine Studio haben, teilen Sie es uns in unserem GitHub-Repository mit.

Jorge Cantón
Autor
Jorge Cantón
Research Director bei Plain Concepts