/// <summary>
 /// Sets material info for gameobjects that have a material to prevent possible future incompatibility
 /// </summary>
 protected void UpdateMaterialInfo()
 {
     string[] prefabsGUIDs = AssetDatabase.FindAssets("t: prefab");
     foreach (string prefabGUID in prefabsGUIDs)
     {
         string     path = AssetDatabase.GUIDToAssetPath(prefabGUID);
         GameObject go   = AssetDatabase.LoadAssetAtPath <GameObject>(path);
         if (go == null)
         {
             continue;
         }
         foreach (Renderer renderer in go.GetComponentsInChildren <Renderer>())
         {
             if (renderer.sharedMaterials != null && renderer.sharedMaterials.Length > 0)
             {
                 if (renderer.gameObject.GetComponent <KMMaterialInfo>() == null)
                 {
                     renderer.gameObject.AddComponent <KMMaterialInfo>();
                 }
                 KMMaterialInfo materialInfo = renderer.gameObject.GetComponent <KMMaterialInfo>();
                 materialInfo.ShaderNames = new List <string>();
                 foreach (Material material in renderer.sharedMaterials)
                 {
                     materialInfo.ShaderNames.Add(material.shader.name);
                 }
             }
         }
     }
 }
示例#2
0
    /// <summary>
    /// Sets material info for gameobjects that have a material to prevent possible future incompatibility
    /// </summary>
    protected void UpdateMaterialInfo()
    {
        List <string> supportedShaders = new List <string>
        {
            "Legacy Shaders/Diffuse", "Hidden/CubeBlur", "Hidden/CubeCopy", "Hidden/CubeBlend",
            "UI/Default", "UI/Default Font", "Mobile/Diffuse", "Unlit/Transparent",
            "Unlit/Transparent Cutout", "Unlit/Color", "Mobile/Unlit (Supports Lightmap)", "Unlit/Texture",
            "KT/Blend Lit and Unlit", "KT/Blend Lit and Unlit Vertex Color", "KT/Blend Unlit", "GUI/KT 3D Text",
            "KT/Mobile/Diffuse", "KT/Mobile/DiffuseTint", "KT/Transparent/Mobile Diffuse Underlay200", "KT/Unlit/TexturedLightmap",
            "KT/Unlit/TransparentVertexColorUnderlay30", "KT/Outline"
        };

        string[] prefabsGUIDs = AssetDatabase.FindAssets("t: prefab");
        foreach (string prefabGUID in prefabsGUIDs)
        {
            string     path = AssetDatabase.GUIDToAssetPath(prefabGUID);
            GameObject go   = AssetDatabase.LoadAssetAtPath <GameObject>(path);
            if (go == null)
            {
                continue;
            }
            foreach (Renderer renderer in go.GetComponentsInChildren <Renderer>())
            {
                if (renderer.sharedMaterials != null && renderer.sharedMaterials.Length > 0)
                {
                    if (renderer.gameObject.GetComponent <KMMaterialInfo>() == null)
                    {
                        renderer.gameObject.AddComponent <KMMaterialInfo>();
                    }
                    KMMaterialInfo materialInfo = renderer.gameObject.GetComponent <KMMaterialInfo>();
                    materialInfo.ShaderNames = new List <string>();
                    foreach (Material material in renderer.sharedMaterials)
                    {
                        if (material == null)
                        {
                            var obj = renderer.transform;
                            var str = new List <string>();
                            while (obj != null)
                            {
                                str.Add(obj.gameObject.name);
                                obj = obj.parent;
                            }
                            Debug.LogWarningFormat("There is an unassigned material on the following object: {0}", string.Join(" > ", str.ToArray()));
                            continue;
                        }
                        materialInfo.ShaderNames.Add(material.shader.name);

                        if (material.shader.name == "Standard")
                        {
                            Debug.LogWarning(string.Format("Use of Standard shader in object {0}. Standard shader should be avoided as it will cause your mod to break in future versions of the game.", renderer.gameObject));
                        }
                        else if (!supportedShaders.Contains(material.shader.name))
                        {
                            Debug.LogWarning(string.Format("Use of custom shader {0} in object {1}. Use of custom shaders will break mod compatibility on game update requiring rebuild. Recommend using only supported shaders.", material.shader.name, renderer.gameObject));
                        }
                    }
                }
            }
        }
    }