Editor Window with settings and Asset Creation

Hi There

Is it possible to create an editor window that has some persistent settings that can then be used to create a new asset or modify an existing one?

My use case is that I am autogenerating some items in my RPG and previously I was doing this externally in a little c# console app that created a csv file and then I was using an editor menu script to read the csv and create and modify a List<> of item definitions on the selected unity object (containing the appropriate script). I’d rather make the items within unity as part of of an editor window and have some settings that I can modify that change the way in which the items are created. I then want that item setting data to persist between sessions.

I’m also toying with the EditorWindow creating a custom asset - maybe some XML - that I could then load at runtime.

I’ve been trying to use ScriptableObjects for my item generated data but I can’t get the UI to autogenerate for these scripts, I also don’t know whether they will persist (but I could probably write some XML out and read it back in). The added complexity here is that I need an array of objects, each object containing parameters for a set of objects I want to generate at the push of a button!

Presumably this kind of scenario can easily be solved and has to be solved for many extensions to the editor?

Thanks in advance!
H

Hey i guess the issue you have here is that your Spawn function is registered as callback to the input event but does not differentiate between buttondown, buttonheld and buttonup. iirc you can add a variable CallbackContext ctx as argument to your Spawn function. This will automatically be filled by unity when the function is called. In this context variable you can find some bool values for example: if(ctx.performed) //do something since this function was called due to a "Button down" event else if(ctx.canceled) //same but button up instead.

–

1 Answer

1

So my solution to this was to:

  1. Create a class subclassing SciptableObject for the editor data
  2. Create an EditorWindow subclassing EditorWindow
  3. In the static Init() method to Get/Create the window I checked for the existence of my EditorData and load if present or create if not
  4. Used EditorGUI.Popups to display the elements I could edit from the various Lists<> within my EditorData
  5. Displayed GUI below each Popup for the content of the selected item in the popup
  6. Continued with more EditorGUI.Popups and GUI below for detail (master/detail really)
  7. Buttons to add/edit/rename bits of EditorData
  8. A button to create the in-game asset, also a subclassed ScriptableObject

The above took me the best part of a day and I ended up with the image posted at the end.

However, I found this very painful to make, taking a day, and having worked with ScriptableObject subclasses I then elected to do the following:

  1. For the same EditorData subclass of ScriptableObject, I created an Editor subclass
  2. In OnInspectorGUI() I called the base method…
  3. …I then added GUI for a button to generate the in-game data
  4. I Added a menu item to create the EditorData
  5. I deleted the original editor

This gives me List<> editing just as I would get for any serialisable object as a public member of a script attached to a GameObject within Unity. It is perhaps not as elegant as the master detail scenario, but it took me about an hour or so to get it working and I wasn’t somewhat confused about how to style things.

I think for more advanced editing, that the EditorWindow might have some benefit, but the Editor solution is quicker to code and provides a very usable view of the data.

I hope this information helps someone else who wishes to have EditorData and generate real game data from that.

Item Generation Editor Window

Mhh Nice and clean. Is there a source of the Editor / EditorWindow around?

–