Unity5.5 AssetBundle用法-面向Android平台(2)

讨论完了一个AssetBundle的简单用法,下面我们介绍稍微复杂一点的用法,仍然是基于android平台。对于一个游戏的资源来讲,我们会考虑下载一次之后就不用再次下载了,只要从本地加载就可以了。要达到这个目的,我们可以将操作分为两个步骤,第一个步骤是将文件下载到本地,第二个步骤是将文件从本地加载为AssetBundle类型的资源。下面我们仍然以一个简单的例子来进行说明。

1、承接上一篇文章的步骤,我们在本章仍然以胶

囊体的AssetBundle作为例子,首先创建一个AssetBundle放到服务器上。具体请参照上一篇文章的步骤1-6。

2、编写下载脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.Networking;
using UnityEngine.UI;

public class Downdload : MonoBehaviour
{
	public AudioSource audioSource;
	string urlPath;//资源网络路径
	string file_SaveUrl;//资源保路径
	FileInfo file;
	public static Downdload instance;
	private bool p = true;
	private bool down;
	private float t;
	private float time;
	private string s="load";//下载按钮显示内容
	private void Awake()
	{
		instance = this;
	}
	private void Start()
	{
		time = 3;
		t = 0;
	}
	void OnGUI(){
		if(GUILayout.Button(s,GUILayout.Width(800),GUILayout.Height(300))){//下载测试按钮
			Downdload.instance.play ();
		}
		if (GUILayout.Button (MyBehaviour.show,GUILayout.Width(800),GUILayout.Height(300))) {//加载测试按钮
			MyBehaviour.instance.AssetLoadFromFile2();
		}
	}
	public void play()
	{
		urlPath = "http://app.snaildada.com/testweb/AssetBundles/cab";
		file_SaveUrl=Application.persistentDataPath+"\\cab.unity3d";//保存的本地路径    记得加上文件后缀名
		s = file_SaveUrl;		
		file = new FileInfo(file_SaveUrl);
		DirectoryInfo mydir = new DirectoryInfo(file_SaveUrl);
		if (File.Exists(file_SaveUrl))//判断一下本地是否有了该文件  如果有就不需下载
		{
			s = "local have :"+file_SaveUrl;
		}
		else
		{
			StartCoroutine(DownFile(urlPath));
		}
	}
	IEnumerator DownFile(string url)
	{
		WWW www = new WWW(url);
		down = false;
		yield return www;
		down = true;
		if (www.isDone)
		{
			byte[] bytes = www.bytes;
			CreatFile(bytes);
			s="download ok:"+file_SaveUrl;
		}
	}
	void CreatFile(byte[] bytes)
	{
		Stream stream;
		stream = file.Create();
		stream.Write(bytes, 0, bytes.Length);
		stream.Close();
		stream.Dispose();
	}
}

3、编写加载脚本

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.IO;

public class MyBehaviour : MonoBehaviour
{
	public static MyBehaviour instance;
	public static string show="create";
	void Start()
	{
		instance = this;
	}
	
	public void AssetLoadFromFile2() {//从byte流读取
		string path=Application.persistentDataPath+"\\cab.unity3d";
		FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); 
		fileStream.Seek(0, SeekOrigin.Begin); 
		byte[] bytes = new byte[fileStream.Length]; 
		fileStream.Read(bytes, 0, (int)fileStream.Length); 
		fileStream.Close(); 
		fileStream.Dispose(); 
		fileStream = null; 
		show = "" + bytes.Length;
		AssetBundle ab = AssetBundle.LoadFromMemory (bytes);
		GameObject cubeWall = ab.LoadAsset<GameObject>("Capsule");//获取prefab
		show="bytes ok:"+path;
		Instantiate(cubeWall, Vector3.zero, Quaternion.identity);//实例化prefab
	}
}

4、将上面两个脚本挂到场景中的对象上,执行程序:

5、点击第一个按钮,加载资源,加载完成后会有“download ok”提示如下,(如果再次下载,则会出现以“local have”开头的提示):

6、点击第二个按钮,加载资源并在场景中生成一个对象:

在android手机上实测可用,ok

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值