Editor 索引 · Scripting API · Assets · Modules · 目标 reload 强制标准
Inno.Editor.Scripting 把 Project 与已激活 .iplugin Mount 中的 C# source、assembly definition 当成正式资产,再把它们编译为可回滚的 collectible Script Module。文件发现和变化来源是统一 Asset Database;该项目没有自己的 FileSystemWatcher,也不递归扫描 Project 目录。
Play Session 未退休时,手动 Reload 禁用,自动变化保留最新请求。等待状态只记录一次 Info,不显示阻塞编译 Modal;停止按钮与快捷键继续可用。完整回到 Editing 后再编译、激活并验证旧 generation 退休,此时才显示独占进度。待处理状态仍阻止依赖最新编译结果的发布,不能把等待当作新代已就绪。
| Source | Asset | Importer | Named outputs |
|---|---|---|---|
*.cs |
ScriptSourceAsset |
CSharpScriptImporter |
source, diagnostics, type-manifest, asset-state |
*.iasmdef |
ScriptAssemblyDefinitionAsset |
ScriptAssemblyDefinitionImporter |
source, asset-state |
两个 Importer 都显式声明 AssetDeploymentScope.AuthoringOnly:这些 Asset 在 Editor 中保留 persistent identity、编译输入和诊断,但 Game 导出只部署编译后的 Runtime DLL,不复制 .cs、.iasmdef 或它们的 source artifact。
每个受支持 source 都有 .imeta 和 persistent ID。type-manifest 保存该 source 的声明、位置和 partial 信息;聚合编译后还会生成 assembly 级 *.types.cache,记录可附加类型最终使用的 source identity、Stable Type ID、类型种类和 canonical source。该文件和 diagnostics.cache 都是可丢弃、严格校验的内部编译缓存,不是项目结构化资产。C# 语法错误不会取消 source identity;parse diagnostics 进入 source asset,聚合 assembly build 可以失败并继续运行旧程序集。
Compiler 读取不可变 artifact snapshot,不直接读取正在被外部编辑器写入的 source 文件。普通 Project 编译使用已提交 Asset Catalog;Plugin 安装/更新使用隔离 AssetSourceMountTransaction 的候选 Catalog。两者都保证一次 build 的 fingerprint、语法树和 Plugin source 来自同一 revision,但候选 Plugin 在成功前不会出现在 active Asset/Plugin API 中。
每个脚本 assembly 还会生成 Inno.AssetSource metadata:Project assembly 的值是 project,安装包 assembly 的值是所属 Plugin ID。业务脚本使用 Assets.LocalPath("Materials/Default.imaterial") 建立 source-local 引用,因此同一份完整 Project 源码在直接开发时读取 Project Assets,导出并安装为 .iplugin 后读取自己的只读 Mount。业务代码不声明、探测或硬编码 Plugin source ID;这项能力属于所有脚本系统,不是 Rendering 专用适配。
Project Assets 中的 ~ 目录仍作为普通 source 导入并参与 assembly discovery,开发工程可以直接运行其中代码。相同目录被打入 .iplugin 后,在安装态 Mount 中成为待 Import sample,不参与 Plugin assembly;任何 ~ 子树都不会进入 Player runtime closure。
using Inno.Assets;
using Inno.Assets.Pipeline;
using Inno.Scripting.Compiler;
static bool SaveDefinition(AssetPipeline assets)
{
var definition = new ScriptAssemblyDefinitionAsset(
"Project.Gameplay", ScriptAssemblyScope.Runtime,
references: ["Project.Common"], defines: ["GAMEPLAY_DEBUG"]);
return assets.Save(AssetPath.Project("Scripts/Gameplay/Gameplay.iasmdef"), definition);
}.iasmdef 是 Inno Serialization 原生资产,不是 JSON 文档。Editor 与工具通过 AssetPipeline.Save 和对应 Importer 共用同一序列化、metadata 与依赖通道。
最近父目录的 .iasmdef 决定脚本归属。没有 definition 时:
*.editor.cs进入Inno.EditorScripts;- 其他
.cs进入Inno.GameScripts。
显式 asmdef 优先于 filename convention。Editor assembly 可引用 Runtime;Runtime 引用 Editor 会在候选 build 前失败。引用 cycle、未知 assembly、保留名冲突同样作为 compilation diagnostic 返回。
固定 builtin assembly name 不取 Project 文件夹名,因此 Project 改名不会改变 fallback Stable Type ID。
<Project>/
├─ Assets/
│ ├─ Scripts/**/*.cs
│ └─ **/*.iasmdef
├─ Plugins/
│ └─ *.iplugin
├─ Library/
│ ├─ AssetDatabase/
│ ├─ Plugins/<id>/<contentHash>/Assets/
│ ├─ Artifacts/
│ │ ├─ ab/cd/<asset-key>/...
│ │ └─ ScriptAssemblies/
│ │ ├─ .assemblies/<assembly-key>/...
│ │ └─ <generation-key>/
│ │ ├─ *.dll
│ │ ├─ *.pdb
│ │ ├─ *.xml
│ │ ├─ *.types.cache
│ │ └─ diagnostics.cache
│ ├─ ScriptApi/
│ └─ IDE/
├─ Inno.GameScripts.csproj
├─ Inno.EditorScripts.csproj
├─ <asmdef-name>.csproj
└─ InnoProject.sln
Project 根目录和 InnoProject.sln 只投影用户可编辑的 Project assembly。安装在 Plugins 中的代码由同一编译图构建并参与原子 generation,但其 source 与内部 assembly topology 不作为 Rider/IDE 项目暴露;Inno.GameScripts、Inno.EditorScripts 和 Project .iasmdef 工程引用 Library/IDE/PluginReferences 中按同一裁剪逻辑 API 从 Plugin source 生成的 metadata reference。这样 IDE 与运行时编译保留一致的逻辑类型身份,同时 Project 根目录不出现 Plugin 工程。每次成功激活都会删除历史遗留的 Inno.Plugin.*.csproj 与对应 API map。
ScriptAssemblies 不再出现 1/2/3... 数字 generation。每个 asmdef/builtin assembly 的 key 覆盖脚本内容 hash、规范化 asmdef 配置、scope/options、公开 Script API contract fingerprint、所属 Source Mount 及直接 dependency key;它不使用无关 Importer 实现 MVID。依赖 key 变化会自然传播到反向依赖,而无关 assembly 直接复用 .assemblies 中的 DLL/PDB/XML/type manifest/diagnostics。完整 generation key 组合有序 assembly key 与 Plugin content key,并在成功后一次性形成 load staging。Script assembly cache 使用 7 天 grace period 与 4 GiB 上限;Library/ScriptApi reference artifact cache 独立使用 7 天与 512 MiB 上限,并保护当前 Runtime/Editor contract 目录。
增量同时作用于 artifact 与 ALC closure。每个已激活 Plugin 使用独立 Plugin.<id> collectible ALC,并通过 manifest 依赖形成显式拓扑;Project Runtime 与 Editor Scripts 各使用一个 ALC。Editor-only 变化只替换 Editor;Runtime 变化替换 Runtime + Editor;某个 Plugin 变化只替换该 Plugin、依赖它的 Plugin 及 Project Scripting。未重编译 assembly 可以复用不可变字节产物,但每个被纳入 closure 的目标 ALC 都是新 generation,下游绑定同一事务中的精确上游 Assembly 实例。
ModuleHost 自己的 runtime generation 仍存在于 assembly shadow cache,用于区分 collectible ALC;它不写入 .imeta、Scene、Prefab 或 artifact identity。
Editor 的公开工作流入口是 IEditorScriptCompilation。内部 EditorScripting Module 拥有编译调度和激活流程;ScriptCompiler、ScriptReloadHost 分别负责产物编译与 generation publication,具体契约见 Compiler 和 Reload。
RequestCompilation() 返回绑定到本次请求的 IScriptCompilationTicket。调用方保留票据,在后续 owner-thread 安全点观察 isCompleted 和 state;不能用另一个请求的成功结果启动 Play/Build,也不能在 UI 线程忙等待。
Succeeded 要求编译、激活及旧代际退休验证完成。失败、取消或被新请求替代不授予发布权限;Faulted Host 需要重启。
using Inno.Editor.Scripting;
static IScriptCompilationTicket Request(IEditorScriptCompilation scripts)
{
return scripts.RequestCompilation();
}
static bool CanContinue(IScriptCompilationTicket ticket)
{
return ticket.isCompleted && ticket.state == ScriptCompilationTicketState.Succeeded;
}菜单中的 Scripting/Reload Scripts 与 Scripting/Reload Plugins 由本项目的内部 Action 转给相同 owner。扩展不得自己建立第二套编译或卸载队列。关闭时先取消并排空编译,再完成退休,最后释放借用的资产与模块服务。
用户从菜单排队请求或文件观察器产生请求时,Editor 立即以 0% 打开阻塞式 Modal,与 Settings Modal 使用相同的后方交互禁用和 popup 规则。Modal 使用固定宽度,状态文字按可用 content width 自动换行,并提供 Cancel。后台编译、Editor frame 与进度绘制继续运行;阻塞的是后方窗口输入,而原子激活候选仍只发生在短 safe point。
进度由 project generation、source parse、API analysis、diagnostics、emit 和 reload preparation 等真实工作项推进。ScriptCompilationResult.stageTimings 按执行顺序保留每个完成阶段的 wall time。编译阶段占 0–80%,candidate staging 推进到 86%,Scene/extension 原子迁移推进到 94%,事务提交后进入 97% 的强制卸载验证,只有验证成功、验证确定失败或无需 reload 时才显示 100%。Roslyn 单次 Emit 没有内部百分比 callback,因此执行某个工作项时进度会停留,完成后跳到下一个比例;不会用计时器伪造连续进度。
成功 assembly artifact 同时保存完整的内部 diagnostics.cache。启动命中内容缓存时会重新发布同一组 warning,而不是只复用 DLL/PDB 后返回空 diagnostics;因此缓存命中与实际 Roslyn emit 对 Console Panel 具有一致的可观察结果。IDE 投影在 generation 激活之后独立执行,其失败只影响代码编辑体验,并通过 Script IDE Projection 诊断来源报告 Warning;它不会把已经成功的脚本候选伪装成编译或激活失败。
IEditorScriptCompilation 是 host feature 使用的最小只读门禁;internal EditorScripting module 实现它,Play Mode 只依赖该公开接口与票据,不引用内部编译调度实现。
| 成员 | 语义 |
|---|---|
RequestCompilation() |
为 Play/Export 等宿主工作流排队一次新的 cache-aware 编译。 |
state |
Initializing、Compiling、Ready 或 Failed。 |
status |
当前 compiler/reload 阶段的可读说明。 |
lastCompilation |
最近完成的 ScriptCompilationResult,首次完成前为 null。 |
Ready 表示最近编译成功、generation 已完成激活且旧代 GC 验证通过;编译、candidate activation 和旧 ALC unload verification 期间均为 Compiling。IScriptCompilationTicket 也必须等待上述完整过程,不能在 80% 编译完成或刚发布候选时提前成功。IDE 投影在屏障完成后生成,避免在 AwaitingCollection 期间申请新 read lease。即使其他 Host 边界先推进完成了屏障,下一次 Editor Update 仍会完成对应票据并关闭弹窗,且不依赖窗口焦点。
编译、激活或退休失败均为 Failed,新的 Play entry 不会静默使用过期脚本。退休失败由 Core Diagnostics 显式报告并关闭进度弹窗;Faulted 优先于 queued/compiling flags,遗留排队标记不能让 Editor 永远显示忙碌。Faulted Host 的新请求直接获得失败票据,需要重启,不能继续 reload。普通编译失败时 active generation 保持不变;Plugin availability 失败时 active generation 已明确退休不可成立的 module closure,场景状态以 Missing 保留。该 contract 是 Editor host API,不加入 EditorScripts 的逻辑 facade。
成功结果的 runtimeAssemblyPaths 是本 generation 中所有 runtime-scope main/preload assembly 的去重绝对路径。Game Export 只消费这组路径,因此不会凭输出目录猜测 DLL,也不会把 Editor assembly 部署进 Player;路径对应的 generation 必须在导出开始时仍是最新成功结果。
脚本只能引用各项目 Properties/ScriptingApi.cs 明确导出的逻辑 API:
using InnoEngine.Logging;
using InnoEngine.Reflection;
using InnoEngine.Scene;
using InnoEngine.Serialization;
[StableTypeId("c14f7138-0c5c-4e69-8376-cec8edc3056c")]
public sealed class PlayerController : GameBehavior
{
[SerializableProperty]
private float m_speed = 5f;
protected override void Update()
{
Log.Debug(typeof(PlayerController), "Speed: {0}", [m_speed]);
}
}- IDE facade 真正定义
InnoEngine.*/InnoEditor.*metadata 类型,并携带重写后的 XML documentation。 - IDE csproj 不引用真实
Inno.*实现程序集,因此实现 namespace 无法解析。 - Runtime Roslyn 使用保持真实 CLR identity 的裁剪 reference set,并把逻辑 using 重写为声明的实现 namespace。
- Stub builder 会枚举每个 exported type 的全部 public/protected member;签名依赖未导出类型时构建直接失败,并报告完整 member 与缺失类型。只有明确的 host/native API 可以用 member 级
[ScriptingApiIgnore]忽略;Runtime 与 IDE reference assemblies 共用同一闭包校验结果。 - 裁剪 reference 只保留其实现成员同样可见的接口;只由 private 显式成员实现的基础设施接口不会出现在 facade base list,因此不会泄漏
EditorModule的 internal Dispose adapter,也不会产生缺失接口成员的 reference assembly。Module/Panel 项目状态直接由 protectedEditorStatehooks 提供,facade 不导出 Workspace interface、reader/writer 或 JSON DOM。 - 所有脚本文件必须显式声明自己使用的
InnoEngine.*/InnoEditor.*namespace。 - 编译范围导入、MSBuild
Usingitem、隐式导入和 plugin metadata 注入均不受支持。 - Script API fingerprint 来自规范化 public/protected contract、逻辑 namespace/type mapping 与可附加类型身份;实现方法体或实现程序集 MVID 单独变化不会使 reference artifact 失效。XML documentation 与该 fingerprint 的不可变 reference artifact 一起生成并复用,不作为独立的二进制公开契约输入。
AssetPipelineOptions等 host initialization 类型不导出;脚本只看到查询、加载、Importer writer 与 Build Processor 所需契约。
Editor facade 按 feature 分布:
| Facade | 来源 |
|---|---|
InnoEditor.Core |
Inno.Editor.Core lifecycle contracts |
InnoEditor.Interactions |
Inno.Editor.Interactions Action、Menu、Selection 与 Drag/Drop contracts |
InnoEditor.Assets |
Inno.Editor.Panel.FileBrowser AssetEditor contracts |
InnoEditor.Scene |
IEditorSceneWorkspace 查询/工作流接口与 SceneEdits 编辑门面 |
InnoEditor.Hierarchy |
Inno.Editor.Panel.Hierarchy area/action/drop contracts |
InnoEditor.Inspection |
Inno.Editor.Inspection drawer contracts,以及 Inno.Editor.Panel.Inspector 的 area/action/drop contracts |
InnoEditor.ImGui |
ImGuiIcon、pointer-free NativeImGui、EditorPalette、EditorStyleMetrics 与 widgets |
InnoEditor.Settings |
EditorSetting、ProjectSettingEditor<T> 与对应 placement attributes |
菜单直接声明在 Action 上,不需要 package class 或集中注册:
using InnoEngine.Core;
using InnoEditor.Interactions;
[EditorAction("project.items.select", "project/items")]
[EditorMenu("project/items", "Selection/Select Item")]
public sealed class SelectItemAction : EditorAction<IdentityObject>
{
protected override void Execute(EditorActionContext<IdentityObject> context)
=> context.interactions.For(context.area, context.target).Select();
}StableTypeId 不是普通脚本 Component/System 的必填项。编译器使用下列 canonical source 规则:
- 每个
.cs的.imetapersistent ID 是 source identity; - 文件名与
GameBehavior/GameSystem类型名匹配的文件是默认 canonical source;*.editor.cs比较时会忽略.editor; - 单文件只有一个可附加类型时,即使文件名与类型名暂时不一致,也能无歧义继承该 source identity,并给出命名 warning;
- partial 类型只有 canonical 文件提供身份,其他 partial 文件只是 compilation input;
- 一个文件包含多个可附加类型时,只为同名主类型自动分配 source-based ID;其他类型给出
INNO2001,应拆文件或显式添加[StableTypeId]; - 显式
[StableTypeId]始终优先,适合跨 source 移动、特殊多类型布局和手动迁移。
自动 Stable Type ID 由 canonical .cs.imeta persistent ID 确定性派生,因此移动文件、文件与类型一起改名、或在唯一 source 内改名都不会改变 Scene 中的类型身份。编译器只生成当前 canonical ID,不注册“程序集名 + 完整类型名”former alias。没有唯一 canonical source 的可附加类型会让编译失败,直到拆分文件或显式添加 [StableTypeId]。
Generator 从 Asset Catalog 与 asmdef graph 生成每个 assembly 的 SDK-style csproj:
EnableDefaultItems=false;- 只有明确
Assets/**/*.csCompile item; Library不显示为 source folder;- Editor project 引用允许的 Runtime project;Plugin 依赖使用 IDE metadata reference;
- facade reference 绑定同 fingerprint XML documentation;
bin/obj/analyzer/map 全部位于Library/IDE。
IDE 工程是补全和诊断模型;Editor 实际热编译仍使用进程内 Roslyn 与同一 API/catalog 输入。
Plugin 只能来自项目根 Plugins/*.iplugin,并通过 Plugin.inno、archive 路径安全、依赖图与 .imeta 完整性校验,再进入隔离只读 AssetSourceMount 候选;编译与迁移全部成功后才进入统一 active Asset Database。Folder Plugin、.zip Plugin、预编译 DLL 和“路径里含 Plugins 就视为插件”的协议不存在。无 .iasmdef 时,每个 Plugin ID 自动获得 Runtime 与 Editor 默认程序集;*.editor.cs 进入 Editor scope,其余 .cs 进入 Runtime scope。显式 .iasmdef 必须列在清单 assemblyDefinitions 中。
Plugin 只能引用 Host API 与清单声明的依赖 Plugin,不能引用项目脚本;Runtime Scripts 能看到 runtime-scope Plugin,Editor Scripts 可看到 Runtime Scripts 与 Plugin Editor API。每个 Plugin ID 对应独立 Plugin.<id> collectible ALC,清单依赖成为 upstreamModuleNames,更新/移除只影响反向依赖 closure。错误方向、scope 泄漏、程序集名称冲突、缺失依赖、cycle 或 Roslyn 编译错误会在 stage/publish 前失败;Editor host 会丢弃隔离候选,旧模块 generation、Mount、Catalog、Type/Registry、资产和设置保持活动。ALC 是卸载隔离,不是安全沙箱;把带代码容器放入 Plugins/ 就表示允许它以项目脚本相同的本机权限执行。
成功 build 通过一个多模块 ModuleHost.BeginReload 准备完整候选 Assembly catalog、TypeCache 与 Registry。Scripting 随后只把 prepared session 交给 Inno.Editor.Core 的 EditorReloadCoordinator;它不知道 Scene、Component/System、Missing 或任何 Panel。Scene 等独立 feature 通过 Core 的中立 participant contract 捕获自己的 generation-bound live state。旧 extension 的 Stop/Detach、交互瞬态清理、候选 Start/Attach 与各 feature 状态恢复都在发布回调返回前完成;全部迁移成功才进入 cleanup-only Complete。
内部 safe-point apply 在成功前只读取 candidate,不提前消费。Plugin/Runtime/Editor 任一 stage、Registry、Asset rescan、Scene restore 或 extension activation 失败都逆序恢复 Scene、extensions、TypeCache、Registry 与全部 previous modules,不发布部分 generation;同一 pending candidate 保留以便显式重试,后续成功编译可原子替换它。
Serialized state 使用逐成员兼容迁移:成员类型保持兼容时恢复旧值;新增成员保留新默认值;删除成员忽略旧数据;同名成员改成不兼容类型时保留新默认值并输出 INNOHR0001 warning,不会仅因单个字段变化回滚整个程序集。普通 Serialization API 仍保持严格模式。
失败时所有已捕获 feature transaction 和 Assembly transaction 一起反向 rollback。Scene feature 自己实现 Scene migration、Coroutine owner 停止与 Scene diagnostics;Scripting 不调用这些领域 API。Scene 的 Edit Mode migration 不触发生命周期;Runtime reload 会对旧 active instance 调用一次 OnDisable,新 instance 在下一次正常 update 调用 OnEnable,不会重复 Awake/Start,也不会调用 Reset/OnDestroy。
如果候选 generation 缺少 live Component/System,Scene participant 会把对象变为 host-owned missing placeholder,并继续保存 TypeRef(落盘仅原逻辑 Stable ID)、原类型名、property bytes、asset dependencies、persistent ID、顺序和图引用。placeholder 身份和 missing 标志不进入 Scene schema,类型消失/恢复本身不改变 clean Scene 的 dirty 状态。类型删除、插件移除、Scene/Prefab round-trip 都不会持有旧 ALC;相同 Stable ID 返回时 isValid 自动恢复并原位重建。INNOHR0002 完全由 Scene feature 按当前 loaded Scene 与 TypeCache generation 对账:打开带 Missing 的 .iscene 后,在 Scene workspace 下一次安全更新就会出现在 Console,不需要等待 Recompile/Reload。每次协调 reload 完成还会请求各领域刷新诊断,因此无变化 Recompile 后仍会重新发布用户 Clear 掉但依然成立的 Missing;类型恢复后该组立即解除。恢复构造、identity 转移、property restore 或失败清理不完整时仍精确回滚到原占位对象。
无法自动迁移 static 字段、后台 Thread/Task、第三方事件订阅或外部裸 CLR 引用。用户代码需要在 OnDisable 释放这些资源。
手动 Scripts/Plugins Reload 在 Play 未完整退休时禁用;执行入口再次检查准入。自动脚本或安装包变化只更新待处理请求,不自动停止游戏。停止成功后推进最新请求;强引用残留导致 Faulted 时要求完整重启 Host。
被拒绝的 RequestCompilation 返回失败 ticket,不替换当前已接受 ticket。成功 ticket 必须完成新代激活与旧代 Full GC/finalizers/Full GC 弱监测,不能以编译成功代替 Reload 成功。
IEditorScriptCompilation.progress 返回 EditorScriptCompilationProgress,同时描述 operation ID、fraction、status、取消请求和当前取消能力。呈现只读取一次快照;CancelCompilation(operationId) 拒绝旧操作的按钮回调。operation ID 是本 Host 的瞬时请求序号,不是对象 Identity,也不参与持久化。
80% 表示编译阶段完成,之后仍需激活、恢复和严格 unload verification。成功完成不能早于退休屏障。后台编译观察者在编译阶段退出后停止发布;新的排队请求不接受旧请求的消息。
此清单对应当前 SDK 求值与源码符号;内部类型不构成公开 API。
| API | 职责与参数 | 返回语义 | 失败条件 |
|---|---|---|---|
public readonly record struct Inno.Editor.Scripting.EditorScriptCompilationProgress : System.IEquatable<Inno.Editor.Scripting.EditorScriptCompilationProgress> |
Captures the progress and cancellation policy of one editor script request. operationId: The request identity within the owning script host.fraction: The completed fraction of the complete reload workflow.status: The current stage or failure diagnostic.cancellationRequested: Whether cancellation is draining owned work.canCancel: Whether this exact operation currently admits cancellation. |
— | — |
public Inno.Editor.Scripting.EditorScriptCompilationProgress.EditorScriptCompilationProgress(long operationId, float fraction, string status, bool cancellationRequested, bool canCancel = false) |
Captures the progress and cancellation policy of one editor script request. operationId: The request identity within the owning script host.fraction: The completed fraction of the complete reload workflow.status: The current stage or failure diagnostic.cancellationRequested: Whether cancellation is draining owned work.canCancel: Whether this exact operation currently admits cancellation. |
— | — |
public long Inno.Editor.Scripting.EditorScriptCompilationProgress.operationId { get; init; } |
The request identity within the owning script host. | — | — |
public float Inno.Editor.Scripting.EditorScriptCompilationProgress.fraction { get; init; } |
The completed fraction of the complete reload workflow. | — | — |
public string Inno.Editor.Scripting.EditorScriptCompilationProgress.status { get; init; } |
The current stage or failure diagnostic. | — | — |
public bool Inno.Editor.Scripting.EditorScriptCompilationProgress.cancellationRequested { get; init; } |
Whether cancellation is draining owned work. | — | — |
public bool Inno.Editor.Scripting.EditorScriptCompilationProgress.canCancel { get; init; } |
Whether this exact operation currently admits cancellation. | — | — |
public override string Inno.Editor.Scripting.EditorScriptCompilationProgress.ToString() |
Returns the fully qualified type name of this instance. | The fully qualified type name. | — |
public static bool Inno.Editor.Scripting.EditorScriptCompilationProgress.operator !=(Inno.Editor.Scripting.EditorScriptCompilationProgress left, Inno.Editor.Scripting.EditorScriptCompilationProgress right) |
由 C# 编译器生成的值契约成员。 | — | — |
public static bool Inno.Editor.Scripting.EditorScriptCompilationProgress.operator ==(Inno.Editor.Scripting.EditorScriptCompilationProgress left, Inno.Editor.Scripting.EditorScriptCompilationProgress right) |
由 C# 编译器生成的值契约成员。 | — | — |
public override int Inno.Editor.Scripting.EditorScriptCompilationProgress.GetHashCode() |
Returns the hash code for this instance. | A 32-bit signed integer that is the hash code for this instance. | — |
public override bool Inno.Editor.Scripting.EditorScriptCompilationProgress.Equals(object obj) |
Indicates whether this instance and a specified object are equal. obj: The object to compare with the current instance. |
true if obj and this instance are the same type and represent the same value; otherwise, false. | — |
public bool Inno.Editor.Scripting.EditorScriptCompilationProgress.Equals(Inno.Editor.Scripting.EditorScriptCompilationProgress other) |
Indicates whether the current object is equal to another object of the same type. other: An object to compare with this object. |
true if the current object is equal to the other parameter; otherwise, false. | — |
public void Inno.Editor.Scripting.EditorScriptCompilationProgress.Deconstruct(out long operationId, out float fraction, out string status, out bool cancellationRequested, out bool canCancel) |
由 C# 编译器生成的值契约成员。 | — | — |
public enum Inno.Editor.Scripting.EditorScriptCompilationState : int |
Identifies whether the active project script generation can safely start game simulation. | — | — |
Inno.Editor.Scripting.EditorScriptCompilationState.Initializing = 0 |
The script service has not produced its initial active generation. | — | — |
Inno.Editor.Scripting.EditorScriptCompilationState.Compiling = 1 |
A requested script generation is compiling, activating, or completing unload verification. | — | — |
Inno.Editor.Scripting.EditorScriptCompilationState.Ready = 2 |
The most recent compilation succeeded, its generation is active, and retired generations passed GC verification. | — | — |
Inno.Editor.Scripting.EditorScriptCompilationState.Failed = 3 |
Compilation, activation, or generation retirement failed, so game simulation must not start. | — | — |
public interface Inno.Editor.Scripting.IEditorScriptCompilation |
Exposes the minimal script-generation readiness contract required by editor workflows. | — | — |
bool Inno.Editor.Scripting.IEditorScriptCompilation.requiresExclusiveProgress { get; } |
Gets whether compiler or activation work currently requires a blocking progress presentation. | — | — |
Inno.Editor.Scripting.EditorScriptCompilationProgress Inno.Editor.Scripting.IEditorScriptCompilation.progress { get; } |
Gets one immutable snapshot of the current reload operation and its cancellation policy. | — | — |
void Inno.Editor.Scripting.IEditorScriptCompilation.CancelCompilation(long operationId) |
Requests cancellation while retaining ownership until compilation and retirement finish. operationId: The request observed by the presentation; stale requests have no effect. |
— | — |
Inno.Editor.Scripting.IScriptCompilationTicket Inno.Editor.Scripting.IEditorScriptCompilation.RequestCompilation() |
Queues a fresh cache-aware compilation for a build or simulation workflow. | A ticket bound to the exact request. Success requires activation and completed retirement verification; a faulted host returns a failed ticket and requires restart. | — |
Inno.Editor.Scripting.IScriptCompilationTicket? Inno.Editor.Scripting.IEditorScriptCompilation.currentTicket { get; } |
Gets the most recently requested compilation ticket, or null when no explicit request exists. | — | — |
Inno.Editor.Scripting.EditorScriptCompilationState Inno.Editor.Scripting.IEditorScriptCompilation.state { get; } |
Gets the current script-generation readiness state. | — | — |
Inno.Scripting.Compiler.ScriptCompilationResult? Inno.Editor.Scripting.IEditorScriptCompilation.lastCompilation { get; } |
Gets the most recently completed compilation, or null before the first attempt completes. | — | — |
public interface Inno.Editor.Scripting.IScriptCompilationTicket |
Exposes the immutable observer view of one exact script compilation and activation request. | — | — |
long Inno.Editor.Scripting.IScriptCompilationTicket.requestId { get; } |
Gets the producer-local monotonic identifier of this request. | — | — |
Inno.Editor.Scripting.ScriptCompilationTicketState Inno.Editor.Scripting.IScriptCompilationTicket.state { get; } |
Gets the current lifecycle state of this exact request. | — | — |
string Inno.Editor.Scripting.IScriptCompilationTicket.status { get; } |
Gets a human-readable description of the current or terminal state. | — | — |
Inno.Scripting.Compiler.ScriptCompilationResult? Inno.Editor.Scripting.IScriptCompilationTicket.result { get; } |
Gets the completed compiler result, or null before the compiler finishes. | — | — |
bool Inno.Editor.Scripting.IScriptCompilationTicket.isCompleted { get; } |
Gets whether no further state transition is valid for this request. | — | — |
public enum Inno.Editor.Scripting.ScriptCompilationTicketState : int |
Identifies the lifecycle state of one exact script compilation request. | — | — |
Inno.Editor.Scripting.ScriptCompilationTicketState.Queued = 0 |
The request is queued behind the active compiler operation. | — | — |
Inno.Editor.Scripting.ScriptCompilationTicketState.Compiling = 1 |
The request owns the compiler pipeline or is activating its candidate generation. | — | — |
Inno.Editor.Scripting.ScriptCompilationTicketState.Succeeded = 2 |
The request compiled and atomically activated its candidate generation. | — | — |
Inno.Editor.Scripting.ScriptCompilationTicketState.Failed = 3 |
Compilation or candidate activation failed without replacing the active generation. | — | — |
Inno.Editor.Scripting.ScriptCompilationTicketState.Canceled = 4 |
The request was explicitly canceled before activation. | — | — |
Inno.Editor.Scripting.ScriptCompilationTicketState.Superseded = 5 |
A newer request replaced this request before its candidate could activate. | — | — |
| 工程 | 边界 |
|---|---|
Inno.Editor.Interactions |
实现依赖;不传递 compile surface |
Inno.Assets |
实现依赖;不传递 compile surface |
Inno.Plugins.Authoring |
实现依赖;不传递 compile surface |
Inno.Extensibility.Modules |
实现依赖;不传递 compile surface |
Inno.Core.Diagnostics |
实现依赖;不传递 compile surface |
Inno.Core.Logging |
实现依赖;不传递 compile surface |
Inno.Core.Settings |
实现依赖;不传递 compile surface |
Inno.Scripting.Reload |
实现依赖;不传递 compile surface |
Inno.Editor.Core |
实现依赖;不传递 compile surface |
Inno.Assets.Pipeline |
实现依赖;不传递 compile surface |
Inno.Scripting.Compiler |
公开签名依赖 |
Inno.Core.Serialization |
公开签名依赖 |
Inno.Extensibility.Catalogs |
公开签名依赖 |