As the documentation for EditorUtility.IsPersistent says:
That's right, I'm creating a material from code, inside an EditorWindow class. How to make it persist and save to disk?
To clarify, I want to retain the variable reference upon closing Unity3D and opening the project again, I don't even know if it's possible.
I just followed instructions found here, and created the material on disk using AssetDatabase. Although the materials effectively are stored on Assets, the reference itself is lost, so I have to load them everytime in my EditorWindow. To illustrate this point, I uploaded 2 screenshots:
In this, we can see that the materials are loaded, and IsPersistent returns true for all.
I restart Unity3D, and now the references are gone! But the materials are still in the Assets folder.
Ah, nevermind. I was needing [SerializableField] on the variables.
I understand a little better how it works: EditorUtility.IsPersistent tells me if my objects is going to be erased next time Unity3D restarts, because it isn't stored in disk, it isn't stored anywhere! I can't really make it persistent without creating an asset. I was just creating the Material on the fly, but I never told Unity3D where to save it. So I couldn't expect him to save it automatically in a random position.
Seems like the way to go is to create an asset, be it hidden using HideFlags or not. Afer we create an asset, now Unity3D will be able to save the object in disk. The reference itself will be lost, unless you make the reference public, or put [SerializableField] attribute above the variable.
My mistake was to think that [SerializableField] would work even if I didn't create an asset. I guess it doesn't!
If anyone can tell me if I'm right with this, I would appreciate it.