首页 / 文档
十三页,按你将需要它们的顺序排列。这是文档中实操的一半 — 如何构建东西。功能导览是另一半:引擎能做什么,不能做什么。
你不需要启动器、编辑器或资产管线。你需要 .NET 10 SDK、一块近十年的 GPU 和一个文本编辑器。 场景就是一个 C# 类。
两个类型就够了。BaseApp 是应用:窗口标题、
分辨率、相机与质量默认值。Panel 是组合单元:
它拥有控件与其他面板。
using Season.Basic;
using Season.Controls;
using Season.Panels;
using Season.Rendering;
using System.Numerics;
namespace Hello;
internal class Scene : Panel
{
internal Scene()
{
AddControl(new Model
{
Name = "Assets/island.glb",
PosX = 0f, PosY = 0f, PosZ = 0f,
Width = 60f, Height = 12f, Depth = 60f
});
}
}
internal class App : BaseApp
{
internal App()
{
Title = "Hello";
StorageService.DirectoryBase = "Hello";
BackgroundColor = Colors.White;
BasicResolution = new Vector2(1920f, 1080f);
CameraTarget = new Vector3(0f, 3.5f, -2.5f);
CameraPos = CameraTarget + new Vector3(0f, 0.5f, -3.5f);
Camera.FovY = MathF.PI / 4f;
Camera.Near = 0.1f;
Camera.Far = 1300f;
// Read once at initialization. Setting it later has no effect.
RenderQuality.DefaultGlobalIllumination = GiMode.Ddgi;
}
public override void Create()
{
base.Create();
AddPanel(new Scene());
}
}
这是一个被照亮、有阴影、有全局光照、位于物理天空下的场景。其中没有任何内容 去配置光照、阴影、色调映射或抗锯齿,因为那些是管线默认值, 而不是需要你组装的东西。
| 成员 | 含义 |
|---|---|
Title | 窗口与任务栏标题。 |
StorageService.DirectoryBase | 一个文件夹名;每个平台将它解析到各自设置与数据的存放位置。 |
BackgroundColor | 场景目标的清屏颜色。 |
BasicResolution | 你编写 2D 布局时使用的设计分辨率。引擎会将它缩放到真实表面。 |
CameraPos / CameraTarget | 左手系视图设置。当 CameraPos.Z < 0 时,相机朝向原点,世界 +X 为屏幕右方。 |
Camera.FovY / Near / Far | 投影,可在运行时修改。相同的值不会把矩阵标记为脏。 |
Create() | 图形初始化后调用一次。在这里构建面板树,并先调用 base.Create()。 |
Create 的区别
构造函数在图形初始化之前运行,这就是为什么
RenderQuality.Default* 值必须在那里设置 —
它们会烘焙着色器变体并决定分配大小。任何触碰 GPU 资源的东西,包括控件,
都属于 Create 或更晚的时机。在初始化之后设置
Default* 值不是错误,但什么也不会发生——这是最令人困惑的一种空操作;
如果某个质量设置似乎被忽略了,检查它位于这条线的哪一侧。
按目标平台的 SDK、工作负载与驱动。克隆并运行参考应用,或添加包。
文件放在哪里、让资产在移动端与桌面端都能工作的两个项组,以及全局 using。
构造你的应用的六个小文件。它们之上的一切都是共享的。
唯一的 Update 签名、加载顺序,以及返回 true 意味着什么。
覆盖 2D 与 3D、单个对象与实例的约定。以及左手系相机。
加载 GLB、播放剪辑,以及替换控件下的模型。
一个控件、一份你自己的对象列表、逐实例剪辑。人群与散布的模式。
精灵、形状、面板、按钮与输入,以及层级与顺序规则。
加载字体、自动换行、行内颜色、流式追加与本地化。
添加光源、驱动昼夜循环,以及选择天空预设。
RenderQuality 的两副面孔,以及持久化一个设置界面。
子类化、注册、派发,然后把输出作为精灵显示到屏幕上。
引擎类型上的 XML 文档异常详细:它记录了一个决策是为什么做出的,
而不仅仅是一个成员做什么。本站上好几处犀利的解释都摘自其中。
在 API 仍在变动期间,对 Season/Season.csproj 的项目引用
优于包引用,因为能读到任何让你惊讶的实现细节,
这比一个版本号更有价值。
除此之外,两个示例应用是细节最丰富的文档。 参考应用中的每个面板都是一个完整范例。