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

Unity中如何通过脚本获取FBX文件导入的材质名称

导入设置截图

回调不生效的核心原因

你写的OnPreprocessMaterialDescription没有触发,通常是三个配置错误导致的:

  • 脚本存放位置错误:所有继承AssetPostprocessor的编辑器脚本,必须放在项目中命名为Editor的专用文件夹下,放在普通运行时脚本目录的话,资源导入流程不会扫描加载该脚本,对应回调自然不会执行。
  • 方法签名不匹配:Unity的资源导入回调是通过非公开反射机制匹配的,OnPreprocessMaterialDescription方法需要写成private,写成public会导致反射匹配失败,回调无法被正常调用。
  • 配置生效时机不对:在OnPreprocessModel执行阶段修改materialImportMode参数,不会应用到本次导入流程,需要提前在FBX的导入设置面板里,把材质导入模式手动切换为通过材质描述导入,点击应用后再重新触发导入,材质描述相关回调才会执行。

稳定获取原始材质名的替代方案

如果调整上述配置后还是无法拿到名称,可以直接用OnPostprocessModel回调在导入完成阶段读取,这个回调触发逻辑更稳定,不需要依赖特殊的材质导入模式,示例代码如下:

using UnityEditor;
using UnityEngine;

public class FbxOriginalMaterialReader : AssetPostprocessor
{
    private void OnPostprocessModel(GameObject importedRoot)
    {
        // 遍历导入模型下所有渲染器组件
        Renderer[] allRenderers = importedRoot.GetComponentsInChildren<Renderer>(true);
        foreach (Renderer renderer in allRenderers)
        {
            foreach (Material sharedMat in renderer.sharedMaterials)
            {
                // 该阶段读取的sharedMat.name就是3dsmax导出时写入FBX的原始材质名
                Debug.Log($"FBX携带的原始材质名:{sharedMat.name}");
            }
        }
    }
}

注意:这个脚本同样需要放在Editor文件夹下才能正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:03:20