🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

Best way to store NPC definitions

Started by
3 comments, last by Kylotan 8 years, 8 months ago

Im currently Im using xml files containing the required info: stats, skills, inventory, etc, which are parsed on Start(). The method works, but I would like to know if Unity has some better way more artist friendly or integrated into the editor, to achieve the same result.

Advertisement

Im currently Im using xml files containing the required info: stats, skills, inventory, etc, which are parsed on Start(). The method works, but I would like to know if Unity has some better way more artist friendly or integrated into the editor, to achieve the same result.

What does the storage type have to do with editor or being artist friendly? You will *always* have to store your information in some sort of file system, be it binary, textual, be it xml, json or yaml.

You build your editor on top of that - you will just parse your files on loadup like normal, then you have editing tools that work on the generated entities (or some specific editor abstraction so you don't have to build in things like dynamic reload that you don't need in a regular game), and when saving, you serialize the entities to whatever target file format you choose.

If that didn't answer your question please rephrase it or give a more detailed explanation of what you exactly want to know.

EDIT: Uh, just nevermind, I didn't read in the title/realise that this thread is actually about data storage in unity, apologies.

No, Unity doesn't really offer much when it comes to data storage. I would argue that you want to keep it in some sort of external format such as XML so that you can make quick changes outside of the editor. But if you really wanted to keep it in the editor, this data could just be public variables on any sort of GameObject, which you'd edit in the inspector like any other. But there are many downsides - renaming fields may destroy the data, the data has to be in a type that C# can serialise (or you write a custom serialiser for it), adding and removing entries in a list is awkward, etc.

But, if you really want to be 'artist friendly' then sure, you could insist on having this stuff in the editor. You might want to write some custom inspectors or editor extensions to make it easy. As long as the end result is changing values on game objects that are in the scene, that's much the same as storing it in an external data file.

Thanks, I see that Im not so wrong in my approach. I wanted to confirm that there is no other better way, because I thought that asset files and ScriptableObject could be a way to store the info, and let the artist change the stored values directly in the editor, instead of editing an xml file.

Seems that if I want something more friendly Ill have to write my own editor extensions.

The ScriptableObject method will work, if you just want a serialisable lump of data that you can tweak in the editor. That makes it easy to edit simple values, but you still need to write the tooling for more complex edits. (Admittedly easier inside Unity than outside, usually.) I just find that I don't always want my data so tightly joined to Unity and in a form that can't be opened by a text editor or other tool.

This topic is closed to new replies.

Advertisement