我正在尝试使用场景创建资产包。这就是我在unity4中所做的。
[MenuItem("Bundle/Create ios Scene SceneLoader")]
static void iosBuild(){
string[] levels = new string []{"Assets/Scenes/01 SceneLoader.unity", "Assets/Scenes/02 Level1.unity","Assets/Scenes/02 Level2.unity" ,"Assets/Scenes/02 Level3.unity"};
BuildPipeline.BuildStreamedSceneAssetBundle( levels, "Assets/Bundles/bundle-ios.unity3d", BuildTarget.iOS);
}
之后我通过以下代码加载我的包:
using(WWW www = WWW.LoadFromCacheOrDownload (url, 0)){
while(!www.isDone){
status.text = "loading \n" + (www.progress * 100).ToString() + "%";
yield return null;
}
yield return www;
//check if server response is an error
if (www.error != null){
throw new Exception("WWW download had an error: " + url + " " + www.error);
}
//Load the asset bundle
AssetBundle bundle = www.assetBundle;
//obsolete bundle.LoadAll();
bundle.LoadAllAssets();
Application.LoadLevel ("01 SceneLoader");
}
此代码在unity4中有效,但现在,当我加载Scene时,所有脚本引用都丢失了。对象在场景中但没有脚本。另外,unity告诉我BuildStreamedSceneAssetBundle已经过时了。所以我的问题是,为什么我的脚本引用不在核心场景中?因此,当我加载资产包时,所有脚本都不会丢失。我在加载的场景中使用的NGUI Atlas也不见了。
如果有人有想法会很高兴!
编辑:"级别中的第一个字符串"将有所有脚本引用。怎么可能?
答案 0 :(得分:0)
我认为这个问题是统一错误。 我的项目有同样的问题。
我找到了解决办法,但这非常不方便 如果必须使用场景资产包, 每个场景制作一个资产包。
string[] level1 = new string []{"Assets/Scenes/01 SceneLoader.unity"};
string[] level2 = new string []{"Assets/Scenes/02 Level1.unity"};
.....
BuildPipeline.BuildStreamedSceneAssetBundle( level1, "Assets/Bundles/bundle-ios1.unity3d", BuildTarget.iOS);
BuildPipeline.BuildStreamedSceneAssetBundle( level2, "Assets/Bundles/bundle-ios2.unity3d", BuildTarget.iOS);
.....
我用了#34; BuildPipeline.BuildAssetBundles" Unity5的功能。
但我认为" BuildPipeline.BuildStreamedSceneAssetBundle"和#34; BuildPipeline.BuildAssetBundles"很相似。