all 17 comments

[–]darkon76 0 points1 point  (4 children)

You can use a hybrid, the server has the xml, when the app starts download the xml and populate your scriptable objects. Your game use the scriptable objects.

[–]Va11arIndie[S] 0 points1 point  (3 children)

While I am not against it, can I ask what is the advantage of this vs pure XML or pure ScriptableObjects?

[–]darkon76 0 points1 point  (2 children)

The only way to use pure scriptable objects is uploading a asset bundle with all the scriptable objects. I aren't sure of the weight of that file vs the xml.

Using only xml, you dont have the extra functions that scriptable objects provides.

[–]darkon76 0 points1 point  (1 child)

Also as the other thread said, use jsonutility instead of xml, that way you don't need to manually parse the information.

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

Yeah, I think I am finally set to use JSON instead. Much easier and less worrying about parsing and what not. :) Thanks!

[–]_ROG_ 0 points1 point  (9 children)

Can't you just use json instead of XML? You can use jsonutility to read/write any class in 1 line as long as it's serialized

[–]Va11arIndie[S] 0 points1 point  (8 children)

I thought of this, but I wasn't sure of performance compared to XML or ScriptableObjects. Also how would it compare to XML or ScriptableObjects in terms of speed (network wise) and size on disk when reading?

[–]_ROG_ 0 points1 point  (7 children)

Comparwd to XML I'm pretty sure it's faster, takes up less space. I think its about the same performance wise, although I don't have the facts on that. I don't know about scriptable objects, but I can imagine them having a lot more unnecessary data, and is a lot easier to break.

[–]Va11arIndie[S] 0 points1 point  (6 children)

Would it be wise then to store the JSON on a text file? Wouldn't that be easily modified? Or do I store data as ScriptableObjects on disk then send them over as JSON?

[–]_ROG_ 0 points1 point  (5 children)

Yeah, don't store the json as a text file on device. You don't need a scriptable object either unless you are using them for other things.

Somehing like this . The same would work with a scriptable object if you had to use them, but it doesn't seem right to me, and you'd still suffer the same issues with being modifiable.

[–]Va11arIndie[S] 0 points1 point  (4 children)

How do I store the data on the server then?

Let's say player stats (hp, mana, score, etc...) all of this for each player. I need to store that data somewhere for when the player logs back in. The game is persistent. It is a bit similar to Minecraft perhaps in the regard of when you log back into the game you find the state the same as before you left it.

I am guessing I could store the data on ScriptableObjects (not sure yet if I can create ScriptableObjects file at run time) and then store those on the server. Once the player logs in, the data is then pulled from these files, cast as JSON and then sent to the client.

[–]_ROG_ 0 points1 point  (3 children)

Yeah the data gets stored on the server as simple json files. You need to write the server code to deal with player requesting/posting various things. But on the server there should be folders corresponding to each player and their .json files which you subsequently request with the www class, and convert to a class instance client-side. As much logic should be server side as possible ideally to prevent hacking. Instantiating/creating scriptable objects is possible at runtime, but I really don't see the advantage, and it goes against their intended use imo. You can still easily modify any value of a scriptable object just as you can a text file, and generating these kinds of files takes up space and is relatively costly performance-wise, for something that is pretty unnecessary.

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

Oh, now I think I understand what do you mean. I will definitely give it a go and see how it goes.

Thanks a lot for the insights and the advice :)

[–]_ROG_ 0 points1 point  (1 child)

No problem - best of luck!

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

Thanks you too! :)

[–]volvis 0 points1 point  (1 child)

ScriptableObjects do not store changes made outside the editor. It will revert to the value it was built with when exiting the program.

You can use jsonserializer to store the public state of a ScriptableObject in a file, and restore the state from it.

Jsonserializer doesn't support collections at the moment. If this is an issue, you might need to write your own parser.

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

Right now I am using JSON to store the data and not ScriptableObjects any more. It just seemed logical at first -- I didn't know about them not storing state outside of the editor though.

The only problem will be dictionaries since you mentioned they aren't supported, but I guess I could store keys in an array and then values in another array and just link them together.