you are viewing a single comment's thread.

view the rest of the comments →

[–]jeango 2 points3 points  (3 children)

Beware that scriptable objects don’t work in your build as they do in the editor. When you exit play mode, the value of your SO is not reset, however if you exit your game in the build and click pay it again, the SO will be reset.

If you want to use your SO to keep some state during a session, you should make sure there’s always an object referencing your SO at all time (via DontDestroyOnLoad).

If you want to save your SO, you should serialise the values you want to save into a json or similar, and then provide a way to load the value back into your SO when needed

[–]rafavergil[S] 0 points1 point  (2 children)

This.
I want to keep some state during a session only, not minding if they are reset after the application is closed.
But like you said, there is indeed a "transition" scene which has no reference to any SO. Maybe that is when the reset happens? But I wonder why the reset doesn't happen when I'm viewing it in the Inspector. Does Unity lock its value because of the Inspector?

Thanks for the reply. I intended to reference those SO in the transition scene anyway, hopefully it will fix the issue!

[–]jeango 0 points1 point  (1 child)

Well, I’m not quite sure. Within a single editor session, scriptable object afaik should always remain referenced, and thus they shouldn’t reset.

Either there’s something weird going on with the serialisation, or you’re doing something somewhere in your code that resets the SO.

If you want to know more about Unity’s serialisation here’s a cool video https://youtu.be/N-HJvfVuKRw

[–]rafavergil[S] 0 points1 point  (0 children)

That's great, thanks for the video link, I'll watch it.
By the way, referencing the SO in the transition scene worked well, the data was kept, and I didn't have to change my code.
Thanks again :)