Почему при попытке сделать вертикальную прокрутку в окне редактора я получаю исключение InvalidOperationException: стек пуст.? - PullRequest
1 голос
/ 15 мая 2019

То, что я пытаюсь сделать, это добавить автоматическую вертикальную прокрутку при слишком большом раскрытии окна редактора:

Если, например, на скриншоте это оригинальный размер окна редактора:

Editor Window original size

При нажатии, например, «Разговоры» и свертывании его, я хочу сделать это с помощью вертикальной прокрутки:

Я могу продолжать растягивать окно с помощьюмышь, но я хочу использовать прокрутку в этом случае вместо:

Editor Window collapsed down stretched with the mouse dragging down

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;

public class ConversationsEditorWindow : EditorWindow
{
    [MenuItem("Window/Editor Window Test")]
    static void Init()
    {
        // Get existing open window or if none, make a new one:
        ConversationsEditorWindow window = (ConversationsEditorWindow)EditorWindow.GetWindow(typeof(ConversationsEditorWindow));
    }

    void OnGUI()
    {
        GameObject sel = Selection.activeGameObject;
        ConversationTrigger targetComp = sel.GetComponent<ConversationTrigger>();

        if (targetComp != null)
        {
            EditorGUILayout.BeginVertical();
            var editor = Editor.CreateEditor(targetComp);
            var tar = editor.targets;
            editor.OnInspectorGUI();
            EditorGUILayout.EndScrollView();
            EditorGUILayout.EndVertical();
        }
    }
}

Сообщение об исключении немного длинное: исключение находится на линии27:

EditorGUILayout.EndScrollView();

InvalidOperationException: стек пуст.System.Collections.Stack.Peek () (at: 0) UnityEngine.GUI.EndScrollView (System.Boolean handleScrollWheel) (в C: /buildslave/unity/build/Modules/IMGUI/GUI.cs: 1481) UnityEngine.GUILayout.EndScrollView (System.Boolean handleScrollWheel) (в C: /buildslave/unity/build/Modules/IMGUI/GUILayout.cs: 387) UnityEditor.EditorGUILayout.EndScrollView () (в C: / buildslave / unity / build / Editor / Mono /EditorGUI.cs: 9203) ConversationsEditorWindow.OnGUI () (в Assets / Editor / ConversationsEditorWindow.cs: 27) System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.BinderПараметры System.Object [], культура System.Globalization.CultureInfo) (при: 0) Rethrow as TargetInvocationException: Исключение было сгенерировано целью вызова.System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, параметры System.Object [], System.Globalization.CultureInfo culture) (по адресу: 0) System.Reflection.MethodBase.Invoke (параметры System.Object obj, System.Object []) (в: 0) UnityEditor.HostView.Invoke (имя метода System.String, System.Object obj) (в C: / buildslave / unity / build / Editor /Mono / HostView.cs: 342) UnityEditor.HostView.Invoke (имя метода System.String) (в C: /buildslave/unity/build/Editor/Mono/HostView.cs: 336) UnityEditor.HostView.InvokeOnGUI (UnityEngine.Rect onGU, UnityEngine.Rect viewRect) (в C: /buildslave/unity/build/Editor/Mono/HostView.cs: 310) UnityEditor.DockArea.DrawView (UnityEngine.Rect viewRect, UnityEngine.Rect dockAreaRect, System.Boolean customBder.Булево плавающее окно, System.Boolean isBottomTab) (в C: /buildslave/unity/build/Editor/Mono/GUI/DockArea.cs: 361) UnityEditor.DockArea.OldOnGUI () (в C: / buildslave / unity / build / Editor / Mono / GUI / DockArea.cs: 320) UnityEngine.Experimental.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt, UnityEngine.Matrix4x4 worldTransform, UnityEngine.Rect отсечениеRect, сборка)./unity/build/Modules/UIElements/IMGUIContainer.cs:244) UnityEngine.GUIUtility: ProcessEvent (Int32, IntPtr)

1 Ответ

1 голос
/ 15 мая 2019

Стек пустое сообщение дает подсказку, что происходит - вы делаете вызов: EditorGUILayout.EndScrollView (); (пытается выскочить из стека графического интерфейса) без предварительного вызова BeginScrollView ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...