public class TransMat
{
[MenuItem("批量替换shader/批量替换LayaAir Unlit Shader", false)]
private static void MyTool()
{
Operation();
}
static void Operation()
{
/*
foreach (UnityEditor.EditorBuildSettingsScene S in UnityEditor.EditorBuildSettings.scenes)
{
//在built setting中被勾选的scene
if (S.enabled)
{
//得到场景的名称
string name = S.path;
//打开这个场景
UnityEditor.SceneManagement.EditorSceneManager.OpenScene(name);
// 遍历场景中的GameObject
foreach (GameObject obj in Resources.FindObjectsOfTypeAll(typeof(GameObject)))
{
Debug.Log(obj.name);
}
}
}*/
// 遍历场景中的GameObject
foreach (GameObject obj in Resources.FindObjectsOfTypeAll(typeof(GameObject)))
{
var skin = obj.GetComponent<SkinnedMeshRenderer>();
if(skin != null)
{
var mat = new Material(Shader.Find("LayaAir3D/Mesh/Unlit"));
mat.mainTexture = skin.sharedMaterial.mainTexture;
Debug.Log(mat);
skin.material = mat;
}
}
AssetDatabase.Refresh();
}
}
[MenuItem("批量替换shader/批量替换LayaAir 粒子 Shader", false)]
static void changeEffectShader()
{
Shader effect = Shader.Find("LayaAir3D/Particle/ShurikenParticle");
Shader meshEffect = Shader.Find("LayaAir3D/Mesh/Effect");
// 遍历场景中的GameObject
foreach (GameObject obj in Resources.FindObjectsOfTypeAll(typeof(GameObject)))
{
CH.Clear();
FindChild(obj);
for (int i = 0; i < CH.Count; i++)
{
var skin = CH[i].GetComponent<ParticleSystemRenderer>();
if (skin != null)
{
Debug.Log(skin);
if(skin.sharedMaterial != null)
{
skin.sharedMaterial.shader = effect;
}
continue;
}
var _skin = CH[i].GetComponent<MeshRenderer>();
if(_skin != null)
{
_skin.sharedMaterial.shader = meshEffect;
}
}
}
AssetDatabase.Refresh();
}
public static List<GameObject> CH = new List<GameObject>();//储存物体的列表
static void FindChild(GameObject child)
{
//利用for循环 获取物体下的全部子物体
for (int c = 0; c < child.transform.childCount; c++)
{
//如果子物体下还有子物体 就将子物体传入进行回调查找 直到物体没有子物体为止
if (child.transform.GetChild(c).childCount > 0)
{
FindChild(child.transform.GetChild(c).gameObject);
}
CH.Add(child.transform.GetChild(c).gameObject);
}
}