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;
        }
    }
}  
时间: 2024-10-28 19:59:17

Unity5自动命名Assetbundle并打包的相关文章

Unity5新的AssetBundle系统使用心得

Unity的AssetBundle系统是对资源管理的一个扩展,动态更新,网页游戏,资源下载都是基于AssetBundle系统的.但是不得不说,这个系统非常恶心,坑很深.至于有多深,请看这篇文章: http://www.cnblogs.com/ybgame/p/3973177.html 原先的AssetBundle系统需要自己写一大坨导出的代码(BuildPipeline),这个新手会无从下手,老手也经常会被坑到.想正确处理好资源的依赖关系从而保证资源完整而又不会产生重复资源,确实不是一件非常容易

Unity5.x版本AssetBundle加载研究

之前说了 “Unity5.x版本AssetBundle打包研究”,没看过的请先看一下:http://www.shihuanjue.com/?p=57再来看本文,有一定的连接性. 先梳理一下思路:要加载一个资源A,必须先去加载它的所有依赖资源要知道这个资源A依赖了哪些资源,必须先去加载AssetBundleManifest通过AssetBundleManifest对象的GetAllDependencies(A)方法,获取它依赖的所有资源.依赖资源都加载了,就可以去真正加载资源A了. 注意点:1.资

iOS自动命名启动页工具

前段时间做了个app模板,需要大量打包app.其中就涉到启动页命名.设计师给的是中文命名.哎,如果让设计同学一张一张给,可能也会有些麻烦.无奈,自己写了利用 AppleScript写了个工具,在这里分享出来. 主要思路就是判断图片的高,根据不同高度命不同的名字. iPhone4:640*960 iPhone5:640*1136 iPhone6:750*1334 iPhone6P:1242*2208 set iPhone4_name to "[email protected]" as s

AssetBundle资源打包与加载

AssetBundle资源打包  1.AssetLabels资源标签 文件名:资源打包成AssetBundle后的文件名,类似于压缩包的名字 后缀:自定义 文件名和后缀名都是小写格式(大写会自动转为小写)2. BuildPipeline.BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform) 打包所有设置了AssetLabel的资源 o

使用 maven 自动将源码打包并发布

1.maven-source-plugin 访问地址 在 pom.xml 中添加 下面的 内容,可以 使用 maven 生成 jar 的同时 生成 sources 包 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.0</version> <!-

Unity5.x版本AssetBundle打包研究

Unity5的AssetBundle打包机制和以前版本不太一样.简单的说就是,只要给你要打包的资源设置一个AssetBundleName ,Unity自身会对这些设置了名字的资源进行打包,如果一个资源依赖了另一个资源.Unity自己会处理依赖关系,AssetBundleManifest文件就保存着这些资源的依赖关系.比如一个UI面板.Prefab,依赖了一个图集Atlas,一个字体文件做个测试:只给UI面板3.prefab设置AssetBundleName.打出包来看,别看只有371KB,那是因

Unity5版本的AssetBundle打包方案之打包Scene场景

using UnityEngine; using System.Collections; using UnityEditor; /// <summary> /// 脚本位置:Editor文件夹下 /// 脚本功能:打包 /// </summary> public class CreateAssetBundle:Editor { // 打包unity场景文件 [MenuItem("Assets/Build AssetBundle Scene")] static v

基于Unity5.0系统的新打包方式 [第一讲]

前言 在使用新的Unity3d 5.0后,我们发现在Inspector面板上多了一个东西 这里主要有两个可以设置的选项AssetBundle和Variant 进过测试,发现5.01版本在AssetBundle方面存在bug,幸好在5.02版本进行了修复,所以在5.02以后的版本才可以放心使用,不然会出现贴图丢失等问题 AssetBundle  在这里指的是我们打包后会生成的包名,可以有后缀,比如ui.assetbundle,ui.uity3d等等,但是我们要注意的是,使用的时候名称要对应起来.

Unity5 Assetbundle简单使用 及 打包Material文件超大的问题

因为项目中要用到ULUA,而ULUA的Demo 中用到的是 Unity5的Assetbundle 打包方式,所以还是学习下 5.0 版本的Assetbundle 打包方式. 简单的来说,Unity5中新添加的 AB 打包,和我们平时使用的方式一样,原理就是 为每个文件创建一个依赖文件,然后汇总到一个总的依赖文件中,在游戏最开始运行的时候需要加载这个 总的依赖文件,然后加载 Assetbundle的时候,从中获取到依赖关系来加载依赖. Unity5的打包Assetbundle API使用起来很方便