关于 uloop-control-play-mode
uloop-control-play-mode 是控制 Unity Editor Play Mode 并查询状态的命令行技能,支持播放、停止、暂停、恢复和单帧步进,并返回状态变化及警告信息。
主要功能
- 01启动或停止 Play Mode
- 02暂停或恢复当前会话
- 03暂停时前进一帧
- 04无副作用地查询状态
- 05报告状态变化和警告
适用场景
- 01运行或停止 Unity 会话
- 02检查 Play Mode 是否暂停
- 03逐帧检查运行中的会话
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hatayama/ unity-cli-loop --skill uloop-control-play-mode安装后在 Claude Code 中输入/uloop-control-play-mode确认已加载。
详细介绍
uloop control-play-mode
控制 Unity Editor 的播放模式(播放/停止/暂停/逐帧),或在不产生副作用的情况下查询状态(status)。
用法
uloop control-play-mode [options]
参数
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
--action | string | Play | Play - 启动播放模式,Stop - 停止播放模式,Pause - 暂停播放模式,Step - 在暂停时前进一帧,Status - 报告当前状态,不做任何更改,Resume - 在任何状态下都等同于 Play,包括在停止时启动播放模式 |
--timeout-seconds | integer | 180 | 等待所请求播放模式状态的最长秒数 |
输出
返回包含当前播放模式状态的 JSON:
IsPlaying:Unity 当前是否处于播放模式IsPaused:播放模式是否已暂停Changed:所请求的操作是否更改了当前播放模式状态WasAlreadyStopped:请求Stop时播放模式是否已经停止ResumedFromPause:Play是否恢复了已暂停的播放模式会话,而非启动新会话Message:所执行操作的描述Warning(string,可选):当操作带有限制说明时设置。全新的Play启动始终会注明会话从编辑时场景状态启动;此外,当存在活动的热重载补丁或启用的暂停点,且启用了 Domain Reload 时,会报告进入 Play 模式的域重载将丢弃其中多少项。启用--persist的暂停点会单独计数:它们会在重载后重新启用,警告会指向pause-point-status,以查看重新启用结果。当 Unity Editor 未处于焦点状态而播放模式仍在运行时,Status也会报告这一情况,因为运行进度可能会受到限制;请运行uloop focus-window,或者使用pause-point --await/--trigger流程,而不是轮询进度。StoppedBy(string,可选):播放模式上次停止的原因:cli-control-play-mode、cli-compile-stop-setting、cli-run-tests-cancel、script-compilation或unknown。当播放模式已停止时的Stop操作,以及播放模式未运行时的Status操作会包含此字段。此 Editor 会话中没有已确认的停止记录时省略。StoppedAt(string,可选):该次停止的 UTC ISO 8601 时间戳。没有停止记录时,与StoppedBy一同省略。
注意事项
- 对已停止的 Editor 执行
Stop会设置Changed: false、WasAlreadyStopped: true - 对已在播放的 Editor 执行
Play不会产生任何操作:它会设置Changed: false,并保留当前会话(包括累积状态、生成的对象和进度),而不是重新启动会话。如果需要干净的状态进行验证,请明确先执行Stop再执行Play,不要指望仅执行Play就能重置任何内容。 - 在 Play Mode 暂停时执行
Play会恢复同一会话:它会设置Changed: true、ResumedFromPause: true和Message: "Play mode resumed"——会话不会重新启动。 Resume是Play的别名,在所有状态下行为都相同,包括在停止时启动 Play Mode。Step恰好前进一帧,并使 PlayMode 保持暂停(即 Editor 的 Next Frame 按钮);它独立于Time.timeScale,并且要求 PlayMode 正在运行- 命令会等待到达所请求的状态后再返回。对于进入 PlayMode 较慢的项目,请增大
--timeout-seconds。 - 在将 PlayMode 行为作为验证依据前,请检查
uloop get-logs --log-type Error中是否存在之前的错误。否则,PlayMode 启动时已存在的错误可能会被误认为是由正在测试的操作导致的。 Status会读取当前状态,不产生副作用:Changed始终为false,不会等待或保存场景,也不会因编译错误而被拒绝。它会报告编译错误当前是否会阻止Play(通过BlockedByCompileErrors和CompileErrors列表),数据读取自上一次编译结果,不会触发新的编译。它不会预测未保存更改导致的阻塞:BlockedByUnsavedChanges描述的是Play请求期间保存失败的情况,而Status从不尝试保存。- 如果无法静默保存未保存的更改,
Play会立即失败并返回CONTROL_PLAY_MODE_UNSAVED_CHANGES错误——最常见的情况是 Untitled 场景,因为它没有可保存到的路径。错误消息会准确列出阻止操作的场景或预制件阶段;请将 Untitled 场景保存到明确指定的路径(或放弃更改),然后重试。 - 从 Edit mode 执行
Play会触发域重载(除非 Enter Play Mode Options 禁用了域重载),这会丢弃所有活动的热重载补丁和已启用的暂停点;使用--persist启用的暂停点除外,它们会在之后重新启用。响应中的Warning会报告被丢弃的数量,以及另外重新启用的数量。仅通过热重载应用的编辑不属于已编译程序集,因此新会话会运行上一次编译的代码——请在执行Play前运行uloop compile以保留这些编辑,或者在 Play Mode 启动后重新应用uloop hot-reload。
评论
支持 Markdown