検証環境
Unity 2018.1.6f1
現象
UnityのGUI.Window、GUILayout.WindowのパラメータGUI.WindowFunctionにdelegate登録したメソッド内で
GUI.BeginScrollView、GUILayout.BeginScrollViewを使っていると、
EditorGUILayout.ColorFieldだけ
クリックしたときにエラー(You are pushing more GUIClips than you are popping)が出る。
ObjectFieldやCurveFieldではエラー出ない。
原因
今回の場合については不明。
同様のエラー内容の場合、多くの原因がスコープの閉じ忘れ。
Begin~、End~
のような対になるべきメソッドが条件分岐やreturnなどで実行されないパターンで発生する。
実験
サンプルコードを実行してカラー選択をクリックする。
カラー選択ダイアログは表示され、処理も行われるようだが、
GUI Error: You are pushing more GUIClips than you are popping. Make sure they are balanced) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
のエラーメッセージが表示される。
サンプルコード
ColorFieldTestWindow .cs
using UnityEngine; using UnityEditor; public class ColorFieldTestWindow : EditorWindow { Color color; Texture2D tex2D; AnimationCurve ac = new AnimationCurve(); Vector2 sPos; Rect windowRect = new Rect(10f, 10f, 280f, 150f); [MenuItem("Window/ColorFieldTestWindow")] private static void OpenWindow() { ColorFieldTestWindow window = EditorWindow.CreateInstance<ColorFieldTestWindow>(); window.Show(); } void OnEnable() { ac = new AnimationCurve(); } private void OnGUI() { BeginWindows(); windowRect = GUI.Window(0, windowRect, WindowCallBack, "Parameter"); EndWindows(); } private void WindowCallBack(int id) { sPos = GUILayout.BeginScrollView(sPos); color = EditorGUILayout.ColorField("Color Field2", color); GUILayout.Space(50); tex2D = EditorGUILayout.ObjectField(tex2D, typeof(Texture2D), false) as Texture2D; GUILayout.Space(50); ac = EditorGUILayout.CurveField(ac); GUILayout.EndScrollView(); } }
結論
解決していないので原因は不明。 WindowCallBackのようなコールバックメソッド内ではなく、EditorWindow.OnGUIで GUILayout.BeginScrollView~GUILayout.EndScrollViewの中に記述する分には問題なし。
参考
https://answers.unity.com/questions/774863/gui-error-you-are-pushing-more-guiclips-than-you-a-5.html
https://www.facebook.com/groups/unityuserj/permalink/821541751239100/