For my Minor project I wanted to create a highly modifiable Item System that would allow for easy creation and editing of items.
For this system I took heavy inspiration from Minecraft and its use of the NBT data structure. This structure is a Tag based structure that can hold named and unnamed NBT tags (Named Binary Tag) of different data types.
An example weapon item is shown here on the right. Tags of different data types would hold all necessary information about this item. The game could display this data on an item card and use it for things like damage calculation for example.
I wanted to apply such a tag based system to a Unity environment and incorporate unity data types as well.
Editor window showing some data from an item with the name Longsword
During this project I didn't follow the usual iteration cycle. I started with primary focus on development as I already had a clear image in my head of what I wanted the tools to do and how they would look like. As an informal test to verify the functionality of the minimum viable product, I replaced the item system of an existing game project with mine to see if there were any major things to fix before I would run a user test. How this process went can be viewed here.
Once the minimum viable product was confirmed working I ran a usertest. I asked several other students to complete a small assignment using my tool. The collected data was compiled into a small list of things that the testers would change, add or remove. Using this information I created an updated MoSCoW priority list for the future.
The documents containing more detailed information about the usertest assignment, the compiled data from the usertest results and the updated MoSCoW list as a result from that usertest are displayed below.
This document is the actual document that was sent to the testers.
The test was primarily focused on usability of the tool as is and how hard it was to implement it in code. Because of this I mostly only provided information on how to import the tool into unity and not how to actually use the tool. An example script and item object was included however to at least give some information on how to get started in code.
A big thank you to all the people that helped me by doing the usertest and providing me with as much information as possible.
I have compiled the biggest and most important addition/change/removal suggestions in one document.
As stated in the document, it is split up in 3 sections: To Add, To Change and To Remove. Each suggestion has been given some context as to why the feature was requested and I have added some comments as to why a specific priority was chosen. Most important features were given a Must of course, followed by Should and Could. Suggestions that were marked with Won't will not be implemented as I deemed them either unnecessary changes or impossible within the current scope. The reasons as to why have also been added of course.
This is the MoSCoW list that was formed as a result from the usertest. Most of the requested features were for usability sake such as deleting something by pressing the Delete key. However I was glad to see someone else ask for the functionality of templates. Being able to create templates was the next big feature I would like to add to the tool as well and I think it would be an extremely powerful and useful addition.
I have created a design for an interface for how the template feature would be interacted with. I have also created a technical design to show how a feature like this would most likely work in the back-end. These designs are visible below this MoSCoW list.
Templates are something I would like to implement in the future. A feature like this could be useful to make preset data without having to copy paste an existing item object.
Templates would be created from scratch or an existing object.
The backend code structure of the template editor would mostly be the same as the Item editor. Because of how flexible the NBT data structure is, template data could be stored just like normal items. The data from a template could then just be copied over to an item object.
All template data could be stored in a dictionary that contains a template name and the root NBT tag of the template data structure. To actually use the template you would just retrieve the root of the template and overwrite or add it to the root of an item.
During development I focused primarily on developing the tool and seeing if it works. To test my implementation I will be using a premade game that I can later hook my tool into to test if it is a valid replacement that can work. The premade game I will be using is the result of the RPG game tutorial by brackeys and Sebastian Lague. Their tutorial videos can be found here:
Sebastian's side of the project
Github Repository of the final product
I have chosen for this particular project because it is open source and if I were to come stuck in the code because I don't fully understand something, I can always go watch the corresponding tutorial video to get a better idea of the code so I can continue.
Video showing what I had to change in code and the project to get my item system working in the Brackeys game.
Video showing me quickly doing the user-test assignment from importing the package to writing some code.