I am creating an asset bundle which contains a variety of materials, textures, gameobjects, meshfilters and meshrenderers. I am doing so using an editor script which is run from a command line. When I loop over and check the materials on the main asset before creating the bundle everything looks fine.
logFile.WriteLine("@@@@ BEGIN MAIN SCENE CHECK @@@@");
GameObject mainGO = sceneDummy.m_obj as GameObject;
MeshRenderer[] meshRenderArray = mainGO.GetComponentsInChildren<MeshRenderer>(true);
foreach (MeshRenderer mr in meshRenderArray)
{
logFile.WriteLine("Found MeshRenderer " + mr.name);
foreach (Material m in mr.materials)
{
if (m.shader == null)
{
logFile.WriteLine("Error diffuse shader missing from mat " + m.name);
}
else if (m.GetTexture("_MainTex") == null)
{
logFile.WriteLine("Error diffuse material missing from mat " + m.name);
}
else
{
logFile.WriteLine("Found material " + m.name);
}
}
}
logFile.WriteLine("@@@@ END MAIN SCENE CHECK @@@@");
UnityEngine.Object[] allAssets = (UnityEngine.Object[])assetList.ToArray(typeof(UnityEngine.Object));
BuildPipeline.BuildAssetBundle(sceneDummy.m_obj, allAssets, bundleTarget, BuildAssetBundleOptions.CompleteAssets | BuildAssetBundleOptions.CollectDependencies);
The log for this seems to indicate everything is fine. However when I load the main asset back in in my unity application using the following code.
void CreateModel(AssetBundle bundle)
{
bundle.LoadAll();
GameObject model = (GameObject)Instantiate(bundle.mainAsset);
GameObject mainAssetGO = bundle.mainAsset as GameObject;
m_models.Add(model);
Debug.Log("CreatingModel");
MeshRenderer[] meshRenderArray = mainAssetGO.GetComponentsInChildren<MeshRenderer>(true);
foreach (MeshRenderer mr in meshRenderArray)
{
Debug.Log("Found MeshRenderer " + mr.name);
foreach (Material m in mr.materials)
{
Debug.Log("Found material " + m.name);
Texture2D tex = m.GetTexture("_MainTex") as Texture2D;
if (tex != null)
{
Debug.Log("Found texture " + tex.name);
}
else
{
Debug.Log("Missing diffuse texture");
}
}
}
gameObject.GetComponent<MouseOrbit>().target = model.transform;
}
Whether I look at the instantiated object or not all the materials & textures appear to be missing. I have tried directly adding the textures and materials to the assetList but this had no effect.
What am I missing that is stopping the textures from being exported correctly?