zoukankan      html  css  js  c++  java
  • 通过代码设置资源名字,为打包AssetBundle做准备,以及新打包系统

    核心代码就是  importer.assetBundleName = name;  但是在这之前,我们需要超找到具体的资源,我们当然是不希望一个一个手动去查找。如果我选择一个文件夹,就可以查找到里边所有的资源并且标记,那么会省去很多力气

    1.  首先选择一个物体,获得他的路径

    2. 剔除unity 自带的 .meta文件

    3. 遍历选中路径下的文件系统,如果是文件,那么标记,如果是文件夹,那么继续向下遍历,

    3. 进行标记

    这里说一下有点坑的地方,AssetImporter.GetAtPath(path);  这个IPA,里边的path不能是e:/sss/sss/xxx这种的,需要是相对路径Assets/xxx/xxx 这个坑坑的我好惨

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEditor;
    using System.IO;
    
    public class BuilderAssetsBunlds
    {
        //打包、、、、、、、、、、、、、、、、、、、、、、
        [MenuItem("Tools/打包")]
        public static void BundlerAssets()
        {
           // Debug.LogError("打包Assets");
            BuildPipeline.BuildAssetBundles(GetOutAssetsDirecotion(), BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
        }
    
        public static string GetOutAssetsDirecotion()
        {
            string assetBundleDirectory = Application.streamingAssetsPath;
            if (!Directory.Exists(assetBundleDirectory))
            {
                Directory.CreateDirectory(assetBundleDirectory);
            }
            return assetBundleDirectory;
        }
    
        //  设置资源名称/////////////////////////////
    
        [MenuItem("Tools/设置Assetbundle名字")]
        public static void SetAssetBundellabls()
        {
            CheckFileSystemInfo();
        }
    
        public static void CheckFileSystemInfo()  //检查目标目录下的文件系统
        {
            AssetDatabase.RemoveUnusedAssetBundleNames(); //移除没有用的assetbundlename
            Object obj = Selection.activeObject;    //选中的物体
            string path = AssetDatabase.GetAssetPath(obj);//选中的文件夹
            CoutineCheck(path);
        }
    
        public static void CheckFileOrDirectory(FileSystemInfo fileSystemInfo, string path) //判断是文件还是文件夹
        {
            FileInfo fileInfo = fileSystemInfo as FileInfo;
            if (fileInfo != null)
            {
                SetBundleName(path);
            }
            else
            {
                CoutineCheck(path);
            }
        }
    
        public static void CoutineCheck(string path)   //是文件,继续向下
        {
            DirectoryInfo directory = new DirectoryInfo(@path);
            FileSystemInfo[] fileSystemInfos = directory.GetFileSystemInfos();
        
            foreach (var item in fileSystemInfos)
            {
               // Debug.Log(item);
                int idx = item.ToString().LastIndexOf(@"\");
                string name = item.ToString().Substring(idx + 1);
    
                if (!name.Contains(".meta"))
                {
                    CheckFileOrDirectory(item, path + "/" + name);  //item  文件系统,加相对路径
                }
            }
        }
    
        public static void SetBundleName(string path)  //设置assetbundle名字
        {
            var importer = AssetImporter.GetAtPath(path);
            string[] strs = path.Split('.');
            string[] dictors = strs[0].Split('/');
            string name = "";
            for (int i = 1; i < dictors.Length; i++)
            {
                if (i < dictors.Length - 1)
                {
                    name += dictors[i] + "/";
                }
                else
                {
                    name += dictors[i];
                }
            }
            if (importer != null)
            {
                importer.assetBundleVariant = "bytes";
                importer.assetBundleName = name;
            }
            else
                Debug.Log("importer是空的");
        }
    
    }

     下篇连接

    http://www.cnblogs.com/lzy575566/p/7895291.html

  • 相关阅读:
    [转]好习惯养成的10个步骤
    模拟资料
    [转]暗时间
    [转]30个小改变,造就你的卓越人生
    [转]Word 2007文档中图片不显示或对象不显示的解决方法
    ubuntu 10.04 安转2.6.38内核
    [转]可以让你少奋斗10年的工作经验
    [转]Vim 复制粘帖格式错乱问题的解决办法
    C# 获取类中所有的属性
    sql 脚本
  • 原文地址:https://www.cnblogs.com/lzy575566/p/7714510.html
Copyright © 2011-2022 走看看