【毎日1つのUnityテクニック】物体を同じシェーダに一括修正

1227 ワード

使用方法
  • 選択物体
  • Ctrlを押したままにする必要があるシェーダ
  • を選択
  • Tools/changeMaterialボタン
  • をクリック
    using UnityEngine;
    using UnityEditor;
    
    public class ChangeMaterial : MonoBehaviour
    {
    
        [MenuItem("Tools/changeMaterial")]
        public static void change()
        {
            Object[] m_objects = Selection.GetFiltered(typeof(Material), SelectionMode.DeepAssets);//         
    
            if (m_objects.Length != 1)
            {
                Debug.Log("        ");
                return;
            }
            foreach (GameObject go in Selection.gameObjects)
            {
                FindMater(go, m_objects[0] as Material);
            }
    
            Debug.Log("Complete! ");
        }
    
    
        public static void FindMater(GameObject go, Material m)
        {
            if (go.GetComponent() != null)
            {
                go.GetComponent().material = m;
            }
    
            foreach (Transform child in go.transform)
            {
                FindMater(child.gameObject, m);
    
                if (child.GetComponent() != null)
                {
                    child.GetComponent().material = m;
                }
            }
        }
    
    }