- Home /
Enum Value Changing At Runtime On A Prefab
Greetings Unity!
So I have an issue with an enum that I am setting via an editor window I'm working on.
Here's the code I'm using to change it:
if (GUI.Button (new Rect (windowWidth / 2 + 120 + (buffer * 5), 265, 32, 32), offFade, editorSkin.GetStyle ("Button")))
collectionToShow.fadeMode = AudioManager.fadeStyle.Off;
Viewing the public enum state, it does appear to change to fadeStyle.Off.
However, when I click the play button, it jumps to a different one.
The first thing I thought was "Oh, I must have a Start() or Awake() function that is setting it somehow." But nope. The reason I know this isn't the case is that when I manually set the enum value (by clicking the drop-down menu and clicking on it myself instead of setting it with the editor window button) it doesn't change when I click play.
Similarly, this happens when I change a float too! What's going on here? Why don't my other scripts take my editor script seriously? I've tried setting the scene dirty and saving it, but no luck.
Thanks!
Answer by Addyarb · Nov 08, 2015 at 04:55 PM
Found an answer to this within this thread.
I'm not sure if this only happens with prefabs, or if it happens on regular GameObjects - but I'm assuming prefabs.
Apparently setting values within an editor window is seen as setting them at runtime (when it's done on a prefab), and it discards the changes internally immediately after changing the value. However, it still serializes the proper value on the public enum/float fields.
The way to handle this is to use the prefab utility (see the link for more). You essentially just have to click the "Apply" button on a prefab via script.
Your answer
Follow this Question
Related Questions
UIElements EnumField data binding 0 Answers
Reordable List in a window 1 Answer
Editor GUI Foldout header style customization 0 Answers
Is it possible to detect drag and drop in hierachy window? 0 Answers
Custom Editor - Is there any way to detect whether the user is in Prefab editing mode? 1 Answer