123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using UnityEngine;
- using System.Collections;
- using DigitalOpus.MB.Core;
- /*
- * For building atlases at runtime it is very important that:
- * - textures be in trucolor/RBGA32 format
- * - textures have read flag set
- *
- *
- * It is also Highly recommended to avoid resizing
- * - build padding into textures in editor
- * - don't use padding when creating atlases
- * - don't use tiled materials
- *
- * If you are having problems look at the Debug Log on the device
- */
- public class BakeTexturesAtRuntime : MonoBehaviour {
- public GameObject target;
- float elapsedTime = 0;
- MB3_TextureBaker.CreateAtlasesCoroutineResult result = new MB3_TextureBaker.CreateAtlasesCoroutineResult();
-
- void OnGUI(){
- GUILayout.Label("Time to bake textures: " + elapsedTime);
- if (GUILayout.Button("Combine textures & build combined mesh all at once")){
- MB3_MeshBaker meshbaker = target.GetComponentInChildren<MB3_MeshBaker>();
- MB3_TextureBaker textureBaker = target.GetComponent<MB3_TextureBaker>();
-
- //These can be assets configured at runtime or you can create them
- // on the fly like this
- textureBaker.textureBakeResults = ScriptableObject.CreateInstance<MB2_TextureBakeResults>();
- textureBaker.resultMaterial = new Material( Shader.Find("Diffuse") );
-
- float t1 = Time.realtimeSinceStartup;
- textureBaker.CreateAtlases();
- elapsedTime = Time.realtimeSinceStartup - t1;
-
- meshbaker.ClearMesh(); //only necessary if your not sure whats in the combined mesh
- meshbaker.textureBakeResults = textureBaker.textureBakeResults;
- //Add the objects to the combined mesh
- meshbaker.AddDeleteGameObjects(textureBaker.GetObjectsToCombine().ToArray(), null, true);
-
- meshbaker.Apply();
- }
- if (GUILayout.Button("Combine textures & build combined mesh using coroutine"))
- {
- Debug.Log("Starting to bake textures on frame " + Time.frameCount);
- MB3_TextureBaker textureBaker = target.GetComponent<MB3_TextureBaker>();
- //These can be assets configured at runtime or you can create them
- // on the fly like this
- textureBaker.textureBakeResults = ScriptableObject.CreateInstance<MB2_TextureBakeResults>();
- textureBaker.resultMaterial = new Material(Shader.Find("Diffuse"));
- //register an OnSuccess function to be called when texture baking is complete
- textureBaker.onBuiltAtlasesSuccess = new MB3_TextureBaker.OnCombinedTexturesCoroutineSuccess(OnBuiltAtlasesSuccess);
- StartCoroutine(textureBaker.CreateAtlasesCoroutine(null,result,false,null,.01f));
- }
- }
- void OnBuiltAtlasesSuccess()
- {
- Debug.Log("Calling success callback. baking meshes");
- MB3_MeshBaker meshbaker = target.GetComponentInChildren<MB3_MeshBaker>();
- MB3_TextureBaker textureBaker = target.GetComponent<MB3_TextureBaker>();
- //elapsedTime = Time.realtimeSinceStartup - t1;
- if (result.isFinished &&
- result.success)
- {
- meshbaker.ClearMesh(); //only necessary if your not sure whats in the combined mesh
- meshbaker.textureBakeResults = textureBaker.textureBakeResults;
- //Add the objects to the combined mesh
- meshbaker.AddDeleteGameObjects(textureBaker.GetObjectsToCombine().ToArray(), null, true);
- meshbaker.Apply();
- }
- Debug.Log("Completed baking textures on frame " + Time.frameCount);
- }
- }
|