---
title: "本地删除FBX的DefaultMaterial在unity重启后无效"
author: "石心.Yong"
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/uwa-answer-fbx-default-material-persists-after-restart/
type: note
content_role: source
source_type: "source"
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/05-游戏图形与运行时/我的UWA问答/2021-05-11 - 本地删除FBX的DefaultMaterial在unity重启后无效.md"
content_hash: db70d6e950fb298513a45151f2ccab28cfe2a7bce705519a75c85bcb636aea81
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# 本地删除FBX的DefaultMaterial在unity重启后无效

> **note · 我的 UWA 问答**
> 本文收录我在 UWA 问答发表的公开回答。问题内容归原提问者；回答保留当时语境，技术结论可能受 Unity 版本、平台和项目条件限制。

## 问题

用了addressables系统，打包ab有default material有冗余

在打包机上运行脚本把fbx的默认材质删除后变紫，但是重新打开工程后默认材质又回来了，导致冗余还在

版本2018.4.34

删除材质的脚本：

```
using System;

using UnityEngine;

using System.Collections;

using System.IO;

using UnityEditor;

using Object = UnityEngine.Object;

class DisableMaterialImport : AssetPostprocessor {

    [MenuItem("Tools/Reimport All Model")]

    public static void ReimportAllModel()

    {

        var assetPaths = AssetDatabase.GetAllAssetPaths();

        Array.Sort(assetPaths);

        Debug.LogWarning(string.Format("Total assets count: {0}", assetPaths.Length));

        int processedCount = 0;

        foreach (string assetPath in assetPaths)

        {

            string normalizedAssetPath = assetPath.ToLower();

            if (!normalizedAssetPath.EndsWith(".fbx") &&

                !normalizedAssetPath.EndsWith(".obj") &&

                !normalizedAssetPath.EndsWith(".3ds"))

            {

                continue;

            }

            var modelImporter = AssetImporter.GetAtPath(assetPath) as ModelImporter;

            if (modelImporter == null || modelImporter.importMaterials)

            {

                continue;

            }

            AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ImportRecursive | ImportAssetOptions.ForceUpdate);

            Debug.Log(assetPath, AssetDatabase.LoadMainAssetAtPath(assetPath));

            processedCount++;

        }

        Debug.LogWarning(string.Format("Total processed model count: {0}", processedCount));

        AssetDatabase.SaveAssets();

    }

    private static void FixedModelImport(ModelImporter modelImporter, GameObject model)

    {

        //Debug.Log("FixedModelImport "+model);

        var renderers = model.GetComponentsInChildren<Renderer>(true);

        if (renderers == null)

        {

            return;

        }

        modelImporter.importMaterials = false;

        modelImporter.importBlendShapes = false;

        modelImporter.importAnimation = false;

        modelImporter.isReadable = false;

        modelImporter.optimizeMesh = true;

        foreach (var renderer in renderers)

        {

            if (renderer == null)

            {

                continue;

            }

            renderer.sharedMaterials = new Material[renderer.sharedMaterials.Length];

        }

/*        var animator = model.GetComponent<Animator>();

        if(animator!=null) Object.DestroyImmediate(animator);*/

    }

    private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets,

        string[] movedFromAssetPaths)

    {

        foreach (var path in importedAssets)

        {

            //Debug.Log("OnPostprocessAllAssets "+path+" "+path.EndsWith(".FBX"));

            if (path.EndsWith(".FBX")) //大写的FBX不会进OnPostprocessModel函数

            {

                GameObject model = AssetDatabase.LoadAssetAtPath<GameObject>(path);

                ModelImporter import = AssetImporter.GetAtPath(path) as ModelImporter;

                FixedModelImport(import, model);

            }

        }

    }

    void OnPostprocessModel(GameObject model)

    {

        var modelImporter = assetImporter as ModelImporter;

        if (modelImporter == null)

        {

            return;

        }

        FixedModelImport(modelImporter, model);

    }

}
```

- 提问者：唐
- 提问时间：2021-05-11 02:08:56

## 我的回答

我这边试验过，不会变回来啊，会不会是把工程回滚了。另外这个脚本的ReimportAllModel只对本身就没有勾选Import Materials的模型有效。

- 回答时间：2021-05-11 05:49:23
- 最后更新：2021-05-11 05:50:10
- 采纳状态：未采纳

## 来源与关系

- 上位集合：[我的 UWA 问答](https://www.pystone.net/notes/my-uwa-answers/)
- UWA 标签：内存管理
- 原始问题：[本地删除FBX的DefaultMaterial在unity重启后无效](https://answer.uwa4d.com/question/609906386bb31032f97915ae)
- 源页最后更新：2021-05-11 17:17:21
