This repository has been archived on 2026-01-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AW_2025/Assets/MeshBaker/Examples/SwitchBakedObjectsTexture/MB_SwitchBakedObjectsTexture.cs
2025-03-06 10:29:25 +09:00

74 lines
2.5 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()
{
meshBaker.ClearMesh();
// Bake the mesh.
if (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 };
if (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();
}
}
}
}
}