如何拆分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
相关产品推荐
相关产品推荐

