- Home /
How to create and load an assetBundle containing many scenes and dependancies ?
Hi, I'm basically trying to create a 'Project loader'.
The main idea is to load one asset bundle containing the whole project. So I've tried to create a simple scene containing a cube that rotates (little C# script) but, I didn't figure out how to build an asset bundle that will take AND the scene AND every ressources needed.
Here's my current asset bundle creation script :
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
public class CreateAssetBundle : EditorWindow {
public const string bundlePath = "AssetBundle.unity3D";
[MenuItem("Bundle/Create")]
static void Open()
{
var w = EditorWindow.GetWindow <CreateAssetBundle>("Create bundle");
w.MyInit();
w.Show();
}
private Dictionary<string, bool> ScenesSelection;
void MyInit()
{
Debug.Log("Init window");
this.ScenesSelection = new Dictionary<string, bool>();
foreach (var scene in EditorBuildSettings.scenes)
{
Debug.Log("Add scene : " + scene.path);
this.ScenesSelection.Add(scene.path, false);
}
}
void OnGUI()
{
if (this.ScenesSelection == null)
{
this.MyInit();
}
foreach (var scene in EditorBuildSettings.scenes)
{
if (this.ScenesSelection.ContainsKey(scene.path))
{
this.ScenesSelection[scene.path] = EditorGUILayout.Toggle(scene.path, this.ScenesSelection[scene.path]);
}
}
if (GUILayout.Button("Create bundle"))
{
List<string> selectedScenes = new List<string>();
foreach (var scene in EditorBuildSettings.scenes)
{
if (this.ScenesSelection[scene.path])
{
selectedScenes.Add(scene.path);
}
}
BuildPipeline.PushAssetDependencies();
BuildPipeline.BuildPlayer(selectedScenes.ToArray(), bundlePath, BuildTarget.WebPlayer,
BuildOptions.UncompressedAssetBundle | BuildOptions.BuildAdditionalStreamedScenes
);
BuildPipeline.PopAssetDependencies();
}
}
}
And here's my current loader :
using UnityEngine;
using System.Collections;
public class LoadBundleScene : MonoBehaviour {
public const string bundlePath = "AssetBundle.unity3D";
void Start ()
{
AssetBundle assetBundle = AssetBundle.CreateFromFile(bundlePath);
assetBundle.LoadAll();
Application.LoadLevelAdditive("MyScene");
}
}
The little rotate script :
using UnityEngine;
using System.Collections;
public class AutoRotateBehaviour : MonoBehaviour {
private Quaternion q;
public Vector3 euler;
// Use this for initialization
void Start () {
this.q = Quaternion.Euler(this.euler);
}
// Update is called once per frame
void LateUpdate () {
this.transform.rotation *= this.q;
}
}
The given error : The class defined in script file named 'AutoRotateBehaviour' does not match the file name!
The message is quite weird : it should say it didn't find the script file instead ! That's strange ^^
And the file name has exactly the same capitalization?
Yup, and the scene loads and the script file (not in bundle) works perfectly on other scenes :)