这是 Unity Pipeline Automation(UPA)中 Asset Transformer 动作"Execute custom script"所填 Python 脚本的权威编写指南。
用途:脚本原样上传,在托管的 AT 容器中执行,约定与本地 Asset Transformer MCP 及普通 Python 程序均不同。
执行环境:容器已初始化 Asset Transformer SDK(pxz)、激活许可并配置好 Python 环境。脚本中不要包含 pxz.core.initialize(...)、许可证配置或环境/路径设置;假设 pxz 可直接导入调用。若无本地 AT 许可,也可在本机做语法检查(纯 Python compile,不需要 pxz),再到远程执行;本地 AT MCP 执行需许可席位,需完整本地能力可联系 Unity 销售。
输入方式:流水线通过动作的 parameters 字段传入输入,值以 sys.argv 到达,脚本必须用 argparse 解析。不得读取环境变量或交互式输入。UPA UI 中展示的 Run 命令只是参数。工作区约定:输入在 /workspace/input,输出在 /workspace/output。
限制:该动作没有 Asset Manager 凭据,无法写入 AM。需要回写时应在流水线 JSON 中串联 Asset Manager Add file 或 Create asset 动作,不要在脚本内调用 AM API。
脚本结构:导入、按操作划分的小函数、带 argparse 的 main() 以及 if name == "main" 保护。副作用放在函数内。
最佳实践:保留装配层级;导出前清理构造几何、隐藏节点与创作元数据;按目标场景调整细分;重复组件用实例化;节点名跨运行保持稳定。性能上优先在细分阶段降面、合并或实例化重复组件、尽早删除无用节点、避免重复遍历大型层级。
代码风格:仅 Python,导入置顶,命名清晰,注释说明非显而易见的 SDK 行为。修改现有脚本时尽量保留其结构与命名。
准确性护栏:pxz API 以共享参考 ../at-scripting/pxz-api-reference.md 为准,未列出即不存在。不要杜撰类、函数、参数、常量、流水线特性或 AM/UPA 调用。pxz 使用整数 occurrence 句柄而非 Node 对象,真实名称如 scene.getOccurrenceName、scene.deleteOccurrences;io.exportScene 签名为 exportScene(fileName: str, root: int = 0),格式由扩展名推断,按格式选项通过 core.setModuleProperty("io", ...) 设置。不确定或未文档化时要明确说明,并给出最接近的受支持做法。
调试顺序:参数处理、文件路径、SDK 调用形态、细分/预处理设置、导出格式。
范围外:外围流水线 JSON 见 pipeline-authoring;本地 AT MCP 工具见 at-scripting;脚本内写回 AM 不可行。示例脚本位于 examples/,包括 import-tessellate-export-glb.py、import-decimate-export-glb.py、bake-ao-and-export.py,均应只使用共享参考中的调用。