Evergine Studio 的新功能
本次发布中,我们对 Evergine Studio 的用户体验进行了重大改进。本文将介绍主要变化,希望您会喜欢,并让您在 Evergine Studio 项目上的日常工作更加轻松。

在 Evergine Studio 中模拟行为和物理
Evergine Studio 现在拥有播放模式,可在编辑器内模拟行为和物理。这是呼声最高的功能之一。在此之前,要查看场景的行为,您必须构建并启动应用程序,然后返回编辑器修复问题。现在,您可以直接在 Evergine Studio 中一键设置复杂的物理场景,或检查行为的实现和表现。
场景视口顶栏新增了三个按钮:
- 播放(Ctrl+P)会像您的应用程序一样运行场景:行为更新、物理模拟、粒子发射,并通过场景自身的摄像机查看。场景运行时,该按钮变为暂停(Ctrl+Shift+P),冻结模拟但保持渲染,因此您仍可移动摄像机。
- 步进(Ctrl+Alt+P)将暂停的模拟推进一帧并再次暂停。这对于理解正常速度下难以跟上的碰撞、约束或动画非常有用。
- 停止结束模拟并返回编辑状态。

播放模式运行的是基于场景资源构建的副本,因此您正在编辑的场景永远不会被修改:按下停止后,它会完全恢复到按下播放前的状态。请注意,它运行的是场景资源,而非整个应用程序:您添加到 Scene 类(例如在 MyScene.cs 中)或 Application 类中的代码不会运行。如果场景没有活动摄像机,视口会显示提示而非黑屏。
为容纳新按钮,我们还重新组织了场景工具栏。以前它会同时显示三个吸附选项(平移、旋转和缩放)。现在只显示当前所选变换工具的吸附选项。
上一版本:

新版本:

新的操控器
我们还重构了场景视口中用于移动、旋转和缩放实体的所有操纵器。它们现在采用 ImGuizmo 库的实现,这也是众多引擎和工具所采用的库。新操纵器响应更灵敏、更易于抓取,并带来了多项改进,例如显示平移过程中移动的距离:

或旋转过程中转动的角度:

吸附、轴心点和多选功能仍然有效,因此您可以同时变换多个实体。
与操控器一同到来的是视图立方体,同样来自 ImGuizmo。它会在视口一角显示摄像机方向,点击其某个面可切换至前视图、顶视图、侧视图或其他任何视图。现在设置编辑场景的视图要快得多。

像素级精确选择
Evergine Studio 视口的另一项重大改进是选择系统。在此之前,编辑器使用简化体积(适配每个模型的盒体和球体)来拾取实体,因此点击对象周围的空白区域可能会选中该对象,而选择大对象后面的小对象则很困难。现在选择是像素级精确的:您选中的正是光标下看到的内容,在处理复杂场景时精确得多。此外,选中的实体会在其轮廓周围绘制橙色轮廓,让您一眼就能分辨出是哪个。
![]()
当您选择实体层级的根节点时,其子级和孙级会绘制蓝色轮廓。这告诉您它们不是选中的实体,但您对其应用的变换也会移动它们。

还有一些细节让选择更加舒适:
- 光标下的实体在悬停时会高亮显示,因此您在点击前就知道将要选择什么。
- 被其他对象遮挡的选择部分仍会以较低的不透明度绘制,因此您永远不会看不到被遮挡的对象。
- 点击具有几个像素的容差,因此像线条这样的细对象也很容易选择。
- 编辑器图标(灯光、摄像机、粒子等)通过点击选中,矩形选择使用同一套系统,因此只会选中真正可见的对象。
- 在层级或预制件中,第一次点击选中根节点,再次点击则选中光标下具体的实体。
轮廓颜色、宽度、被遮挡部分的透明度以及悬停高亮可在偏好设置 > 视口中设置。

从项目设置管理服务
在 Evergine 中,服务(继承自 Service 或 UpdatableService 的类)是组件或行为在应用层面的对应物:当需要不依赖项目场景的全局逻辑或状态时使用它们。此前必须在 Application 类中以代码注册。本次发布后,你可以在 Evergine Studio 的项目设置面板中管理服务,无需编写任何代码。
在新的服务分区中,你可以添加项目服务、移除服务并配置其属性。属性面板使用的编辑器与实体详情相同,因此你在组件中使用的 RenderProperty 特性在服务中同样生效。

配置随项目保存,服务在应用启动时通过生成的代码注册。如果你已在 Application 类中注册了相同类型的服务,你的注册优先,因此现有项目仍可照常运行。仅供内部使用的服务可通过 [Discoverable(false)] 特性在列表中隐藏。
项目构建时间缩短一半以上
我们还改进了编辑器构建时间。Evergine Studio 现在构建项目所需时间不到上一版本的一半。由于 Studio 在打开项目时会进行构建,因此每次打开项目你都能感受到这一改进。
我们使用两个项目测量了构建时间:一个空项目和一个车辆物理示例。
| 项目 | 场景 | 上一版本 | 新版本 | 缩短幅度 |
|---|---|---|---|---|
| 空项目 | 全新构建 | 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 调用中完成,并且并行构建。
- 增量构建状态在多次构建之间保留。
- 仅发布发生更改的文件。
更完善的资产管理
资产管理在此版本中也有大幅改进,查找资产并将其分配给组件和实体的方式更加简单直观。
资源拖放
每个资源选择器现在都支持拖放:从资源面板拖动任意资源,放到实体详情中需要该资源的属性上。例如,将材质拖到MaterialComponent上,将字体拖到 3D 文本上,或将声音拖到SoundEmitter3D上。之前通过下拉列表也能完成,但拖放更顺手、更快捷。资源查看器使用相同的属性编辑器,因此你也可以在材质查看器中将纹理拖到材质上,并立即看到结果。

内容整理也更方便了。Project Explorer 树现在支持拖放文件夹,一次可拖动多个,还可以将资源拖到树中的文件夹上来移动它们。
实体拖放
现在还可以将实体从场景层级面板拖到实体详情中组件的实体属性上。这在设置物理场景时特别有用:约束的 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 团队在此版本中努力打造的更好用户体验做出了很大贡献。
可复制内容的输出面板
我们重写了输出面板,编辑器在其中记录所有操作。以前每条消息都显示为列表中的一个条目,复制多行几乎不可能。现在你可以直接选择文本,或右键使用全选,将其复制或用外部工具分析。这让调试和报告问题更加容易。

纹理查看器中的 HDR 范围
纹理查看器新增了范围控件,用于浏览 HDR 纹理的数值,这些数值远超 1。调整范围可以查看仅在特定区间显示的细节,例如环境贴图中最亮或最暗的区域。

多行字符串属性
现在可以在编辑器中编辑多行字符串。只需将 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) 作为平台。现有安装在更新时会切换到 DirectX12,除非你明确选择了 Vulkan。DirectX11 仍作为可选平台提供。
- Tripo AI 使用 API v3。 Tripo 正在停用其 v2 API,因此 Evergine Studio 集成已使用 v3。
- Launcher。 您可以一次性卸载多个 Evergine 版本,如果您经常尝试 nightly 和预览版,这会非常方便,而且 Launcher 在加载时能更好地报告进度。
立即试用
所有这些改进都已在新的 Evergine 版本中提供。从 Evergine Launcher 更新,打开您的项目并试用 Play Mode、新的选择功能和操作器。如果您发现任何问题或有改进 Evergine Studio 的想法,请在我们的 GitHub 仓库 中告诉我们。
