Evergine Studio 的新功能

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

打开场景的 Evergine Studio 2026.11.4.444

在 Evergine Studio 中模拟行为和物理

Evergine Studio 现在拥有播放模式,可在编辑器内模拟行为和物理。这是呼声最高的功能之一。在此之前,要查看场景的行为,您必须构建并启动应用程序,然后返回编辑器修复问题。现在,您可以直接在 Evergine Studio 中一键设置复杂的物理场景,或检查行为的实现和表现。

场景视口顶栏新增了三个按钮:

在场景查看器中使用播放、暂停和步进运行场景

播放模式运行的是基于场景资源构建的副本,因此您正在编辑的场景永远不会被修改:按下停止后,它会完全恢复到按下播放前的状态。请注意,它运行的是场景资源,而非整个应用程序:您添加到 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%
VehiclePhysicsSampleC# 更改9.42 秒3.69 秒61%

这一改进源于构建启动方式的优化:

更完善的资产管理

资产管理在此版本中也有大幅改进,查找资产并将其分配给组件和实体的方式更加简单直观。

资源拖放

每个资源选择器现在都支持拖放:从资源面板拖动任意资源,放到实体详情中需要该资源的属性上。例如,将材质拖到MaterialComponent上,将字体拖到 3D 文本上,或将声音拖到SoundEmitter3D上。之前通过下拉列表也能完成,但拖放更顺手、更快捷。资源查看器使用相同的属性编辑器,因此你也可以在材质查看器中将纹理拖到材质上,并立即看到结果。

将材质从资源面板拖到实体的 Material 属性上

内容整理也更方便了。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。调整范围可以查看仅在特定区间显示的细节,例如环境贴图中最亮或最暗的区域。

纹理查看器中已调整范围控件的 HDR 纹理

多行字符串属性

现在可以在编辑器中编辑多行字符串。只需将 RenderPropertyAsTextBox 特性添加到组件、行为或可绘制对象的属性上:

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

在 Evergine Studio 中,该属性会显示为多行字段,为空时显示占位符,并带有字符计数器以强制最大长度。

以多行文本形式编辑的 DisplayTag 属性,显示 122/512 计数器

关闭所有选项卡

右键单击文档选项卡会显示关闭、关闭其他和关闭所有。与 Visual Studio 一样,这些操作按窗口生效:在浮动窗口中关闭所有文档不会关闭主窗口中的文档。

包含关闭、关闭其他和关闭所有选项的选项卡菜单

重置配置文件值

每个配置文件(Windows、Android、Web 等)都可以覆盖纹理设置和着色器指令。在此之前,一旦更改了某个值,就没有简单的方法恢复。现在配置文件有一个按钮,可以一键重置为原始值。

此外

立即试用

所有这些改进都已在新的 Evergine 版本中提供。从 Evergine Launcher 更新,打开您的项目并试用 Play Mode、新的选择功能和操作器。如果您发现任何问题或有改进 Evergine Studio 的想法,请在我们的 GitHub 仓库 中告诉我们。

Jorge Cantón
作者
Jorge Cantón
Plain Concepts 研究总监