I'm creating an editor script that does two things when you click on the "Export" button on the editor
1. build an asset bundle
2. upload asset bundle to Amazon
It successfully finishes building the asset bundle, but then it triggers a UnityEditor error and cannot make it onto step 2.
Here is the error I get:
InvalidOperationException: Operation is not valid due to the current state of the object
System.Collections.Stack.Peek () (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections/Stack.cs:321)
UnityEngine.GUILayoutUtility.EndLayoutGroup () (at C:/buildslave/unity/build/artifacts/EditorGenerated/GUILayoutUtility.cs:223)
UnityEngine.GUILayout.EndVertical () (at C:/buildslave/unity/build/artifacts/EditorGenerated/GUILayout.cs:266)
UnityEditor.EditorGUILayout.EndVertical () (at C:/buildslave/unity/build/Editor/Mono/EditorGUI.cs:5923)
UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor editor, Int32 editorIndex, Boolean forceDirty, System.Boolean& showImportedObjectBarNext, UnityEngine.Rect& importedObjectBarRect, Boolean eyeDropperDirty) (at C:/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:1107)
UnityEditor.InspectorWindow.DrawEditors (UnityEditor.Editor[] editors) (at C:/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:907)
UnityEditor.InspectorWindow.OnGUI () (at C:/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:332)
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222)
It seems to be trying to update UnityEditor GUI elements and errors out trying to access outside the bounds of a stack.
Here is the core of my code.
In Editor/ExportToAmazonEditor.cs:
using UnityEngine;
using UnityEditor;
using System.IO;
[CustomEditor(typeof(ExportToAmazonScript))]
public class ExportToAmazonEditor : Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
if (GUILayout.Button("Export!"))
{
string amazonExportDir = string.Join(Path.DirectorySeparatorChar.ToString(), new string[]{"Assets", "Scenes", "amazonExportTmpFiles"}) +
Path.DirectorySeparatorChar;
string sceneFile = amazonExportDir + "Volcano.unity";
string bundleFile = amazonExportDir + "Volcano.unity3d";
BuildPipeline.BuildStreamedSceneAssetBundle(new string[]{sceneFile}, bundleFile, BuildTarget.StandaloneWindows);
Debug.Log("done");
}
}
}
In ExportToAmazonScript.cs:
using System;
using UnityEngine;
public class ExportToAmazonScript : MonoBehaviour
{
}
I have confirmed that the BuildStreamedSceneAssetBundle call is causing the error. If I comment that line out, I don't get that error. Another interesting thing is that if I move that call to be triggered by a MenuItem instead of by that Button, then I also do NOT get that error. (But sadly that is not a viable option because the MenuItem requires functions and variables to be static and that messes with the Amazon SDK in step 2.)
The only remotely similar problem I've seen is this:
http://answers.unity3d.com/questions/852155/invalidoperationexception-operation-is-not-valid-d-1.html
I've already tried resetting my Unity editor layout and restarting and that did not help.
Can anyone tell me what is causing that error and how I can fix it? Thanks!
↧