開発入門 > Unity > UnityのGameobjectのShaderを一括で変換する関数

UnityのGameobjectのShaderを一括で変換する関数

Unityで全てまたは一部のシェーダーを一括で違うものにするための関数

・指定したオブジェクトの子要素全てを一括で変換
・Gameobjectに複数のMeshが張ってある場合でも正常に動作します

   /// <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);
                        }
                    }
                }
            }
        }
    }

利用方法

        //   StandardをすべてUnlit/STYLYに変更
        changeShader(TargetObject, "Unlit/Texture", "Standard");

        //   すべてのShaderをUnlit/STYLYに変更
        changeShader(TargetObject, "Unlit/Texture");

 

 

カテゴリー: Unity

HOME / Coporate Site/ Careers

© Copyright 2018 STYLY..