public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { if (_enabledOptions == null) { return; } EditorGUILayout.HelpBox("Удаляет папку и все файлы в ней", MessageType.Info); editor.UpdateNodeName(node); GUILayout.Space(10f); //Show target configuration tab editor.DrawPlatformSelector(node); using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { var disabledScope = editor.DrawOverrideTargetToggle(node, _enabledOptions.ContainsValueOf(editor.CurrentEditingGroup), (bool enabled) => { using (new RecordUndoScope("Remove Target Bundle Options", node, true)) { if (enabled) { _enabledOptions[editor.CurrentEditingGroup] = _enabledOptions.DefaultValue; _outputDir[editor.CurrentEditingGroup] = _outputDir.DefaultValue; _outputOption[editor.CurrentEditingGroup] = _outputOption.DefaultValue; } else { _enabledOptions.Remove(editor.CurrentEditingGroup); _outputDir.Remove(editor.CurrentEditingGroup); _outputOption.Remove(editor.CurrentEditingGroup); } onValueChanged(); } }); using (disabledScope) { OutputOption opt = (OutputOption)_outputOption[editor.CurrentEditingGroup]; var newOption = (OutputOption)EditorGUILayout.EnumPopup("Output Option", opt); if (newOption != opt) { using (new RecordUndoScope("Change Output Option", node, true)) { _outputOption[editor.CurrentEditingGroup] = (int)newOption; onValueChanged(); } } using (new EditorGUI.DisabledScope(opt == OutputOption.BuildInCacheDirectory || opt == OutputOption.BuildInBundlesCacheDirectory)) { var newDirPath = editor.DrawFolderSelector("Output Directory", "Select Output Folder", _outputDir[editor.CurrentEditingGroup], Application.dataPath + "/../", (string folderSelected) => { var projectPath = Directory.GetParent(Application.dataPath).ToString(); if (projectPath == folderSelected) { folderSelected = string.Empty; } else { var index = folderSelected.IndexOf(projectPath); if (index >= 0) { folderSelected = folderSelected.Substring(projectPath.Length + index); if (folderSelected.IndexOf('/') == 0) { folderSelected = folderSelected.Substring(1); } } } return(folderSelected); } ); if (newDirPath != _outputDir[editor.CurrentEditingGroup]) { using (new RecordUndoScope("Change Output Directory", node, true)) { _outputDir[editor.CurrentEditingGroup] = newDirPath; onValueChanged(); } } var outputDir = PrepareOutputDirectory(BuildTargetUtility.GroupToTarget(editor.CurrentEditingGroup), node.Data); using (new EditorGUI.DisabledScope(!Directory.Exists(outputDir))) { using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); #if UNITY_EDITOR_OSX string buttonName = "Reveal in Finder"; #else string buttonName = "Show in Explorer"; #endif if (GUILayout.Button(buttonName)) { EditorUtility.RevealInFinder(outputDir); } } } EditorGUILayout.HelpBox("You can use '{Platform}' variable for Output Directory path to include platform name.", MessageType.Info); } } } }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { EditorGUILayout.HelpBox("My Custom Node: Implement your own Inspector.", MessageType.Info); editor.UpdateNodeName(node); GUILayout.Space(10f); //Show target configuration tab editor.DrawPlatformSelector(node); using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { // Draw Platform selector tab. var disabledScope = editor.DrawOverrideTargetToggle(node, m_result.ContainsValueOf(editor.CurrentEditingGroup), (bool b) => { using (new RecordUndoScope("Remove Target Platform Settings", node, true)) { if (b) { m_result[editor.CurrentEditingGroup] = m_result.DefaultValue; } else { m_result.Remove(editor.CurrentEditingGroup); } onValueChanged(); } }); // Draw tab contents using (disabledScope) { var val = m_result[editor.CurrentEditingGroup]; using (new GUILayout.HorizontalScope()) { if (GUILayout.Button("Capture reference data")) { using (new RecordUndoScope("My Value Changed", node, true)){ val = JsonUtility.ToJson(m_current); m_result[editor.CurrentEditingGroup] = val; onValueChanged(); } } if (GUILayout.Button("Clear", GUILayout.Width(50f))) { m_result.Remove(editor.CurrentEditingGroup); val = string.Empty; onValueChanged(); } } GUILayout.Space(10f); if (!string.IsNullOrEmpty(val)) { GUILayout.Label("Reference Data", "BoldLabel"); // var width = GUILayoutUtility.GetLastRect().width; // GUI.skin.label.CalcHeight(new GUIContent(val), 500f); GUILayout.Label(val, GUI.skin.box, GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); GUILayout.Space(4f); using (new GUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); if (GUILayout.Button("Copy to Clipboard", GUILayout.Width(150f))) { EditorGUIUtility.systemCopyBuffer = val; } } } } } }
/// <summary> /// 绘制inspector /// </summary> /// <param name="node"></param> /// <param name="streamManager"></param> /// <param name="editor"></param> /// <param name="onValueChanged"></param> public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { EditorGUILayout.HelpBox("该节点,用于获取传入路径的所有子节点,默认只接受一个传入!", MessageType.Info); }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { this.PacakgeName = EditorGUILayout.TextField("分包名:", this.PacakgeName); node.Name = "分包名:" + this.PacakgeName; //editor.UpdateNodeName(node); }
/// <summary> /// 预览结果 编辑器连线数据,但是build模式也会执行 /// 这里只建议设置BuildingCtx的ab颗粒度 /// </summary> /// <param name="target"></param> /// <param name="nodeData"></param> /// <param name="incoming"></param> /// <param name="connectionsToOutput"></param> /// <param name="outputFunc"></param> public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { // this.selfNodeGUI = node; //node.Name = EditorGUILayout.TextField("Tips:", node.Name); editor.UpdateNodeName(node); if (!node.Name.StartsWith("[颗粒度]")) { node.Name = "[颗粒度]" + node.Name; } bool isupdateNode = false; //包装一层 方便监听改动 var ret = EditorGUILayout.EnumPopup("设置规则", (FolderAssetBundleRule)this.SetAssetBundleNameRule).GetHashCode(); if (ret != this.SetAssetBundleNameRule) { this.SetAssetBundleNameRule = ret; isupdateNode = true; } //根据不同的枚举进行提示 switch ((FolderAssetBundleRule)this.SetAssetBundleNameRule) { case FolderAssetBundleRule.用该目录路径设置AB名: { EditorGUILayout.HelpBox("将该目录下所有文件,打包成一个AB!", MessageType.Info); } break; case FolderAssetBundleRule.用子目录路径设置AB名: { var label = "将该目录下所有子目录,按子目录分别打包AB! \n 如:A文件夹下有 A/a1,A/a2,A/a3三个文件夹, 则会打包为a1、a2、a3 三个AB包,\n 若存在类似A/1.txt文件, 额外会生成AssetBundle - A,包含1.txt"; EditorGUILayout.HelpBox(label, MessageType.Info); } break; } if (isupdateNode) { Debug.Log("更新node!"); //触发 //BDFrameworkAssetsEnv.UpdateConnectLine(this.selfNodeGUI, this.selfNodeGUI.Data.OutputPoints.FirstOrDefault()); GraphNodeHelper.UpdateNodeGraph(this.selfNodeGUI); } }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { if (!InternalEditorUtility.inBatchMode) { _serverBundlesFolder = editor.DrawFolderSelector("Server bundles folder", "Choose server bundles folder", _serverBundlesFolder, string.Empty, s => s); EditorGUILayout.HelpBox("At build machine this folder will be re-setted automatically.", MessageType.Info); } _manifestFileName = EditorGUILayout.TextField("Manifest file name", _manifestFileName); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.HelpBox( "Specify pathes that will be stripped from asset pathes. Each path on new line. Example:\n" + "You have an asset \"Assets/Resources/GUI/Dialogs/MyDialog.prefab\"\n" + "You want this asset as \"Dialogs/MyDialog\" in bundle.\n" + "The stripped path will be \"Recources/GUI", MessageType.Info); _pathesToStrip = EditorGUILayout.TextArea(_pathesToStrip); EditorGUILayout.Separator(); EditorGUILayout.Separator(); EditorGUILayout.HelpBox("Specify files extentions, that will not include in manifest assets. (separator - \",\")", MessageType.Info); _excludeResourcesExtensions = EditorGUILayout.TextArea(_excludeResourcesExtensions); }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { editor.UpdateNodeName(node); GUILayout.Space(10f); editor.DrawPlatformSelector(node); using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { var disabledScope = editor.DrawOverrideTargetToggle(node, _enabledOptions.ContainsValueOf(editor.CurrentEditingGroup), b => { using (new RecordUndoScope("Remove Target Platform Settings", node, true)) { if (b) { _enabledOptions[editor.CurrentEditingGroup] = _enabledOptions.DefaultValue; _manifestFileName[editor.CurrentEditingGroup] = _manifestFileName.DefaultValue; _resourcesPathes[editor.CurrentEditingGroup] = _resourcesPathes.DefaultValue; } else { _enabledOptions.Remove(editor.CurrentEditingGroup); _manifestFileName.Remove(editor.CurrentEditingGroup); _resourcesPathes.Remove(editor.CurrentEditingGroup); } onValueChanged(); } }); using (disabledScope) { var newValue = EditorGUILayout.TextField("Output file name", _manifestFileName[editor.CurrentEditingGroup]); if (_manifestFileName[editor.CurrentEditingGroup] != newValue) { using (new RecordUndoScope("Change Output file name", node, true)) { _manifestFileName[editor.CurrentEditingGroup] = newValue; onValueChanged(); } } EditorGUILayout.LabelField( "Specify the folders, you want to cut from\nassets name. Use this if you have\none folder for all resources and want to\nmake assets name alb shorter.\nEach folder from a new line\nExample:\nMyStaffs/Dogs\nMyStaffs2/Cats", GUILayout.Height(120)); newValue = EditorGUILayout.TextArea(_resourcesPathes[editor.CurrentEditingGroup]); if (_resourcesPathes[editor.CurrentEditingGroup] != newValue) { using (new RecordUndoScope("Change Resources pathes", node, true)) { _resourcesPathes[editor.CurrentEditingGroup] = newValue; onValueChanged(); } } } } }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { EditorGUILayout.HelpBox("Just finish work", MessageType.Info); editor.UpdateNodeName(node); }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { EditorGUILayout.HelpBox("Local bundles path is:\n" + GetBundlesFolder() + "\nAt build machine this folder will be re-setted automatically.", MessageType.Info); }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { EditorGUILayout.HelpBox("Will delete all files, specified by bundles manifest and passed node condition." + Environment.NewLine + " \"OnlyInBatchMode\" means node work only if unity run in batch mode", MessageType.Info); editor.UpdateNodeName(node); GUILayout.Space(10f); //Show target configuration tab editor.DrawPlatformSelector(node); using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { var disabledScope = editor.DrawOverrideTargetToggle(node, _enabledPerPlatformOptions.ContainsValueOf(editor.CurrentEditingGroup), (bool enabled) => { using (new RecordUndoScope("Remove Target Bundle Options", node, true)) { if (enabled) { _enabledPerPlatformOptions[editor.CurrentEditingGroup] = _enabledPerPlatformOptions.DefaultValue; _workingOption[editor.CurrentEditingGroup] = _workingOption.DefaultValue; _filterString[editor.CurrentEditingGroup] = _filterString.DefaultValue; } else { _enabledPerPlatformOptions.Remove(editor.CurrentEditingGroup); _workingOption.Remove(editor.CurrentEditingGroup); _filterString.Remove(editor.CurrentEditingGroup); } onValueChanged(); } }); using (disabledScope) { WorkOption opt = (WorkOption)_workingOption[editor.CurrentEditingGroup]; var newOption = (WorkOption)EditorGUILayout.EnumPopup("Mode:", opt); if (newOption != opt) { using (new RecordUndoScope("Change node mode", node, true)) { _workingOption[editor.CurrentEditingGroup] = (int)newOption; onValueChanged(); } } if (opt == WorkOption.RemoveByAssetPathContains || opt == WorkOption.RemoveByAssetPathStarts || opt == WorkOption.RemoveByAssetNameContains || opt == WorkOption.RemoveByAssetNameStarts) { GUILayout.Space(8f); var curRegexValue = _filterString[editor.CurrentEditingGroup]; EditorGUILayout.LabelField("Conditions, separated by new line:"); var newRegexValue = EditorGUILayout.TextArea(curRegexValue); if (newRegexValue != curRegexValue) { using (new RecordUndoScope("Change Regex", node, true)) { _filterString[editor.CurrentEditingGroup] = newRegexValue; onValueChanged(); } } } } } }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { editor.UpdateNodeName(node); GUILayout.Space(10f); editor.DrawPlatformSelector(node); using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { var disabledScope = editor.DrawOverrideTargetToggle(node, m_myValue.ContainsValueOf(editor.CurrentEditingGroup), b => { using (new RecordUndoScope("Remove Target Platform Settings", node, true)) { if (b) { m_myValue[editor.CurrentEditingGroup] = m_myValue.DefaultValue; } else { m_myValue.Remove(editor.CurrentEditingGroup); } onValueChanged(); } }); using (disabledScope) { _copyManifestExternal = EditorGUILayout.Toggle("Copy manifest to external folder", _copyManifestExternal); _manifestDirectoryExport = editor.DrawFolderSelector("Output Directory", "Select Output Folder", _manifestDirectoryExport, Application.dataPath + "/../", folderSelected => folderSelected); _manifestFileName = EditorGUILayout.TextField("Output file name", _manifestFileName); EditorGUILayout.LabelField( "Specify the folders, you want to cut from\nassets name. Use this if you have\none folder for all resources and want to\nmake assets name alb shorter.\nEach folder from a new line\nExample:\nMyStaffs/Dogs\nMyStaffs2/Cats", GUILayout.Height(120)); _resourcesPathes = EditorGUILayout.TextArea(_resourcesPathes); } } }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { if (_enabledOptions == null) { return; } EditorGUILayout.HelpBox("Сохраняет конфигурацию бандлей в json", MessageType.Info); editor.UpdateNodeName(node); GUILayout.Space(10f); //Show target configuration tab editor.DrawPlatformSelector(node); using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { var disabledScope = editor.DrawOverrideTargetToggle(node, _enabledOptions.ContainsValueOf(editor.CurrentEditingGroup), (bool enabled) => { using (new RecordUndoScope("Remove Target Bundle Options", node, true)) { if (enabled) { _enabledOptions[editor.CurrentEditingGroup] = _enabledOptions.DefaultValue; _inputDir[editor.CurrentEditingGroup] = _inputDir.DefaultValue; _inputOption[editor.CurrentEditingGroup] = _inputOption.DefaultValue; _fileName[editor.CurrentEditingGroup] = _fileName.DefaultValue; } else { _enabledOptions.Remove(editor.CurrentEditingGroup); _inputDir.Remove(editor.CurrentEditingGroup); _inputOption.Remove(editor.CurrentEditingGroup); _fileName.Remove(editor.CurrentEditingGroup); } onValueChanged(); } }); using (disabledScope) { SaveBundlesConfigurationNode.OutputOption opt = (SaveBundlesConfigurationNode.OutputOption)_inputOption[editor.CurrentEditingGroup]; var newOption = (SaveBundlesConfigurationNode.OutputOption)EditorGUILayout.EnumPopup("Output Option", opt); if (newOption != opt) { using (new RecordUndoScope("Change Output Option", node, true)) { _inputOption[editor.CurrentEditingGroup] = (int)newOption; onValueChanged(); } } using (new EditorGUI.DisabledScope(opt == SaveBundlesConfigurationNode.OutputOption.BuildInCacheDirectory)) { var newDirPath = editor.DrawFolderSelector("Output Directory", "Select Output Folder", _inputDir[editor.CurrentEditingGroup], Application.dataPath + "/../", (string folderSelected) => { var projectPath = Directory.GetParent(Application.dataPath).ToString(); if (projectPath == folderSelected) { folderSelected = string.Empty; } else { var index = folderSelected.IndexOf(projectPath); if (index >= 0) { folderSelected = folderSelected.Substring(projectPath.Length + index); if (folderSelected.IndexOf('/') == 0) { folderSelected = folderSelected.Substring(1); } } } return(folderSelected); } ); if (newDirPath != _inputDir[editor.CurrentEditingGroup]) { using (new RecordUndoScope("Change Output Directory", node, true)) { _inputDir[editor.CurrentEditingGroup] = newDirPath; onValueChanged(); } } var outputDir = PrepareOutputDirectory(BuildTargetUtility.GroupToTarget(editor.CurrentEditingGroup), node.Data, false); if (opt == SaveBundlesConfigurationNode.OutputOption.ErrorIfNoOutputDirectoryFound && editor.CurrentEditingGroup != BuildTargetGroup.Unknown && !string.IsNullOrEmpty(_inputDir[editor.CurrentEditingGroup]) && !Directory.Exists(outputDir)) { using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.LabelField(outputDir + " does not exist."); if (GUILayout.Button("Create directory")) { Directory.CreateDirectory(outputDir); } } EditorGUILayout.Space(); string parentDir = Path.GetDirectoryName(_inputDir[editor.CurrentEditingGroup]); if (Directory.Exists(parentDir)) { EditorGUILayout.LabelField("Available Directories:"); string[] dirs = Directory.GetDirectories(parentDir); foreach (string s in dirs) { EditorGUILayout.LabelField(s); } } EditorGUILayout.Space(); } using (new EditorGUI.DisabledScope(!Directory.Exists(outputDir))) { using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); #if UNITY_EDITOR_OSX string buttonName = "Reveal in Finder"; #else string buttonName = "Show in Explorer"; #endif if (GUILayout.Button(buttonName)) { EditorUtility.RevealInFinder(outputDir); } } } EditorGUILayout.HelpBox("You can use '{Platform}' variable for Output Directory path to include platform name.", MessageType.Info); } GUILayout.Space(8f); var fileName = _fileName[editor.CurrentEditingGroup]; var newFileName = EditorGUILayout.TextField("File Name", fileName); if (newFileName != fileName) { using (new RecordUndoScope("Change File Name", node, true)) { _fileName[editor.CurrentEditingGroup] = newFileName; onValueChanged(); } } } } }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { GUILayout.Label("初始化打包框架", EditorGUIHelper.LabelH4); this.selfNodeGUI = node; bool isDirty = false; //渲染数据. //包装一层 方便监听改动 var ret = EditorGUILayout.EnumPopup("窗口模式", (AssetGraphWindowsModeEnum)this.AssetGraphWindowsMode).GetHashCode(); if (ret != this.AssetGraphWindowsMode) { this.AssetGraphWindowsMode = ret; isDirty = true; } //根据不同的枚举进行提示 switch ((AssetGraphWindowsModeEnum)this.AssetGraphWindowsMode) { case AssetGraphWindowsModeEnum.配置节点模式: { EditorGUILayout.HelpBox("该模式下,不会加载实际Assets数据,避免卡顿!", MessageType.Info); } break; case AssetGraphWindowsModeEnum.预览节点模式: { EditorGUILayout.HelpBox("该模式下,所有操作都会预览实际Assets打包情况,比较卡!", MessageType.Info); } break; } if (GUILayout.Button("强制刷新资源数据")) { isDirty = true; GenBuildingCtx(true); } if (isDirty) { Debug.Log("更新node!"); //触发 //BDFrameworkAssetsEnv.UpdateConnectLine(this.selfNodeGUI, this.selfNodeGUI.Data.OutputPoints.FirstOrDefault()); GraphNodeHelper.UpdateNodeGraph(this.selfNodeGUI); } }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { //初始化group list if (e_groupList == null) { e_groupList = new ReorderableList(groupFilterPathDataList, typeof(string), false, false, true, true); e_groupList.onReorderCallback = ReorderFilterEntryList; e_groupList.onAddCallback = AddToFilterEntryList; e_groupList.onRemoveCallback = RemoveFromFilterEntryList; e_groupList.drawElementCallback = DrawFilterEntryListElement; // e_groupList.onCanRemoveCallback = (list) => // { // if (e_groupList.count <= 2) // { // return false; // } // // return true; // }; e_groupList.onChangedCallback = OnChangeList; e_groupList.elementHeight = EditorGUIUtility.singleLineHeight + 8f; e_groupList.headerHeight = 3; e_groupList.index = this.groupFilterPathDataList.Count - 1; } //添加输出节点 // if (incommingAssetGroup != null) // { // foreach (var ag in incommingAssetGroup.assetGroups) // { // this.AddOutputNode(ag.Key); // } // } GUILayout.Label("1.路径匹配:建议以\"/\"结尾,不然路径中包含这一段path都会被匹配上."); GUILayout.Label("2.分包路径原则上需要包含/Runtime/"); e_groupList.DoLayoutList(); }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { EditorGUILayout.HelpBox("My Custom Node: Implement your own Inspector.", MessageType.Info); editor.UpdateNodeName(node); GUILayout.Space(10f); //Show target configuration tab editor.DrawPlatformSelector(node); using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { // Draw Platform selector tab. var disabledScope = editor.DrawOverrideTargetToggle(node, m_myValue.ContainsValueOf(editor.CurrentEditingGroup), (bool b) => { using (new RecordUndoScope("Remove Target Platform Settings", node, true)) { if (b) { m_myValue[editor.CurrentEditingGroup] = m_myValue.DefaultValue; } else { m_myValue.Remove(editor.CurrentEditingGroup); } onValueChanged(); } }); // Draw tab contents using (disabledScope) { var val = m_myValue[editor.CurrentEditingGroup]; var newValue = EditorGUILayout.TextField("My Value:", val); if (newValue != val) { using (new RecordUndoScope("My Value Changed", node, true)){ m_myValue[editor.CurrentEditingGroup] = newValue; onValueChanged(); } } } } }
public override void OnInspectorGUI(NodeGUI node, AssetReferenceStreamManager streamManager, NodeGUIEditor editor, Action onValueChanged) { editor.UpdateNodeName(node); GUILayout.Space(10f); editor.DrawPlatformSelector(node); using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { var disabledScope = editor.DrawOverrideTargetToggle(node, m_myValue.ContainsValueOf(editor.CurrentEditingGroup), b => { using (new RecordUndoScope("Remove Target Platform Settings", node, true)) { if (b) { m_myValue[editor.CurrentEditingGroup] = m_myValue.DefaultValue; } else { m_myValue.Remove(editor.CurrentEditingGroup); } onValueChanged(); } }); using ( disabledScope ) { _exportDirectory = editor.DrawFolderSelector("Export Directory", "Select Output Folder", _exportDirectory, Application.dataPath + "/../", folderSelected => folderSelected); _hgAction = ( HGAction )EditorGUILayout.EnumPopup("HGAction", _hgAction); } } }