Evergine Studioの新機能
今回のリリースでは、Evergine Studioのユーザーエクスペリエンスを大幅に改善しました。この記事では主な変更点をご紹介します。日々のEvergine Studioプロジェクトでの作業が少しでも快適になれば幸いです。

Evergine Studioからビヘイビアと物理演算をシミュレート
Evergine Studioに、エディター内でビヘイビアと物理演算をシミュレートするPlay Modeが追加されました。これは最も要望の多かった機能の一つです。これまでは、シーンの動作を確認するにはアプリケーションをビルドして起動し、問題があればエディターに戻って修正する必要がありました。今後は、複雑な物理シーンを設定したり、実装したビヘイビアの動作を確認したりすることが、Evergine Studioからワンクリックで行えます。
シーンビューポートの上部バーに、3つの新しいボタンが追加されました。
- Play (Ctrl+P) は、アプリケーションと同様にシーンを実行します。ビヘイビアが更新され、物理演算がシミュレートされ、パーティクルが発生し、シーンは自身のカメラを通して表示されます。シーンの実行中、このボタンはPause (Ctrl+Shift+P) に変わり、シミュレーションを一時停止しますがレンダリングは継続されるため、カメラを動かして確認できます。
- Step (Ctrl+Alt+P) は、一時停止中のシミュレーションを1フレームだけ進めて、再び一時停止します。通常の速度では速すぎて追いきれない衝突、拘束、アニメーションなどを理解するのに非常に役立ちます。
- Stop はシミュレーションを終了し、編集状態に戻ります。

Play Modeはアセットから構築されたシーンのコピーを実行するため、編集中のシーンが変更されることはありません。Stopを押すと、Playを押す前の状態に完全に戻ります。なお、実行されるのはシーンアセットであり、アプリケーション全体ではないことに注意してください。Sceneクラス(例:MyScene.cs)やApplicationクラスに追加したコードは実行されません。シーンにアクティブなカメラがない場合、ビューポートには黒い画面ではなく通知が表示されます。
新しいボタンを配置するため、シーンツールバーも再編成しました。以前は3つのスナップオプション(移動、回転、スケール)が常に表示されていましたが、現在は選択中の変形ツールに対応するものだけが表示されます。
以前のリリース:

新しいリリース:

新しいマニピュレーター
シーンビューポートでエンティティを移動、回転、スケールするすべてのマニピュレーターも再構築しました。多くのエンジンやツールで採用されているものと同じImGuizmo](https://github.com/CedricGuillemet/ImGuizmo)ライブラリの実装を使用するようになっています。新しいマニピュレーターは応答性が向上し、掴みやすくなりました。また、移動中に移動距離を表示するなどの改善も加わっています。

回転中には回転角度が表示されます。

スナップ、ピボット、複数選択も引き続き機能するため、複数のエンティティを一度に変形できます。
マニピュレーターと共に、同じくImGuizmo由来のView Cubeも導入されました。ビューポートの隅にカメラの向きを表示し、その面をクリックすると正面、上面、側面などのビューに切り替わります。シーン編集のためのビュー設定が大幅に高速化されました。

ピクセルパーフェクトな選択
Evergine Studioビューポートのもう一つの大きな改善点が選択システムです。これまでエディターは、簡略化されたボリューム(各モデルにフィットしたボックスや球)でエンティティを選択していたため、オブジェクト周辺の空きスペースをクリックしても選択されたり、大きなオブジェクトの背後にある小さなオブジェクトを選択するのが困難でした。選択がピクセルパーフェクトになり、カーソル下に見えているものを正確に選択できるようになったため、複雑なシーンでの作業精度が格段に向上しました。さらに、選択されたエンティティはそのシルエットにオレンジ色のアウトラインが描画されるため、どれが選択されているか一目でわかります。
![]()
エンティティ階層のルートを選択すると、その子や孫に青色のアウトラインが描画されます。これは、それらが選択エンティティではないものの、適用する変形がそれらにも影響することを示します。

選択をより快適にする細かな改善点もいくつかあります。
- カーソル下のエンティティはホバー時にハイライトされるため、クリックする前に何を選択しようとしているかがわかります。
- 他のオブジェクトの背後に隠れた選択部分も、不透明度を下げて半透明で描画されるため、隠れたオブジェクトを見失うことがありません。
- クリックには数ピクセルの許容範囲があるため、線のような細いオブジェクトも簡単に選択できます。
- エディターのアイコン(ライト、カメラ、パーティクルなど)はクリックで選択され、矩形選択も同じシステムを使用するため、実際に見えているものだけが選択されます。
- 階層やプレハブでは、最初のクリックでルートが選択され、次のクリックでカーソル直下の正確なエンティティが選択されます。
アウトラインの色、幅、非表示部分の不透明度、ホバー時のハイライトは、Preferences > Viewport で設定します。

プロジェクト設定からサービスを管理
Evergineにおいて、サービス(ServiceまたはUpdatableServiceから派生するクラス)は、コンポーネントやビヘイビアのアプリケーションレベル版です。プロジェクト内のシーンに依存しないグローバルなロジックや状態が必要な場合に使用します。これまでは、Applicationクラス内でコードで登録する必要がありました。今回のリリースでは、Evergine Studioのプロジェクト設定パネルからサービスを管理できるようになり、コードを記述する必要はありません。
新しいServicesセクションでは、プロジェクトのサービスを追加、削除し、プロパティを設定できます。プロパティパネルはEntity Detailsと同じエディターを使用するため、コンポーネントで既に使用しているRenderProperty属性がサービスでも同様に機能します。

設定はプロジェクトと共に保存され、サービスは生成されたコードを通じてアプリケーション起動時に登録されます。既にApplicationクラスで同じ型のサービスを登録している場合、そちらの登録が優先されるため、既存のプロジェクトはこれまで通り動作します。内部利用向けのサービスは、[Discoverable(false)]属性でリストから非表示にできます。
プロジェクトのビルド時間が半分以下に
エディターのビルド時間にも取り組みました。Evergine Studioは、プロジェクトを以前のバージョンの半分以下の時間でビルドするようになりました。Studioはプロジェクトを開く際にビルドを行うため、開くたびにその効果を実感できます。
空のプロジェクトと車両物理サンプルの2つのプロジェクトで時間を計測しました。
| プロジェクト | シナリオ | 以前のバージョン | 新しいバージョン | 短縮率 |
|---|---|---|---|---|
| 空のプロジェクト | クリーンビルド | 8.90 秒 | 3.73 秒 | 58% |
| 空のプロジェクト | 変更なし | 8.13 秒 | 3.04 秒 | 63% |
| 空のプロジェクト | C# 変更 | 8.06 秒 | 3.06 秒 | 62% |
| VehiclePhysicsSample | クリーンビルド | 10.19 秒 | 4.41 秒 | 57% |
| VehiclePhysicsSample | 変更なし | 9.49 秒 | 3.63 秒 | 62% |
| VehiclePhysicsSample | C# 変更 | 9.42 秒 | 3.69 秒 | 61% |
この改善はビルドの起動方法によるものです。
- パッケージの復元、コンパイル、アドオンの検出が単一のMSBuild呼び出しで行われ、並列ビルドも行われます。
- 増分ビルドの状態がビルド間で保持されます。
- 変更されたファイルのみが発行されます。
アセット管理の改善
このリリースではアセット管理も大幅に変更され、アセットの検索やコンポーネント・エンティティへの割り当てがより簡単かつ直感的になりました。
アセットのドラッグ&ドロップ
すべてのアセットピッカーがドラッグ&ドロップに対応しました。Assetsパネルから任意のアセットをドラッグし、Entity Detailsで必要なプロパティにドロップできます。たとえば、マテリアルをMaterialComponentに、フォントを3Dテキストに、サウンドをSoundEmitter3Dにドロップします。これまでもドロップダウンリストで設定できましたが、ドラッグの方がはるかに快適で高速です。アセットビューアも同じプロパティエディタを使用するため、マテリアルビューアでテクスチャをマテリアルにドロップすれば、結果をすぐに確認できます。

コンテンツの整理も容易になりました。Project Explorerツリーでフォルダのドラッグ&ドロップがサポートされ、複数同時に操作できます。また、アセットをツリー内のフォルダにドラッグして移動することも可能です。
エンティティのドラッグ&ドロップ
Scene Hierarchyパネルからエンティティをドラッグし、Entity Details内のコンポーネントが持つエンティティプロパティにドロップできるようになりました。特に物理シーンの設定で役立ちます。あるボディを別のボディにリンクする拘束のConnected Bodyプロパティは、対象のエンティティをドラッグして設定します。必要に応じて、ピッカーでエンティティを名前で検索することも可能です。

独自のコンポーネントでは、Entity型のプロパティで利用できます。RenderPropertyAsEntity属性により、特定のコンポーネントを持つエンティティのみに受け入れを制限できます。
public class Follower : Behavior
{
// Only accepts entities with a Transform3D component
[RenderPropertyAsEntity(typeof(Transform3D))]
public Entity Target { get; set; }
}
参照はIDで保存され、シーンのロード時に解決されます。プレハブをインスタンス化したり、エンティティを複製・貼り付けしたりすると、コピーがオリジナルではなく複製されたエンティティを指すように自動的に再マッピングされます。
AssetsServiceによる生アセット
Evergineでは従来から、コードからのアセット読み込みと処理にAssetsServiceを使用してきました。これはアセット関連の機能を集約したものです。今回、認識済みのアセットタイプに加えて、生アセットも読み込めるようになりました。これはEvergineが認識しない形式のファイル(JSON設定ファイル、データを含むCSV、独自形式など)です。新しいLoadRaw<T>メソッドはファイルのストリームを提供し、読み取り方法はユーザーが決定するため、必要な柔軟性がすべて得られます。また、サポート対象アセットと生アセットを同じ方法で読み込めるようになり、従来のように手動でファイルパスを構築して個別に処理する必要がなくなりました。
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;
}
アセットIDは、他のアセットと同様に生成されたEvergineContentクラスから取得します。結果はキャッシュされず、呼び出しのたびにファイルが再読み込みされるため、複数回必要な場合は保持してください。
全般的な改善
最後に、Evergine Studioインターフェースの小規模な改善点をいくつか紹介します。これらは目立ちにくいものの、Evergineチームが今回のリリースで目指してきた、より優れたユーザーエクスペリエンスに大きく貢献しています。
コピー可能なOutputパネル
エディタが行うすべての処理をログ出力するOutputパネルを刷新しました。従来は各メッセージがリストのアイテムとして表示され、複数行のコピーはほぼ不可能でした。今回からテキストを直接選択できるようになり、右クリックですべて選択を使用してコピーしたり、外部ツールで分析したりできます。これにより、デバッグや問題報告が容易になります。

テクスチャビューアでのHDR範囲
テクスチャビューアに新しい範囲コントロールが追加され、1を大きく超える値を持つHDRテクスチャの値を調整できるようになりました。範囲を調整することで、環境マップの最も明るい部分や最も暗い部分など、特定の帯域でのみ現れる詳細を確認できます。

複数行文字列プロパティ
エディタから複数行文字列を編集できるようになりました。コンポーネント、ビヘイビア、ドローアブルのプロパティにRenderPropertyAsTextBox属性を追加するだけです。
[RenderPropertyAsTextBox(multiline: true, maxLength: 512, placeholder: "Custom text")]
public string DisplayTag { get; set; }
Evergine Studioでは、プロパティが複数行フィールドとして表示され、空の場合はプレースホルダーが表示され、最大長を強制する文字カウンターが付きます。

すべてのタブを閉じる
ドキュメントタブを右クリックすると、閉じる、その他を閉じる、すべて閉じるが表示されます。Visual Studioと同様に、これらはウィンドウごとに機能します。フローティングウィンドウですべて閉じても、メインウィンドウのドキュメントは閉じられません。

プロファイル値のリセット
各プロファイル(Windows、Android、Webなど)は、テクスチャ設定やシェーダーディレクティブを上書きできます。これまで、これらの値を一度変更すると、元に戻す簡単な方法がありませんでした。今回、プロファイルに元の値をリセットするボタンが追加され、ワンクリックで戻せるようになりました。
その他
- DirectX12がデフォルトのグラフィックスバックエンドになりました。 Evergine StudioはDirectX12で起動し、新規プロジェクトはWindows (DirectX12)をプラットフォームとして使用します。既存のインストールは、明示的にVulkanを選択していない限り、アップデート時にDirectX12に切り替わります。DirectX11は引き続きオプションのプラットフォームとして利用可能です。
- Tripo AIがAPI v3に対応。 Tripoがv2 APIを廃止するため、Evergine Studioの統合はすでにv3を使用しています。
- Launcher。 複数のEvergineバージョンを一度にアンインストールできるようになりました。これは、ナイトリービルドやプレビュービルドを頻繁に試す場合に便利です。また、Launcherの読み込み中の進捗報告が改善されました。
今すぐ試す
これらの改善点はすべて、新しいEvergineリリースでご利用いただけます。Evergine Launcherからアップデートし、プロジェクトを開いてPlay Mode、新しい選択機能、マニピュレーターをお試しください。問題を発見された場合やEvergine Studioの改善アイデアがございましたら、GitHubリポジトリにてお知らせください。
