You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分CAD(.step/.stp)文件为独立部件,导入Unity后可相对移动?

实现方案

1 STP装配体层级保留预处理

  • 不要直接转OBJ格式,先用CAD处理软件(SolidWorks、FreeCAD、Blender均可)打开原始STP装配文件,确认每个部件的层级结构、命名规则和相对坐标原点
  • 导出时优先选择支持层级保留的FBX格式:FBX本身支持嵌套节点结构,导出时勾选「导出装配层级」「保留每个部件为独立节点」「使用原部件命名」选项,不要勾选「合并网格」
  • 用免费工具FreeCAD操作的话,安装Assembly4工作台后加载STP装配,批量选中需要独立控制的部件,导出FBX时单独勾选「导出每个对象为单独节点」即可
  • 若必须使用OBJ格式,就把每个需要独立控制的部件单独导出为单个OBJ文件,同时记录每个部件的原始相对坐标、父级归属关系,导入Unity后手动重建层级树即可

2 Unity导入后的层级校准

  • 导入FBX到Unity后,先调整Inspector面板的导入设置:Model选项卡下取消勾选「Mesh Compression」(避免部件面数丢失),勾选「Keep Quads」「Read/Write Enabled」;Rig选项卡选「None」;Animation选项卡取消勾选「Import Animation」
  • 导入后Unity会自动生成和CAD装配层级一致的GameObject嵌套树,每个节点对应原始STP里的一个部件,每个节点默认自带MeshFilter、MeshRenderer组件,天然支持独立控制
  • 给需要做相对移动的部件挂载Rigidbody组件,勾选「Is Kinematic」避免物理引擎干扰自主控制,移动时直接修改transform.localPosition/transform.localEulerAngles就能保持和父级部件的相对位置关系

3 核心功能实现

面向相机高亮

  • 给所有需要高亮的部件设置统一的Tag,比如InteractablePart
  • 相机挂载射线检测脚本,每帧发射射线指向相机正前方,射线检测到带对应Tag的物体时,将该物体的材质emissionColor修改为高亮色,射线离开后恢复原始材质即可,核心参考代码:
public Material highlightMat;
private Material originalMat;
private GameObject currentHighlightObj;

void Update()
{
    Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
    if (Physics.Raycast(ray, out RaycastHit hit, 100f))
    {
        if (hit.collider.CompareTag("InteractablePart") && currentHighlightObj != hit.collider.gameObject)
        {
            // 恢复之前高亮物体的材质
            if (currentHighlightObj != null) currentHighlightObj.GetComponent<MeshRenderer>().material = originalMat;
            // 给新命中物体设置高亮
            currentHighlightObj = hit.collider.gameObject;
            originalMat = currentHighlightObj.GetComponent<MeshRenderer>().material;
            currentHighlightObj.GetComponent<MeshRenderer>().material = highlightMat;
        }
    }
    else
    {
        // 射线无命中时恢复原材质
        if (currentHighlightObj != null)
        {
            currentHighlightObj.GetComponent<MeshRenderer>().material = originalMat;
            currentHighlightObj = null;
        }
    }
}

相机内部漫游

  • 给相机添加第一人称控制器脚本,预先获取整个装配体的Bounds范围,每帧判断相机位置是否在Bounds范围内,超出则拉回合法位置,避免相机穿出模型
  • 如果构件内部有大量狭窄结构,给相机挂载胶囊碰撞体,开启简单碰撞检测,避免相机穿模进入部件实体内部

性能优化建议

  • 复杂构件面数过高的话,导入Unity后用内置的Mesh Simplify功能对非核心部件做减面处理,保证漫游帧率
  • 相同材质的部件可以动态合批,减少Draw Call

内容的提问来源于stack exchange,提问作者at2021code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:45:06