Hi, as in the title I am wondering about how to load and save objects. I am working on a survival game and we have a huge amount of trees on the map, we also use World Streamer 2. I am wondering about a solution that will save the state of the tree felled / and not. Currently I have created a simple array of bool values and will load / deload scene depending on the distance of the player. With OnSceneLoaded, it reads the values from the table and assigns a sequence to each tree, with OnSceneUnloaded it reads the actual state from the scene and saves it in the controller. My question is how else can it be done or will my solution be good for optimization? I am trying to use World Streamer 2 but so far my attempts have not been very successful.
Regardless of any middleware, the same rules apply for any loading/saving: it is an engineering decision driven by the economics of effort vs tradeoffs vs features desired.
Load/Save steps:
Don’t use the binary formatter/serializer: it is insecure, it cannot be made secure, and it makes debugging very difficult, plus it actually will NOT prevent people from modifying your save data on their computers.
When loading, you can never re-create a MonoBehaviour or ScriptableObject instance directly from JSON. The reason is they are hybrid C# and native engine objects, and when the JSON package calls new
to make one, it cannot make the native engine portion of the object.
Instead you must first create the MonoBehaviour using AddComponent() on a GameObject instance, or use ScriptableObject.CreateInstance() to make your SO, then use the appropriate JSON “populate object” call to fill in its public fields.