Unity模型导入的Check

发表于2018-11-12
评论0 4.4k浏览
资源管理是Unity开发者经常遇到的问题,比如在导入模型(fbx)资源时,对于一些不需要材质的纯动作模型,如果美术没有取消勾选Import Materials选项(如下图),就会增加包中的无用材质和贴图,造成空间浪费。


如果单纯靠人工每个模型检查设置,无疑既增加了成本,也为疏漏创造了条件。因此本文提供一种自动核查的方式处理模型资源导入的管理。

过程:
要实现资源导入核查需要获取Unity导入资源时的回调入口,这里需要介绍一下AssetPostprocessor 类。该类是Unity大部分资源(模型、图片、声音)导入时调用的处理类。有导入之前、导入之后等时间节点的处理函数。具体介绍可以查看api(https://docs.unity3d.com/ScriptReference/AssetPostprocessor.html)。

今天要介绍的是导入fbx模型时的核查,比如帮助美术检查导入fbx文件,如果是动作模型,就不导入材质。用到的AssetPostprocessor方法是OnPreprocessModel,该方法在导入fbx之前调用,可以用于设置各种导入参数。代码如下:
private string path = "Assets/Resources/Model";
    private void OnPreprocessModel()
    {
        ModelImporter modelim = assetImporter as ModelImporter;
        if (modelim == null)
            return;
        //model目录下带动作的fbx不要导入材质
        if (assetPath.Contains(path))
            {
            if (modelim.importAnimation && modelim.clipAnimations.Length > 0 && modelim.importMaterials)
            {
                 modelim.importMaterials = false;
            }
        }
    }

另外有的fbx模型的材质是有问题的,此时可以在导入时给美术提示,此时可以用到OnAssignMaterialModel方法,该方法在导入模型之后设置材质时候调用,可以查看导入的材质信息。代码如下:
private void OnAssignMaterialModel(Material material, Renderer renderer)
    {
        //提示材质有问题的fbx
        if (material.mainTexture == null)
        {
            ModelImporter modelim = assetImporter as ModelImporter;
            if (modelim != null && modelim.importMaterials == true)
            {
                EditorUtility.DisplayDialog("fbx材质问题", "模型:" + assetPath + "的材质mainTexture是空!请检查模型", "ok");
            }
        }
    }

如果模型材质文理是空就会提示:

导入其他资源也同理。
来自:http://www.manew.com/thread-97226-1-1.html

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引