前提・実現したいこと
以下を参考に、GameObject”A”配下の子要素全てのMaterial Shaderを変更(例:Standard → LEgacy Shaders/Diffuse)
しようと思ったのですが、スクリプト内のどこをどのように変更すればよいか分かりませんでした。
プログラム初心者のため、ご教示いただけると幸いです。
該当のソースコード
/// <summary>
/// targetGameObject以下の子オブジェクト群のシェーダーをShaderName_toに変更する。ShaderName_fromが指定されていない場合はすべてのShaderを変更
/// </summary>
/// <param name="targetGameObject">対象GameObject。子要素も変更されます。</param>
/// <param name="ShaderName_from">変更後のShader名</param>
/// <param name="ShaderName_to">対象Shader名。未設定時は全てのShaderを変更</param>
public static void changeShader(GameObject targetGameObject, string ShaderName_to, string ShaderName_from = "")
{
//List<GameObject> ret = new List<GameObject>();
foreach (Transform t in targetGameObject.GetComponentsInChildren<Transform>(true)) //include inactive gameobjects
{
if (t.GetComponent<Renderer>() != null)
{
var materials = t.GetComponent<Renderer>().materials;
for (int i = 0; i< materials.Length; i++)
{
Material material = materials[i];
if (ShaderName_from == "")
{
material.shader = Shader.Find(ShaderName_to);
}
else
{
if (material.shader.name == ShaderName_from)
{
material.shader = Shader.Find(ShaderName_to);
}
}
}
}
}
}
試したこと
targetGameobject、ShaderName_to、ShaderName_fromを書き換えるべきとは思いましたが
どこを変更したものか分からず。。。でした。
補足情報(バージョン)
Unity2017.2.1f1

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/27 02:09