public static Material CreateDecalMaterial(string selectedMaterialPath, Material selectedMaterial, float decalBlend) { Material decalMaterial = new Material(Shader.Find("Standard")); #if UNITY_2018_3 || UNITY_2018_4 || UNITY_2019 decalMaterial.shader = Shader.Find("HDRP/Decal"); #else decalMaterial.shader = Shader.Find("HDRenderPipeline/Decal"); #endif string decalMaterialPath = selectedMaterialPath.Replace(".mat", "_Decal.mat"); AssetDatabase.CreateAsset(decalMaterial, decalMaterialPath); AssetDatabase.Refresh(); decalMaterial.enableInstancing = true; //Enable material keywords decalMaterial.EnableKeyword("_ALPHATEST_ON"); decalMaterial.EnableKeyword("_ALBEDOCONTRIBUTION"); decalMaterial.EnableKeyword("_COLORMAP"); decalMaterial.EnableKeyword("_DISPLACEMENT_LOCK_TILING_SCALE"); decalMaterial.EnableKeyword("_DOUBLESIDED_ON"); decalMaterial.EnableKeyword("_MASKMAP"); decalMaterial.EnableKeyword("_METALLICSPECGLOSSMAP"); decalMaterial.EnableKeyword("_NORMALMAP"); decalMaterial.EnableKeyword("_NORMALMAP_TANGENT_SPACE"); decalMaterial.EnableKeyword("_PIXEL_DISPLACEMENT"); decalMaterial.EnableKeyword("_PIXEL_DISPLACEMENT_LOCK_OBJECT_SCALE"); //Set material textures decalMaterial.SetTexture("_BaseColorMap", selectedMaterial.mainTexture); decalMaterial.SetTexture("_MaskMap", selectedMaterial.GetTexture("_MaskMap")); decalMaterial.SetTexture("_NormalMap", selectedMaterial.GetTexture("_NormalMap")); //Set material keywords decalMaterial.SetFloat("_AlbedoMode", 1f); if (!MegascansUtilities.isLegacy()) { decalMaterial.SetFloat("_MaskBlendSrc", 0f); } decalMaterial.SetFloat("_DecalBlend", decalBlend); return(decalMaterial); }
public static void SetupTerrain() { string materialName = EditorPrefs.GetString("QuixelDefaultMaterialName", "Terrain Material"); string materialPath = EditorPrefs.GetString("QuixelDefaultMaterialPath", "Quixel/"); string tilingNumber = EditorPrefs.GetString("QuixelDefaultTiling", "10"); string[] versionParts = Application.unityVersion.Split('.'); int majorVersion = int.Parse(versionParts[0]); if (majorVersion < 2018) { Debug.Log("This Unity version doesn't support this feature."); return; } else { float tiling; try { tiling = float.Parse(tilingNumber); } catch (Exception ex) { Debug.Log("Exception: " + ex.ToString()); tiling = 1f; } maxMaterialAllowed = MegascansUtilities.isLegacy() ? 4 : 8; List <Material> sourceMaterials = new List <Material>(); Terrain terrain = null; try { //Get currently highlighted materials in the project window. sourceMaterials = GetSelectedMaterialsInProjectHierarchy(); //Verify two or more materails were seleted. if (sourceMaterials.Count < 2 && MegascansUtilities.isLegacy()) { Debug.Log("Not enough materials to create a blend material. Please select more materials."); return; } //Get selected terrain in the scene view. terrain = getCurrentlySelectedTerrain(); //Verify a terrain is selected. if (terrain == null) { Debug.Log("No terrain selected. Please select a terrain."); //return; } } catch (Exception ex) { Debug.Log("Error getting select terrain/materials."); Debug.Log(ex); } if (MegascansUtilities.isLegacy()) { try { //Set up the material here. Material terrainMaterial = SetupTerrainMaterialDeprecated(sourceMaterials, materialPath, materialName, tiling); //Get terrain data for splat maps. TerrainData terrainData = terrain.terrainData; //Get the textures from source materials to add to the painting. if (terrainData) { #pragma warning disable terrainData.splatPrototypes = getMaterialTexturesForSplatMap(sourceMaterials, tiling); } terrain.materialType = Terrain.MaterialType.Custom; terrain.materialTemplate = terrainMaterial; EnableSplatmaps(terrainData); Texture2D alphaMap = terrainData.alphamapTextures[0]; terrainMaterial.SetTexture("_LayerMaskMap", alphaMap); Debug.Log("Terrain blend material successfully created!"); } catch (Exception ex) { Debug.Log("Error Generating terrain blend material!"); Debug.Log(ex); } } else { #if UNITY_2018_3 || UNITY_2019 //Create the material here. //Material terrainMaterial = SetupTerrainMaterial(materialPath, materialName); List <TerrainLayer> terrainLayers = new List <TerrainLayer>(); foreach (TerrainLayer tl in terrain.terrainData.terrainLayers) { terrainLayers.Add(tl); } foreach (Material mat in sourceMaterials) { if (terrainLayers.Count <= 8) { terrainLayers.Add(createTerrainLayer(mat, tiling)); } } if (terrainLayers.Count > 0) { terrain.terrainData.terrainLayers = terrainLayers.ToArray(); } #endif } } }
void OnGUI() { GUI.DrawTexture(new Rect(0, 0, maxSize.x, maxSize.y), MSBackground, ScaleMode.StretchToFill); GUILayout.BeginHorizontal(); GUILayout.Box("Bridge Plugin v" + version, MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button(MSLogo, MSLogoStyle, GUILayout.Height(logoSize.y), GUILayout.Width(logoSize.x))) { Application.OpenURL("https://quixel.com/megascans/library/latest"); } if (GUILayout.Button(BridgeLogo, MSLogoStyle, GUILayout.Height(logoSize.y), GUILayout.Width(logoSize.x))) { Application.OpenURL("https://quixel.com/bridge"); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); tab = GUILayout.Toolbar(tab, new string[] { "Settings", "Utilities" }, MSTabsStyle, GUILayout.Height(textSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); Handles.color = Color.white; Handles.DrawLine(new Vector3(0f, lineYLoc), new Vector3(maxSize.x, lineYLoc)); GUILayout.EndHorizontal(); if (tab == 0) { GUILayout.BeginHorizontal(); GUILayout.Label("Workflow", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); texPack = EditorGUILayout.Popup(texPack, texPacking, MSPopup, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Displacement", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); dispType = EditorGUILayout.Popup(dispType, dispTypes, MSPopup, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("Shader Type", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); shaderType = EditorGUILayout.Popup(shaderType, shaderTypes, MSPopup, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("Import Resolution", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); importResolution = EditorGUILayout.Popup(importResolution, importResolutions, MSPopup, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("LOD Fade Mode", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); lodFadeMode = EditorGUILayout.Popup(lodFadeMode, lodFadeModeSettings, MSPopup, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("Import Path", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); path = EditorGUILayout.TextField(path, MSField, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); setupCollision = EditorGUI.Toggle(collisionLoc, setupCollision, MSCheckBox); GUILayout.Box("Setup Collision", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); applyToSelection = EditorGUI.Toggle(applyToSelectionLoc, applyToSelection, MSCheckBox); GUILayout.Box("Apply To Selection (2D Surfaces)", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); addAssetToScene = EditorGUI.Toggle(addAssetToSceneLoc, addAssetToScene, MSCheckBox); GUILayout.Box("Add Asset to the Scene", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); setupPrefabs = EditorGUI.Toggle(setupPrefabsLoc, setupPrefabs, MSCheckBox); GUILayout.Box("Create Prefabs", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); importLODs = EditorGUI.Toggle(importLODsLoc, importLODs, MSCheckBox); GUILayout.Box("Import Lower LODs", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); setupLOD = EditorGUI.Toggle(setupLODLoc, setupLOD, MSCheckBox); GUILayout.Box("Create LOD Groups", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); importAllTextures = EditorGUI.Toggle(importAllTexturesLoc, importAllTextures, MSCheckBox); GUILayout.Box("Import All Textures", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); connection = EditorGUI.Toggle(connectionLoc, connection, MSCheckBox); GUILayout.Box("Enable Plugin", MSNormalTextStyle, GUILayout.Height(textSize.y)); if (GUILayout.Button("Help...", MSHelpStyle, GUILayout.Width(textSize.x))) { Application.OpenURL("https://docs.google.com/document/d/1NUAh2vQ9UgK-c1J-yhVnqkTgqZxMVm77rRK-X1ukWw0/"); } GUILayout.EndHorizontal(); } else { #if (UNITY_2018 || UNITY_2019 || UNITY_2020) GUILayout.BeginHorizontal(); GUILayout.Box("Terrain Tools (Beta)", MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y)); GUILayout.EndHorizontal(); if (MegascansUtilities.isLegacy()) { GUILayout.BeginHorizontal(); GUILayout.Box("Material Name", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); terrainMaterialName = EditorGUILayout.TextField(terrainMaterialName, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("Material Path", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); terrainMaterialPath = EditorGUILayout.TextField(terrainMaterialPath, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x)); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Box("Texture Tiling", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); tiling = EditorGUILayout.TextField(tiling, MSField, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Setup Paint Layers", MSStrechedWidthStyle, GUILayout.Height(textSize.y))) { MegascansTerrainTools.SetupTerrain(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); string warningMsg = "Warning: This feature works properly with the metallic workflow only."; if (MegascansUtilities.isLegacy()) { warningMsg += "This feature requires HD Render Pipeline."; } GUI.skin.label.wordWrap = true; GUILayout.Label(warningMsg, MSWarningTextStyle, GUILayout.Height(textSize.y)); GUILayout.EndHorizontal(); #endif #if (UNITY_2018_3 || UNITY_2018_4 || UNITY_2019 || UNITY_2020) GUILayout.BeginHorizontal(); GUILayout.Box("Material Tools (Beta)", MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Create Terrain Paint Layer", MSStrechedWidthStyle, GUILayout.Height(textSize.y))) { MegascansTerrainTools.CreateTerrainLayerFromMat(); } GUILayout.EndHorizontal(); #endif #if HDRP && (UNITY_2018_2 || UNITY_2018_3 || UNITY_2018_4 || UNITY_2019 || UNITY_2020) GUILayout.BeginHorizontal(); GUILayout.Box("Decal Setup (Beta)", MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("Global Opacity (%)", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); decalBlend = EditorGUILayout.TextField(decalBlend, MSField, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); if (!MegascansUtilities.isLegacy()) { GUILayout.BeginHorizontal(); GUILayout.Box("Scale", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); decalSize = EditorGUILayout.TextField(decalSize, MSField, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); if (GUILayout.Button("Create Decal Projector", MSStrechedWidthStyle, GUILayout.Height(textSize.y))) { MegascansDecalTools.SetupDecalProjector(); } GUILayout.EndHorizontal(); #endif } if (!MSLogo) { InitStyle(); Repaint(); } }
/// <summary> /// Creates materials needed for the asset. /// </summary> /// <returns></returns> Material CreateMaterial() { MegascansUtilities.UpdateProgressBar(1.0f, "Processing Asset " + assetName, "Creating material..."); if ((shaderType == 0 || shaderType == 1) && isAlembic) { Debug.Log("Alembic files are not supported in LWRP/HDRP. Please change your export file format in Bridge or change your SRP in Unity."); return(null); } try { string rp = matPath + ".mat"; Material mat = (Material)AssetDatabase.LoadAssetAtPath(rp, typeof(Material)); if (!mat) { mat = new Material(Shader.Find("Standard")); AssetDatabase.CreateAsset(mat, rp); AssetDatabase.Refresh(); if (shaderType < 1) { mat.shader = Shader.Find("HDRenderPipeline/Lit"); #if UNITY_2018_3 || UNITY_2019 mat.shader = Shader.Find("HDRP/Lit"); #endif mat.SetInt("_DisplacementMode", dispType); } if (shaderType > 0) { if (MegascansUtilities.isLegacy()) { mat.shader = Shader.Find("LightweightPipeline/Standard (Physically Based)"); } else { mat.shader = Shader.Find("Lightweight Render Pipeline/Lit"); } } if (shaderType > 1) { if (isAlembic) { mat.shader = Shader.Find("Alembic/Standard"); if (texPack > 0) { mat.shader = Shader.Find("Alembic/Standard (Specular setup)"); } } else { mat.shader = Shader.Find("Standard"); if (texPack > 0) { mat.shader = Shader.Find("Standard (Specular setup)"); } } } } return(mat); } catch (Exception ex) { Debug.Log("Exception: " + ex.ToString()); MegascansUtilities.HideProgressBar(); return(null); } }
void OnGUI() { GUI.DrawTexture(new Rect(0, 0, maxSize.x, maxSize.y), MSBackground, ScaleMode.StretchToFill); GUILayout.BeginHorizontal(); if (GUILayout.Button(MSLogo, MSLogoStyle, GUILayout.Height(logoSize.y), GUILayout.Width(logoSize.x))) { Application.OpenURL("https://quixel.com/megascans/library/latest"); } GUILayout.Button(BridgeLogo, MSLogoStyle, GUILayout.Height(logoSize.y), GUILayout.Width(logoSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); tab = GUILayout.Toolbar(tab, new string[] { "Importer", "Utilities" }, MSTabsStyle, GUILayout.Height(tabSize.y), GUILayout.Width(tabSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); Handles.color = Color.white; Handles.DrawLine(new Vector3(0, 105), new Vector3(maxSize.x, 105)); GUILayout.EndHorizontal(); if (tab == 0) { GUILayout.BeginHorizontal(); GUILayout.Label("Workflow", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); texPack = EditorGUILayout.Popup(texPack, texPacking, MSPopup, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Displacement", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); dispType = EditorGUILayout.Popup(dispType, dispTypes, MSPopup, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("Shader Type", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); shaderType = EditorGUILayout.Popup(shaderType, shaderTypes, MSPopup, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("Import Resolution", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); importResolution = EditorGUILayout.Popup(importResolution, importResolutions, MSPopup, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("LOD Fade Mode", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); lodFadeMode = EditorGUILayout.Popup(lodFadeMode, lodFadeModeSettings, MSPopup, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("Import Path", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); path = EditorGUILayout.TextField(path, MSField, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); setupCollision = EditorGUI.Toggle(collisionLoc, setupCollision, MSCheckBox); GUILayout.Box("Setup Collision", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); terrainNormal = EditorGUI.Toggle(terrainNormalLoc, terrainNormal, MSCheckBox); GUILayout.Box("Generate Terrain Normals", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); applyToSelection = EditorGUI.Toggle(applyToSelectionLoc, applyToSelection, MSCheckBox); GUILayout.Box("Apply To Selection", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); addAssetToScene = EditorGUI.Toggle(addAssetToSceneLoc, addAssetToScene, MSCheckBox); GUILayout.Box("Add Asset to the Scene", MSNormalTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); connection = EditorGUI.Toggle(connectionLoc, connection, MSCheckBox); GUILayout.Box("Enable Live Link", MSNormalTextStyle, GUILayout.Height(textSize.y)); if (GUILayout.Button("Help...", MSHelpStyle, GUILayout.Width(textSize.x))) { Application.OpenURL("https://docs.google.com/document/d/17FmQzTxo63NIvGkRcfVfLtp73GSfBBvZmlq3v6C-9nY/edit?usp=sharing"); } GUILayout.EndHorizontal(); } else { GUILayout.BeginHorizontal(); GUILayout.Box("Terrain Tools (Beta)", MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y)); GUILayout.EndHorizontal(); if (MegascansUtilities.isLegacy()) { GUILayout.BeginHorizontal(); GUILayout.Box("Material Name", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); terrainMaterialName = EditorGUILayout.TextField(terrainMaterialName, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("Material Path", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); terrainMaterialPath = EditorGUILayout.TextField(terrainMaterialPath, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x)); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Box("Texture Tiling", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); tiling = EditorGUILayout.TextField(tiling, MSField, GUILayout.Height(fieldSize.y)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Setup Paint Layers", MSStrechedWidthStyle, GUILayout.Height(textSize.y))) { MegascansTerrainTools.SetupTerrain(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUI.skin.label.wordWrap = true; GUILayout.Label("Warning: This feature works properly with the metallic workflow only.", MSWarningTextStyle, GUILayout.Height(textSize.y)); GUILayout.EndHorizontal(); if (MegascansUtilities.isLegacy()) { GUILayout.BeginHorizontal(); GUILayout.Box("Warning: This feature requires HD Render Pipeline.", MSWarningTextStyle, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); Handles.color = Color.white; Handles.DrawLine(new Vector3(0, 105), new Vector3(310, 105)); GUILayout.EndHorizontal(); #if HDRP && (UNITY_2018_2 || UNITY_2018_3 || UNITY_2019) GUILayout.BeginHorizontal(); GUILayout.Box("Decal Setup (Beta)", MSHeadingTextStyle, GUILayout.Height(textHeadingSize.y), GUILayout.Width(textHeadingSize.x)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Box("Global Opacity (%)", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); decalBlend = EditorGUILayout.TextField(decalBlend, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x)); GUILayout.EndHorizontal(); if (!MegascansUtilities.isLegacy()) { GUILayout.BeginHorizontal(); GUILayout.Box("Scale", MSText, GUILayout.Height(textSize.y), GUILayout.Width(textSize.x)); decalSize = EditorGUILayout.TextField(decalSize, MSField, GUILayout.Height(fieldSize.y), GUILayout.Width(fieldSize.x)); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); if (GUILayout.Button("Create Decal Projector", MSStrechedWidthStyle, GUILayout.Height(textSize.y), GUILayout.Width(size.x))) { MegascansDecalTools.SetupDecalProjector(); } GUILayout.EndHorizontal(); #endif } if (!MSLogo) { InitStyle(); Repaint(); } }