using UnityEngine; using UnityEditor; using System.Collections; using ProBuilder2.EditorCommon; using ProBuilder2.Common; using System.Linq; namespace ProBuilder2.Actions { /** * Menu interface for resetting the materials associated with special entity types. */ public class pb_ResetEntityMaterials : Editor { [MenuItem("Tools/" + pb_Constant.PRODUCT_NAME + "/Repair/Repair Entity Materials", false, pb_Constant.MENU_REPAIR)] public static void MenuRefreshMeshReferences() { RepairEntityMaterials(); } /** * \brief Force refreshes all meshes in scene. */ private static void RepairEntityMaterials() { IEnumerable all = GameObject.FindObjectsOfType(typeof(pb_Entity)) .Where(x => ((pb_Entity)x).entityType == EntityType.Collider || ((pb_Entity)x).entityType == EntityType.Trigger); Material ColliderMat = pb_Constant.ColliderMaterial; Material TriggerMat = pb_Constant.TriggerMaterial; if( ColliderMat == null ) { Debug.LogError("ProBuilder cannot find Collider material! Make sure the Collider material asset is in \"Assets/ProCore/ProBuilder/Resources/Material\" folder."); return; } if( TriggerMat == null ) { Debug.LogError("ProBuilder cannot find Trigger material! Make sure the Trigger material asset is in \"Assets/ProCore/ProBuilder/Resources/Material\" folder."); return; } foreach(pb_Entity ent in all) { MeshRenderer mr = ent.transform.GetComponent() ?? ent.gameObject.AddComponent(); mr.sharedMaterials = new Material[1] { ent.entityType == EntityType.Collider ? ColliderMat : TriggerMat }; } EditorUtility.DisplayDialog("Repair Entity Materials", "Successfully reset special entity materials in scene.", "Okay"); } } }