zoukankan      html  css  js  c++  java
  • [Unity AssetBundle]Asset资源处理

    什么是AssetBundle

    在很多类型游戏的制作过程中,开发者都会考虑一个非常重要的问题,即如何在游戏运行过程中对资源进行动态的下载和加载。因此,Unity引擎引入了AssetBundle这一技术来满足开发者的需求。

    AssetBundle是Unity引擎提供的一种用户存储再远的文件格式,它可以存储任意一种Unity引擎能够识别的资源,例如模型、纹理、音频、动画甚至整个场景。

    同时,AssetBundle也可以包含开发者自定义的二进制文件,只需要将二进制文件的扩展名改成.bytes,Unity引擎就可以识别它为TextAsset,从而就可以打包到AssetBundle文件里边。

    如何创建AssetBundle

    //通过该接口,开发这可以将编辑器中任意类型的Asset打包成AssetBundle文件.
    BuildPipeline.BuildAssetBundle(null,null,null,null,null);
    BuildAssetBundle的参数
     参数 解释说明
    mainAsset 用于指定该AssetBundle文件中的主要资源,该资源可以通过AssetBundle.mainAsset来直接进行读取
    assets   用于指定该AssetBundle文件中包含的资源
    pathName 用于指定该AssetBundle文件的创建地址
    assetBundleOptions 用于指定该AssetBundle文件的创建选项,默认情况下为Collect Dependencies和CompleteAssets
    targetPlatform 用于指定改AssetBundle文件所用于发布的平台
    //通过该接口,开发者可以直接将项目中的一个或者若干个场景以流式加载的方式打包成AssetBundle文件。
    BuildPipeline.BuildStreamSceneAssetBundle(null,null,null);
    
    BuildStreamedSceneAssetBundle
    参数 解释说明
    levels 用于指定要被打包进入AssetBundle文件的场景名称
    locationPath 用于指定该AssetBundle文件的创建地址
    target 用于指定该AssetBundle文件所用于的发布平台
    //该接口功能与BuildPipeline.BuildAssetBundle接口相同,但是创建时可以每个Object指定一个自定义的名字
    BuildPipeline.BuildAssetBundleExplicitAssetNames(null,null,null,null,null);
    

      

    如何下载AssetBundle

    非缓存机制

    void Start () {
        StartCoroutine ("LoadAsset");
    }
    public IEnumerator LoadAsset()
    {
        WWW www = new WWW (url);
        yield return www;
    }
    

    缓存机制

    void Start () {
        StartCoroutine ("LoadAsset");
    }
    public IEnumerator LoadAsset()
    {
        WWW www = WWW.LoadFromCacheOrDownload (url, 5);
        yield return www;
    }
    

    如何加载AssetBundle

    WWW.assetbundle属性

    	void Start () {
    		StartCoroutine ("LoadAsset");
    	}
    	public IEnumerator LoadAsset()
    	{
    		WWW www = WWW.LoadFromCacheOrDownload (url, 5);
    		yield return www;
    		
    		
    		if (www.error != null) {
    			Debug.Log (www.error);
    			return;
    		}
    		AssetBundle bundle = www.assetBundle;
    	}
    

      AssetBundle.CreateFromFile方法

    	void Start () {
    		AssetBundle bundle = AssetBundle.CreateFromFile (path);
    	}
    

      AssetBundle.CreateFromMemory

    	void Start () {
    		StartCoroutine ("LoadAsset");
    	}
    	public IEnumerator LoadAsset()
    	{
    		WWW www = WWW.LoadFromCacheOrDownload (url, 5);
    		yield return www;
    		
    		
    		if (www.error != null) {
    			Debug.Log (www.error);
    			return;
    		}
    		
    		byte[] data = www.bytes;
    		AssetBundle bundle = AssetBundle.CreateFromMemory(data);
    	}

    待续...

  • 相关阅读:
    iOS:CALayer锚点的使用
    iOS:UIView的CALayer基本演练
    iOS:iOS中的几种动画
    iOS:CALayer核心动画层
    Objective-C:KVO机制
    Objective-C:KVC机制
    投资方式集汇
    曝光卖假币的店铺和旺旺ID
    android 的开源输入法介绍,及 自动触摸的实现方法
    Intra Refresh of H264 encoder
  • 原文地址:https://www.cnblogs.com/daxiaxiaohao/p/4143264.html
Copyright © 2011-2022 走看看