假设现在有一大批模型的材质球的shader丢失了,我们想把这批模型的材质球都使用Mobile/Unlit (Supports Lightmap)
这个shader,挨个挨个点太麻烦了,可以用代码来批量执行这件事
代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class FixMatShader
{
[MenuItem("Tools/Aux/修复材质球shader丢失")]
static void StartRun()
{
var objs = Selection.objects;
foreach (var obj in objs)
{
var go = obj as GameObject;
var rs = go.GetComponentsInChildren<Renderer>();
foreach (var r in rs)
{
if (null != r.sharedMaterial)
r.sharedMaterial.shader = Shader.Find("Mobile/Unlit (Supports Lightmap)");
}
}
}
}
选择那批模型的预设,然后执行菜单【Tools/Aux/修复材质球shader丢失】即可
补充
我们是通过Shader.Find来找到Unity的内置shader的,那么shader的名字在哪里查看呢
在材质球空白处右键-Edit Shader…
然后点击Compile and show code
这样就可以看到shader的代码了,头部那里就可以看到shader的名字了