I just spent a week writing some editor code that allows me to place spawn points around my map (in the editor).
The editor script, SpawnEditorWindow, resides in the Editor folder.
The manager for that script, called SpawnPointManager (resides outside Editor folder), is connected to an empty game object in my scene.
Also connected to that empty game object is another script called SpawnManager, which communicates with my in-game pauseMenu to spawn all the characters in the map at runtime.
SpawnManager draws information from SpawnPointManager, which in turn figure out how many spawns there are from SpawnEditorWindow (basically, from the editor slider bars).
So, on to my problem... This works beautifully inside the editor. I hook everything up, open the spawn editor window, adjust how many spawns I want, position them, etc.
However... when I go to run this, the List those spawns isn't initalized... or maybe it's reintialized, I don't know. Anyway, the List count is zero, thus no spawns exist.
What are my options here? How can I get this information into runtime? It's a List.
Make sure that all the relevant information is being stored in serialized objects in the scene. Information that is only in the editor window will be lost whenever the scripts reload.
Answer by PaxNemesis
Mar 16, 2012 at 03:37 PM
If you put your own custom class into a list it have to be Serialized not to disappear. So if you have a custom SpawnPoint script you need to use the [System.Serializable] attribute:
public class SpawnPoint : MonoBehaviour
// Stuff you want to do.
public SpawnPointManager : MonoBehaviour
public List<SpawnPoint> spawns = new List<SpawnPoint>();
// Do the rest of your stuff.
Thanks for the snippet and the explaination. Your tip about the custom class list was spot on. It's working now, thanks!
PS: Anyone reading this in the future may want to know that I had to delete the game objects and reattach my scripts after this for it to recognize it. Not sure why.
Answer by DaveA
Mar 16, 2012 at 07:16 AM
You could have a game object with a script containing a List and have your editor script Find it and copy to it.
That's actually how it's set up now. SpawnPointManager (records spawn points) and SpawnManager (what actually manages the spawning), are both attached to an empty game object. The editor script is finding the SpawnPointManager script and setting that game objects position (the spawn node) to what the slider in the editor window says. No dice.
Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.
The best place to ask and answer questions about development with Unity.
To help users navigate the site we have posted a user guide.
If you are a new user, check out our FAQ for more information.
If you are a moderator, see our Moderator Guidelines page.
We are making improvements to UA, see the list of changes.
For troubleshooting common problems with Unity 5.x Editor (including Win 10).
Answers and Comments
7 People are following this question.
What makes a prefab alter their variables at runtime?
Saving a spheremodel into a prefab
C# - Appropriate place for constants, variables, declarations, and initializations.
How can I set a GameObject variable on an instantiated object? (It always instantiates empty!)
how to create handles like editor gizmos in runtime?