public override void Enable(bool fromInspector) { base.Enable(fromInspector); if (shaderNode.material != null && !owner.graph.IsObjectInGraph(shaderNode.material)) { // Check if the material we have is ours if (owner.graph.IsExternalSubAsset(shaderNode.material)) { shaderNode.material = new Material(shaderNode.material); shaderNode.material.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector; } owner.graph.AddObjectToGraph(shaderNode.material); } shaderSettings = new VisualElement(); var shaderField = AddControlField(nameof(ShaderNode.shader)) as ObjectField; shaderSettings.Add(shaderField); var shaderCreationUI = new VisualElement(); shaderSettings.Add(shaderCreationUI); UpdateShaderCreationUI(shaderCreationUI, shaderField); shaderField.RegisterValueChangedCallback((v) => { SetShader((Shader)v.newValue, shaderCreationUI, shaderField); }); if (!fromInspector) { if (shaderNode.shader != null) { shaderPath = AssetDatabase.GetAssetPath(shaderNode.shader); } if (!String.IsNullOrEmpty(shaderPath)) { lastModified = File.GetLastWriteTime(shaderPath); } var lastWriteDetector = schedule.Execute(DetectShaderChanges); lastWriteDetector.Every(200); InitializeDebug(); onPortDisconnected += ResetMaterialPropertyToDefault; } var materialIMGUI = new IMGUIContainer(() => MaterialGUI(fromInspector, shaderCreationUI, shaderField)); shaderSettings.Add(materialIMGUI); materialIMGUI.AddToClassList("MaterialInspector"); controlsContainer.Add(shaderSettings); MixtureEditorUtils.ScheduleAutoHide(materialIMGUI, owner); }
public override void Enable(bool fromInspector) { base.Enable(fromInspector); if (!fromInspector) { if (fixedShaderNode.material != null && !owner.graph.IsObjectInGraph(fixedShaderNode.material)) { if (owner.graph.IsExternalSubAsset(fixedShaderNode.material)) { fixedShaderNode.material = new Material(fixedShaderNode.material); fixedShaderNode.material.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector; } if (fixedShaderNode.material.shader.name != ShaderNode.DefaultShaderName) { owner.graph.AddObjectToGraph(fixedShaderNode.material); } } if (fixedShaderNode.shader != null) { lastModified = File.GetLastWriteTime(AssetDatabase.GetAssetPath(fixedShaderNode.shader)); } var lastWriteDetector = schedule.Execute(DetectShaderChanges); lastWriteDetector.Every(200); InitializeDebug(); onPortDisconnected += ResetMaterialPropertyToDefault; } if (fixedShaderNode.displayMaterialInspector) { Action <bool> safeMaterialGUI = (bool init) => { // Copy fromInspector to avoid having the same value (lambda capture fromInspector pointer) bool f = fromInspector; if (!init) { MaterialGUI(f); } }; safeMaterialGUI(true); var materialIMGUI = new IMGUIContainer(() => safeMaterialGUI(false)); materialIMGUI.AddToClassList("MaterialInspector"); MixtureEditorUtils.ScheduleAutoHide(materialIMGUI, owner); controlsContainer.Add(materialIMGUI); } }