将游戏场景导出 为.unity3d,然后使用 WWW加载进来,跳转到该场景
一、选择场景文件
点击 “BuildWlayerStreamed”弹出如下窗口,选择需要保存的路径,点击保存即可生成相应的文件
运行程序调用 WWW加载进场景文件
做法如下
在Editor文件夹下创建脚本TestWWW
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
//打包场景
//BuildPipeline.BuildStreamedSceneAssetBundle(levels, path,
// target, BuildOptions.UncompressedAssetBundle));
//打包资源
// BuildPipeline.BuildAssetBundle(null, assets, path,
// BuildAssetBundleOptions.UncompressedAssetBundle |
// BuildAssetBundleOptions.CollectDependencies, target);
public class TestWWW
{
//将场景打包
[MenuItem("Assets/BuildWlayerStreamed")]
static void BuildScenes()
{
string[] levels = new string[1];
levels[0] = "Assets/scene.unity";
Caching.CleanCache(); //清空一下缓存
//弹出窗口选择保存路径
string path = EditorUtility.SaveFilePanel("Save Resource", "", "", "unity3d");
Debug.Log(path);
//打包场景
// 参数1 为 需要导出的场景路径数组, 参数2导出路径, 参数3导出的平台,
//(每个平台必须对应,不然平台不认, 会出现丢失贴图等等问题),参数4为类型选项
BuildPipeline.BuildStreamedSceneAssetBundle(levels, path,
BuildTarget.StandaloneWindows,
BuildOptions.BuildAdditionalStreamedScenes);
}
}
创建 Loadd脚本,将脚本拖拽到场景中的对象
using UnityEngine;
using System.Collections;
using System;
using System.IO;
public class Loadd : MonoBehaviour
{
private AssetBundle assetBundle;
private AssetBundleCreateRequest request;
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
StartCoroutine( LoadScene());
}
}
/*
使用的方法是WWW.LoadFromCacheOrDownload(path,5);
参数1:服务器或者本地下载地址
参数2:版本号
Unity会下载Assetbundle本地中,它的工作原理是先通过(版本号和下载地址)
* 先在本地去找看有没有这个Assetbundle,如果有直接返回对象,
* 如果没有的话,在根据这个下载地址重新从服务器或者本地下载。
* 这里版本号起到了很重要的作用,举个例子,同一下载地址版本号
* 为1的时候已经下载到本地,此时将版本号的参数改成2 那么它又
* 会重新下载,如果还保持版本号为1那么它会从本地读取,因为本
* 地已经有版本号为1的这个Assetbundle了。你不用担心你的资源本
* 地下载过多,也不用自己手动删除他们,这一切Unity会帮我
* 们自动完成,它会自动删除掉下载后最不常用的Assetbundle ,如果
* 下次需要使用的话只要提供下载地址和版本后它会重新下载。
* */
IEnumerator LoadScene()
{
WWW www = WWW.LoadFromCacheOrDownload
("file:///C:/Users/Administrator/Desktop/AssetBundl/ddd.unity3d", 1);
yield return www;
if (www.error != null)
{
throw new Exception(www.error);
}
if (www.isDone)
{
AssetBundle assetBundle = www.assetBundle;
Application.LoadLevel("scene"); // 加载场景
}
}
}