一键导入
unreal-modeling
通过 GeometryScript + UCP 进行程序化网格建模。当用户要求创建、修改、修复、简化、UV、布尔、变形或以其他方式处理网格时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
通过 GeometryScript + UCP 进行程序化网格建模。当用户要求创建、修改、修复、简化、UV、布尔、变形或以其他方式处理网格时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
GeometryScript 资产读写与碰撞操作。当用户要求精细控制 StaticMesh 资产加载/保存选项、创建新资产、生成碰撞体时使用。
GeometryScript 网格属性操作。当用户要求设置/查询顶点色、Polygroup、材质 ID 时使用。
Create geometry through the GeometryScript modeling workflow. Use when the user asks to create primitives, generate profile-based shapes, or produce mesh assets or working meshes for downstream pipelines.
GeometryScript 变形与变换操作。当用户要求弯曲、扭曲、平滑、噪声、位移、平移、旋转、缩放网格时使用。
GeometryScript 网格处理操作。当用户要求修复、简化、Remesh、布尔运算、体素化、分解、基础编辑或细分网格时使用。
GeometryScript 法线与切线操作。当用户要求重算法线、分裂法线、翻转法线、计算切线或修复法线方向时使用。
| name | unreal-modeling |
| description | 通过 GeometryScript + UCP 进行程序化网格建模。当用户要求创建、修改、修复、简化、UV、布尔、变形或以其他方式处理网格时使用。 |
建模通过两条路径完成:MeshOperationLibrary(生命周期管理 + 类型桥接)和 GeometryScript 原生库(600+ 函数,通过 UCP 通用 call 直接调用)。
前置条件:UE 编辑器运行中,UCP 插件已启用。传输层规则见 unreal-client-protocol。
CDO:/Script/UnrealClientProtocolEditor.Default__MeshOperationLibrary
| 函数 | 参数 | 说明 |
|---|---|---|
CreateDynamicMesh | — | 创建空的临时 DynamicMesh,返回对象路径 |
ReleaseDynamicMesh | Mesh | 标记 mesh 等待 GC 回收 |
ReleaseAllDynamicMeshes | — | 释放所有已跟踪的 mesh |
ListDynamicMeshes | — | 列出所有已跟踪 mesh 的路径 |
| 函数 | 参数 | 说明 |
|---|---|---|
GetMeshSummary | TargetMesh | 返回 JSON:vertexCount、triangleCount、uvSetCount、bounds、hasNormals、hasVertexColors、hasMaterialIDs、hasPolygroups、isClosed、isDense |
| 函数 | 参数 | 说明 |
|---|---|---|
CopyFromStaticMesh | TargetMesh, SourceStaticMesh | 将 StaticMesh 加载到 DynamicMesh(默认选项) |
CopyToStaticMesh | SourceMesh, TargetStaticMesh | 将 DynamicMesh 写回已有 StaticMesh |
CopyToNewStaticMeshAsset | SourceMesh, AssetPath | 创建新 StaticMesh 资产,返回资产路径 |
GeometryScript 的 FGeometryScriptMeshSelection 内部使用不可序列化的 TSharedPtr 存储数据,无法通过 JSON 传递。以下函数从可序列化的输入创建 Selection:
| 函数 | 参数 | 说明 |
|---|---|---|
SelectAllTriangles | TargetMesh | 选择全部三角形 |
SelectTrianglesByIDs | TargetMesh, TriangleIDs(int 数组) | 按 ID 选择三角形 |
SelectVerticesByIDs | TargetMesh, VertexIDs(int 数组) | 按 ID 选择顶点 |
SelectPolygroupByID | TargetMesh, PolygroupID, GroupLayer | 按 Polygroup 选择 |
SelectMaterialByID | TargetMesh, MaterialID | 按材质 ID 选择 |
GetSelectionIDs | Selection | 从 Selection 提取 ID 数组 |
GeometryScript 的列表类型(FGeometryScriptIndexList、FGeometryScriptVectorList 等)将数据存储在不可序列化的 TSharedPtr<TArray<...>> 中。用 Make* 从数组创建,用 Get*Array 提取:
| Make 函数 | Get 函数 | 桥接类型 |
|---|---|---|
MakeIndexList(Indices, IndexType) | GetIndexListArray | FGeometryScriptIndexList |
MakeVectorList(Vectors) | GetVectorListArray | FGeometryScriptVectorList |
MakePolyPath(Points, bClosedLoop) | GetPolyPathArray | FGeometryScriptPolyPath |
MakeSimplePolygon(Vertices) | GetSimplePolygonArray | FGeometryScriptSimplePolygon |
MakeColorList(Colors) | GetColorListArray | FGeometryScriptColorList |
MakeUVList(UVs) | GetUVListArray | FGeometryScriptUVList |
MakeScalarList(Scalars) | GetScalarListArray | FGeometryScriptScalarList |
MakeTriangleList(Triangles) | GetTriangleListArray | FGeometryScriptTriangleList |
GeometryScript 函数是标准的 BlueprintCallable 静态函数,通过 UCP 通用 call + CDO 路径调用。
/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_<类名>
示例:/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshRepairFunctions
UDynamicMesh*:传路径字符串,如 "/Engine/Transient.DynamicMesh_0"USTRUCT Options:传 JSON 对象,只写需要覆盖的字段,省略的字段使用默认值UENUM:传字符串,即枚举值名,如 "Automatic"、"AttributeAware"out 参数(如 Outcome、NumFilledHoles):输入时省略,结果中自动返回Debug:省略(默认 nullptr)WorldContextObject:UCP 自动注入多数 GeometryScript 函数返回 UDynamicMesh*(同一个对象,原地修改)。响应中包含 mesh 路径和所有 out 参数。
// 1. 创建工作 mesh
{"object":"/Script/UnrealClientProtocolEditor.Default__MeshOperationLibrary","function":"CreateDynamicMesh"}
// 2. 从 StaticMesh 加载
{"object":"/Script/UnrealClientProtocolEditor.Default__MeshOperationLibrary","function":"CopyFromStaticMesh","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","SourceStaticMesh":"/Game/Meshes/SM_Rock.SM_Rock"}}
// 3. 简化到 5000 三角形
{"object":"/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshSimplifyFunctions","function":"ApplySimplifyToTriangleCount","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","TriangleCount":5000,"Options":{"Method":"AttributeAware"}}}
// 4. 写回
{"object":"/Script/UnrealClientProtocolEditor.Default__MeshOperationLibrary","function":"CopyToStaticMesh","params":{"SourceMesh":"/Engine/Transient.DynamicMesh_0","TargetStaticMesh":"/Game/Meshes/SM_Rock.SM_Rock"}}
// 5. 释放
{"object":"/Script/UnrealClientProtocolEditor.Default__MeshOperationLibrary","function":"ReleaseDynamicMesh","params":{"Mesh":"/Engine/Transient.DynamicMesh_0"}}
// 1. 创建 mesh
{"object":"/Script/UnrealClientProtocolEditor.Default__MeshOperationLibrary","function":"CreateDynamicMesh"}
// 2. 追加 Box 图元
{"object":"/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshPrimitiveFunctions","function":"AppendBox","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","PrimitiveOptions":{},"DimensionX":100,"DimensionY":100,"DimensionZ":100}}
// 3. 自动生成 UV
{"object":"/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshUVFunctions","function":"AutoGenerateXAtlasMeshUVs","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","UVSetIndex":0,"Options":{}}}
// 4. 保存为新资产
{"object":"/Script/UnrealClientProtocolEditor.Default__MeshOperationLibrary","function":"CopyToNewStaticMeshAsset","params":{"SourceMesh":"/Engine/Transient.DynamicMesh_0","AssetPath":"/Game/Generated/SM_Box"}}
// 5. 释放
{"object":"/Script/UnrealClientProtocolEditor.Default__MeshOperationLibrary","function":"ReleaseDynamicMesh","params":{"Mesh":"/Engine/Transient.DynamicMesh_0"}}
// 1-2. 创建两个 mesh 并填充(CreateDynamicMesh + AppendSphere / AppendBox)
// 3. 布尔合并
{"object":"/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshBooleanFunctions","function":"ApplyMeshBoolean","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","TargetTransform":{"Rotation":{"X":0,"Y":0,"Z":0,"W":1},"Translation":{"X":0,"Y":0,"Z":0},"Scale3D":{"X":1,"Y":1,"Z":1}},"ToolMesh":"/Engine/Transient.DynamicMesh_1","ToolTransform":{"Rotation":{"X":0,"Y":0,"Z":0,"W":1},"Translation":{"X":50,"Y":0,"Z":0},"Scale3D":{"X":1,"Y":1,"Z":1}},"BooleanOperation":"Union","Options":{}}}
// 4. 释放 mesh B
{"object":"/Script/UnrealClientProtocolEditor.Default__MeshOperationLibrary","function":"ReleaseDynamicMesh","params":{"Mesh":"/Engine/Transient.DynamicMesh_1"}}
每个库对应一个域 Skill,包含完整的函数签名、Options 结构体字段、枚举值和 JSON 示例:
| 域 Skill | 覆盖的库 |
|---|---|
unreal-modeling-primitives | MeshPrimitiveFunctions、MeshModelingFunctions、PolyPathFunctions、SimplePolygonFunctions、PolygonListFunctions |
unreal-modeling-meshops | MeshRepairFunctions、MeshSimplifyFunctions、RemeshingFunctions、MeshBooleanFunctions、MeshVoxelFunctions、MeshDecompositionFunctions、MeshBasicEditFunctions、MeshSubdivideFunctions、OpenSubdivFunctions |
unreal-modeling-uv | MeshUVFunctions |
unreal-modeling-normals | MeshNormalsFunctions |
unreal-modeling-deform | MeshDeformFunctions、MeshTransformFunctions |
unreal-modeling-query | MeshQueryFunctions、MeshSpatialFunctions、MeshSamplingFunctions、ContainmentFunctions、MeshComparisonFunctions、MeshGeodesicFunctions |
unreal-modeling-selection | MeshSelectionFunctions |
unreal-modeling-attributes | MeshVertexColorFunctions、MeshPolygroupFunctions、MeshMaterialFunctions |
unreal-modeling-asset | StaticMeshFunctions、CreateNewAssetFunctions、CollisionFunctions、EditorDynamicMeshFunctions |
CreateDynamicMesh 或 CopyFromStaticMesh 获取)ReleaseDynamicMesh 避免临时对象堆积UDynamicMesh*FGeometryScriptMeshSelection、FGeometryScriptIndexList、FGeometryScriptPolyPath 等类型时,用 MeshOperationLibrary 的桥接函数从普通数组创建DescribeObject 探索:对任意 GeometryScript CDO 调用 DescribeObject 可查看完整函数列表和签名