6.5AssetBundle

2017-06-05  本文已影响79人  胤醚貔貅

usingUnityEngine;

usingSystem.Collections;

usingSystem.Collections.Generic;

usingSystem;

usingUnityEngine.SceneManagement;

public class  PlaneController:MonoBehaviour{

string  filePath;

void Start( ){

filePath="Texture/timg";

//Resources资源异步加载

StartCoroutine(LoadTexture(delegate(Texture  obj){

GetComponent<Renderer>( ).material.mainTexture=obj;

Resources.UnloadUnusedAssets( );

}));

}

IEnumerator LoadTexture(Action <delegate>callBack){//匿名委托

ResourceRequest  req=Resources.LoadAsync<Texture>(filePath);

yield  return  req;

callBack(req.asset  asTexture);

}

IEnumerator LoadScence(){

AsyncOperation op=SceneManager.LoadSceneAsync(0);

while(op.isDone){

//Slider.value=op.progress;//进度条

yield  return  0;

}

//删除加载界面

}

voidUpdate( ){

}

}

using UnityEngine;

using System.Collections;

using UnityEditor;

using System.IO;

public  class  AssetBundleScript:MonoBehaviour{

//打包

//创建一个同级目录

[MenuItem("AssetBundle/BuildAssetBoundle")]

static void  BuildAssetBundle( ){

string  path="Assets/AssetBundles";

if(!Directory.Exists(path)){

Directory.CreateDirectory(path);

}

BuildPipeline.BuildAssetBundles(path,BuildAssetBundleOptions.None,BuildTarget.StandaloneOSXIntel64);

}

[MenuItem("AssetBundle/GetAssetBundleName")]

static void GetABName(){

string[ ]names=AssetDatabase.GetAllAssetBundleNames( );

foreach(string name in names){

Debug.Log(name);

}

}

}

usingUnityEngine;

usingSystem.Collections;

usingSystem.IO;

usingUnityEngine.Networking;

usingSystem.Collections.Generic;

publicclassLoadAssetsBundle:MonoBehaviour{

void Start( ){

//从本地取

//AssetBundle   ab=AssetBundle.LoadFromFile(Application.dataPath+"/AssetBundles/cube/cube");

//if(ab!=null){

//GameObject  prefab=ab.LoadAsset("cube");

//Instantiate(prefab,Vector3.zero,Quaternion.identity);

StartCoroutine("CreatObject");

}

//本地加载,只能加载物体本身,网络加载将file换成http

IEnumeratorCreatObject(){

//#ifUNITY_ANDROID

//"jar:file://"+Application.dataPath+"!/assets/AssetBundles/material/red";

//#elifUNITY_IOS

//Application.dataPath+"/Raw/AssetBundles/material/red";

//#elifUNITY_WIN||UNITY_EDITOR

//"file://"+Application.dataPath+"/AssetBundle/material/red";

//#endif

//加载材质

string url_material="file://"+Application.dataPath+"/AssetBundles/material/red";

UnityWebRequest  req_material=UnityWebRequest.GetAssetBundle(url_material);

yield return  req_material.Send( );

AssetBundle  ab_material=DownloadHandlerAssetBundle.GetContent(req_material);

Material  material=ab_material.LoadAsset("red");

Instantiate(material,Vector3.zero,Quaternion.identity);

//加载cube对象

stringurl="file://"+Application.dataPath+"/AssetBundles/cube/cube";

UnityWebRequest req=UnityWebRequest.GetAssetBundle(url);

yield return req.Send( );

AssetBundle  ab=DownloadHandlerAssetBundle.GetContent(req);

GameObjectprefab=ab.LoadAsset("cube");

GameObjectcube=Instantiate(prefab,Vector3.zero,Quaternion.identity)as GameObject;

cube.GetComponent<Renderer>.material=material;

}

void Update( ){

}

}

usingUnityEngine;

usingSystem.Collections;

public  class  LoadAB:MonoBehaviour{

void Start( ){

StartCoroutine(Load("cube/cube"));

}

IEnumerator  Load(string  name){//name当前要加载的资源的名字

//资源放置时的文件夹或者是网址

string   assetPath="file://"+Application.dataPath+"/AssetBundles/";

//总的Manifest的文件名

string  manifestName="AssetBundles";

//加载总清单(AssetBundles.manifest)

WWW  wwwManifest=WWW.LoadFromCacheOrDownload(assetPath+manifestName,0);

yield return wwwManifest;

if(string.IsNullOrEmpty(wwwManifest.error)){

AssetBundle  manifestAB=wwwManifest.assetBundle;

AssetBundleManifest  manifest=manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");

//得到目标资源的依赖关系的列表

string[ ]dps=manifest.GetAllDependencies(name);

//保存所有的依赖资源

AssetBundle[ ]abs=new AssetBundle[dps.Length];

for(inti=0;i<dps.Length;i++){

string path=assetPath+dps[i];

WWW www=WWW.LoadFromCacheOrDownload(path,0);

yield return www;

abs[i]=www.assetBundle;

}

//加载目标资源

WWW cubeWWW=WWW.LoadFromCacheOrDownload(assetPath+name,0);

yield return cubeWWW;

if(string.IsNullOrEmpty(cubeWWW.error)){

//得到资源列表

AssetBundle  cubeAB=cubeWWW.assetBundle;

//获得资源

string[ ]strs=name.Split(new char[]{'/'});

GameObject  CubePrefab=cubeAB.LoadAsset(strs[strs.Length-1]);

Instantiate(CubePrefab,Vector3.zero,Quaternion.identity);

//cubeWWW.Dispose();

}

}

}

voidUpdate(){

}

}

上一篇下一篇

猜你喜欢

热点阅读