Unity导入资源自动识别,分类存放

导入资源自动识别分类
Odin绘制分类设置

public class ToolsSettings : GlobalConfig<ToolsSettings>
{
    //动画资源自动分类处理 fbx animationClip Avatar 自动分类,所有资源自动处理型配置

    [LabelWidth(30)]
    [BoxGroup("AnimClip")]
    [HorizontalGroup("AnimClip/AnimationClip")]
    [FolderPath]
    public string Anim;

    [LabelWidth(30)]
    [BoxGroup("AnimClip")]
    [HorizontalGroup("AnimClip/AnimationClip", width: 80)]
    public string Mark;

    [LabelWidth(75)]
    [FolderPath]
    [BoxGroup("AnimationClip")]
    [LabelText("AvatarPath")]
    public string Avatarfolder;

    [LabelWidth(50)]
    [FolderPath]
    [BoxGroup("Fbx")]
    [LabelText("FBXPath")]
    public string FBXfolder;
}

以Animation的分类为例,在Odin中设置动画资源的标记为@,非@的则是fbx模型
设置Avatar 存放位置,
设置AnimClip存放位置,
设置Fbx资源存放位置,

在这里插入图片描述

Odin绘制设置完毕,开始写具体代码
根据unity的手册,可以知道,核心API是AssetPostprocessor,继承AssetPostprocessor,当unity资源导入之后,就会调用一系列方法。比如OnPreprocessModel,OnPostprocessModel,具体可以看手册给的示例
https://docs.unity3d.com/ScriptReference/AssetPostprocessor.html
动画资源分离参考代码:

using System.IO;
using UnityEditor;
using UnityEngine;

public class AnimationSpreat : AssetPostprocessor
{
    private void OnPreprocessModel()
    {
        if (assetPath.Contains(ToolsSettings.Instance.Mark))
        {
            ModelImporter modelImporter = assetImporter as ModelImporter;
            modelImporter.materialImportMode = ModelImporterMaterialImportMode.None;
            //动画禁止材质导入
            modelImporter.materialImportMode = ModelImporterMaterialImportMode.None;
            //设置为Humannoid
            modelImporter.animationType = ModelImporterAnimationType.Human;
            //创建Avata
            modelImporter.avatarSetup = ModelImporterAvatarSetup.CreateFromThisModel;
        }
    }

    private void OnPostprocessModel(GameObject g)
    {
        string name = g.name;
        Debug.Log("动画资源分离" + assetPath + "   ");
        EditorApplication.delayCall += () =>
        {
            if (assetPath.Contains(ToolsSettings.Instance.Mark))
            {
                //copy 动画
                var assets = AssetDatabase.LoadAllAssetRepresentationsAtPath(assetPath);

                //copy Avata
                foreach (var obj in assets)
                {
                    Debug.Log("FBX中的资源" + obj.name);

                    if (obj is AnimationClip)
                    {
                        var newClip = UnityEngine.Object.Instantiate(obj);
                        AssetDatabase.CreateAsset(newClip, ToolsSettings.Instance.Anim + "/" + name + ".anim");
                        AssetDatabase.SaveAssets();
                        AssetDatabase.Refresh();
                    }

                    if (obj is Avatar)
                    {
                        var newAvatar = UnityEngine.Object.Instantiate(obj);
                        AssetDatabase.CreateAsset(newAvatar, ToolsSettings.Instance.Avatarfolder + "/" + name + ".asset");
                        AssetDatabase.SaveAssets();
                        AssetDatabase.Refresh();
                    }
                }

                //move fbx
                if (assetPath != ToolsSettings.Instance.FBXfolder)
                {
                    Debug.Log("移动资源" + assetPath);
                    string path = Path.GetFileName(assetPath);
                    AssetDatabase.MoveAsset(assetPath, ToolsSettings.Instance.FBXfolder + "/" + path);
                }
            }
            else
            {
                Debug.Log("导入模型,创建控制器" + assetPath);
            }
        };
    }
}

在这里插入图片描述

其实动画资源 只需要拷贝出Clip即可,剩下的都可以删除,FBX与avata 只要模型

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值