zoukankan      html  css  js  c++  java
  • Unity5自动命名Assetbundle并打包

    using UnityEngine;  
    using System.Collections;  
    using UnityEditor;  
    using System.IO;  
       
    /// <summary>  
    /// 把Resource下的资源打包成.unity3d 到StreamingAssets目录下  
    /// </summary>  
    public class Builder : Editor  
    {  
        public static string sourcePath = Application.dataPath + "/Resources";  
        const string AssetBundlesOutputPath = "Assets/StreamingAssets";  
       
        [MenuItem("Tools/AssetBundle/Build")]  
        public static void BuildAssetBundle()  
        {  
            ClearAssetBundlesName ();  
       
            Pack (sourcePath);  
       
            string outputPath = Path.Combine (AssetBundlesOutputPath,Platform.GetPlatformFolder(EditorUserBuildSettings.activeBuildTarget));  
            if (!Directory.Exists (outputPath))  
            {  
                Directory.CreateDirectory(outputPath);  
            }  
       
            //根据BuildSetting里面所激活的平台进行打包  
            BuildPipeline.BuildAssetBundles (outputPath,0,EditorUserBuildSettings.activeBuildTarget);  
       
            AssetDatabase.Refresh ();  
       
            Debug.Log ("打包完成");  
       
        }  
       
        /// <summary>  
        /// 清除之前设置过的AssetBundleName,避免产生不必要的资源也打包  
        /// 之前说过,只要设置了AssetBundleName的,都会进行打包,不论在什么目录下  
        /// </summary>  
        static void ClearAssetBundlesName()  
        {  
            int length = AssetDatabase.GetAllAssetBundleNames ().Length;  
            Debug.Log (length);  
            string[] oldAssetBundleNames = new string[length];  
            for (int i = 0; i < length; i++)   
            {  
                oldAssetBundleNames[i] = AssetDatabase.GetAllAssetBundleNames()[i];  
            }  
       
            for (int j = 0; j < oldAssetBundleNames.Length; j++)   
            {  
                AssetDatabase.RemoveAssetBundleName(oldAssetBundleNames[j],true);  
            }  
            length = AssetDatabase.GetAllAssetBundleNames ().Length;  
            Debug.Log (length);  
        }  
       
        static void Pack(string source)  
        {  
            DirectoryInfo folder = new DirectoryInfo (source);  
            FileSystemInfo[] files = folder.GetFileSystemInfos ();  
            int length = files.Length;  
            for (int i = 0; i < length; i++) {  
                if(files[i] is DirectoryInfo)  
                {  
                    Pack(files[i].FullName);  
                }  
                else  
                {  
                    if(!files[i].Name.EndsWith(".meta"))  
                    {  
                        file (files[i].FullName);  
                    }  
                }  
            }  
        }  
       
        static void file(string source)  
        {  
            string _source = Replace (source);  
            string _assetPath = "Assets" + _source.Substring (Application.dataPath.Length);  
            string _assetPath2 = _source.Substring (Application.dataPath.Length + 1);  
            //Debug.Log (_assetPath);  
       
            //在代码中给资源设置AssetBundleName  
            AssetImporter assetImporter = AssetImporter.GetAtPath (_assetPath);  
            string assetName = _assetPath2.Substring (_assetPath2.IndexOf("/") + 1);  
            assetName = assetName.Replace(Path.GetExtension(assetName),".unity3d");  
            //Debug.Log (assetName);  
            assetImporter.assetBundleName = assetName;  
        }  
       
        static string Replace(string s)  
        {  
            return s.Replace("\","/");  
        }  
    }  
       
    public class Platform   
    {  
        public static string GetPlatformFolder(BuildTarget target)  
        {  
            switch (target)  
            {  
            case BuildTarget.Android:  
                return "Android";  
            case BuildTarget.iOS:  
                return "IOS";  
            case BuildTarget.WebPlayer:  
                return "WebPlayer";  
            case BuildTarget.StandaloneWindows:  
            case BuildTarget.StandaloneWindows64:  
                return "Windows";  
            case BuildTarget.StandaloneOSXIntel:  
            case BuildTarget.StandaloneOSXIntel64:  
            case BuildTarget.StandaloneOSXUniversal:  
                return "OSX";  
            default:  
                return null;  
            }  
        }  
    }  
  • 相关阅读:
    测试用例原理以及设计方法
    软件测试方法大汇总(转)
    黑盒测试用例大集
    博客第一篇章
    什么是Shell脚本
    部署 Django
    Django 国际化和本地化
    Django与CSRF 、AJAX
    认证系统 Authentication
    Django与缓存
  • 原文地址:https://www.cnblogs.com/VindyLeong/p/6511412.html
Copyright © 2011-2022 走看看