using System.Collections; using System.Collections.Generic; using UnityEngine; public class MB_SwitchBakedObjectsTexture : MonoBehaviour { // The target renderer where we will switch materials. public MeshRenderer targetRenderer; // The list of materials to cycle through. public Material[] materials; // The Mesh Baker that will do the baking public MB3_MeshBaker meshBaker; public void OnGUI() { GUILayout.Label("Press space to switch the material on one of the cubes. " + "This scene reuses the Texture Bake Result from the SceneBasic example."); } public void Start() { // Bake the mesh. meshBaker.AddDeleteGameObjects(meshBaker.GetObjectsToCombine().ToArray(),null,true); meshBaker.Apply(); } public void Update() { if (Input.GetKeyDown(KeyCode.Space)) { // Cycle the material on targetRenderer to the next material in materials. Material mat = targetRenderer.sharedMaterial; //Find the index of the current material on the Renderer int materialIdx = -1; for (int i = 0; i < materials.Length; i++){ if (materials[i] == mat){ materialIdx = i; } } // Get the next material in the cycle. materialIdx++; if (materialIdx >= materials.Length) materialIdx = 0; if (materialIdx != -1) { // Assign the material to the disabled renderer targetRenderer.sharedMaterial = materials[materialIdx]; Debug.Log("Updating Material to: " + targetRenderer.sharedMaterial); // Update the Mesh Baker combined mesh GameObject[] gameObjects = new GameObject[] { targetRenderer.gameObject }; meshBaker.UpdateGameObjects(gameObjects, false, false, false, false, true, false, false, false, false); // We could have used AddDelteGameObjects instead of UpdateGameObjects. // UpdateGameObjects is faster, but does not work if the material change causes // the object to switch submeshes in the combined mesh. // meshBaker.AddDeleteGameObjects(gameObjects, gameObjects,false); // Apply the changes. meshBaker.Apply(); } } } }