67 lines
2.4 KiB
C#
67 lines
2.4 KiB
C#
|
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();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|