Firstborn/Assets/MeshBaker/Examples/SwitchBakedObjectsTexture/MB_SwitchBakedObjectsTextur...

67 lines
2.4 KiB
C#
Raw Normal View History

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();
}
}
}
}