Home

Awesome

Unity Data Manager

MIT license Unity GitHub release GitHub downloads

Unity Data Manager (UDM)

Used to create, manage and load data via. files on the system easily and permanently over multiple game sessions.

Contents

Introduction

A lot of games need to save data between multiple game runs, in a small scope this can be done with Unitys PlayerPrefs system, if the scope rises tough this small and easily integrated Data Manager can help you create, manage and load data via. files on the system easily and permanently over multiple game sessions.

Unity Data Manager implements the following methods consisting of a way to:

For each method there is a description on how to call it and how to use it correctly for your game in the given section.

Installation

Required Software:

The Data Manager itself is version independent, as long as the JsonUtility object already exists. Additionally the example project can be opened with Unity itself or the newest release can be downloaded and exectued to test the functionality.

If you prefer the first method, you can simply install the shown Unity version and after installing it you can download the project and open it in Unity (see Opening a Project in Unity). Then you can start the game with the play button to test the Data Managers functionality.

To simply use the Data Manager in your own project without downloading the Unity project get the two files in the Example Project/Assets/Scritps/ called DataManager.CS and FileData.CS or alternatively get the file from the newest release (may not include the newest changes) and save them in your own project. Then create a new empty gameObject and attach the DataManager.CS script to it.

Documentation

This documentation strives to explain how to start using the Data Manager in your project and explains how to call and how to use its publicly accesible methods correctly.

Reference to Data Manager Script

To use the Data Manager to start creating/reading files outside of itself you need to reference it. As the Data Manager is a Singelton this can be done easily when we get the instance and save it as a private variable in the script that uses the Data Manager.

private DataManager dm;

private void Start() {
    dm = DataManager.instance;
    // Calling Function in DataManager
    dm.CreateNewFile(saveFile);
}

Alternatively you can directly call the methods this is not advised tough, if it is executed multiple times or you're going to need the instance multiple times in the same file.

private void Start() {
    // Calling Function in DataManager
    DataManager.CreateNewFile(saveFile);
}

Possible Errors

IDCONSTANTMEANING
0OKMethod succesfully executed
1INVALID_ARGUMENTCan not both encrypt and compress a file
2INVALID_PATHGiven path does not exists in the local system
3NOT_REGISTEREDFile has not been registered with the create file function yet
4FILE_CORRUPTEDFile has been changed outside of the environment, accessing might not be save anymore
5FILE_ALREADY_EXISTSA file already exists at the same path, choose a different name or directory
6FILE_DOES_NOT_EXISTThere is no file with the given name in the given directory, ensure it wasn't moved or deleted
7FILE_MISSING_DEPENDENCIESTried to compare hash, but hasing has not been enabled for the registered file

Public accesible methods

This section explains all public accesible methods, especially what they do, how to call them and when using them might be advantageous instead of other methods. We always assume DataManager instance has been already referenced in the script. If you haven't done that already see Reference to Data Manager Script.

Create New File method

What it does: Creates and registers a new file with the given properties, writes the given text to it and returns an DataError (see Possible Errors), showing wheter and how creating the file failed.

How to call it:

string fileName = "save";
string content = "";
string directoryPath = Application.persistentDataPath;
string fileEnding = ".txt";
bool encryption = false;
bool hashing = false;
bool compression = false;
DataManager.DataError err = dm.CreateNewFile(fileName, content, directoryPath, fileEnding, encryption, hashing, compression);
if (err != DataManager.DataError.OK) {
    Debug.Log("Creating file failed with error id: " + err);
}
else {
    Debug.Log("Creating file succesfull");
}

Alternatively you can call the methods with less paramters as some of them have default arguments.

string fileName = "save";
DataManager.DataError err = dm.CreateNewFile(fileName);
if (err != DataManager.DataError.OK) {
    Debug.Log("Creating file failed with error id: " + err);
}
else {
    Debug.Log("Creating file succesfull");
}

When to use it: When you want to register and create a new file with the system so it can be used later.

Try Read From File method

What it does: Reads the content of a registered file and returns it as plain text, as well as an DataError (see Possible Errors), showing wheter and how creating the file failed.

How to call it:

string fileName = "save";
DataManager.DataError err = dm.TryReadFromFile(fileName, out string content);
if (err != DataManager.DataError.OK) {
    Debug.Log("Reading file failed with error id: " + err);
}
else {
    Debug.Log("Reading file succesfull with the content being: " + content);
}

When to use it: When you want to read the content of a registered file and additionaly if enabled check and return if the file was modified outside of the environment or not.

Change File Path method

What it does: Changes the file location of a registered file to the new directory and returns an DataError (see Possible Errors), showing wheter and how changing the file path failed.

How to call it:

string fileName = "save";
string directory = Application.persistentDataPath;
DataManager.DataError err = dm.ChangeFilePath(fileName, directory);
if (err != DataManager.DataError.OK) {
    Debug.Log("Changing file path failed with error id: " + err);
}
else {
    Debug.Log("Changing file path succesfull to new directory: " + directory);
}

When to use it: When you want to move the file location of a registered file.

Update File Content method

What it does: Updates the content of a registered file, completly replacing the current content and returns an DataError (see Possible Errors), showing wheter and how replacing the file content failed.

How to call it:

string fileName = "save";
string content = "Example";
DataManager.DataError err = dm.UpdateFileContent(fileName, content);
if (err != DataManager.DataError.OK) {
    Debug.Log("Updating file content failed with error id: " + err);
}
else {
    Debug.Log("Updating file content succesfull to the new content: " + content);
}

When to use it: When you want to replace the current content of a registered file with the newly given content, so that the old content is overwritten.

Append File Content method

What it does: Appends the given content to a registered file, keeping the current content and returns an DataError (see Possible Errors), showing wheter and how appending to the file content failed.

How to call it:

string fileName = "save";
string content = "Example";
DataManager.DataError err = dm.AppendFileContent(fileName, content);
if (err != DataManager.DataError.OK) {
    Debug.Log("Appending file content failed with error id: " + err);
}
else {
    Debug.Log("Appending file content succesfull, added content being: " + content);
}

When to use it: WHen you want to append the given content the current content of a registered file, so that the old content still stays in the file.

Check File Hash method

What it does: Compares the current hash with the last expected hash and returns and returns an DataError (see Possible Errors), showing wheter and how reading the file hash failed, or if the file hash is different than expected.

How to call it:

string fileName = "save";
DataManager.DataError err = dm.CheckFileHash(fileName);
if (err ==  DataManager.DataError.OK) {
    Debug.Log("Hash is as expected, file has not been changed outside of the environment");
}
else if (err == DataManager.DataError.FILE_CORRUPTED) {
    Debug.Log("Hash is different than expected, accessing might not be save anymore");
}
else {
    Debug.Log("Checking file hash failed with error id: " + err);
}

When to use it: WHen you want to check if the file was changed outisde of the environment by for example the user editing the file from the file explorer.

Delete File method

What it does: Deletes an registered file and unregisters it and returns an DataError (see Possible Errors), showing wheter and how deleting the file failed.

How to call it:

string fileName = "save";
DataManager.DataError err = dm.DeleteFile(fileName);
if (err != DataManager.DataError.OK) {
    Debug.Log("Deleting file failed with error id: " + err);
}
else {
    Debug.Log("Deleting file succesfull");
}

When to use it: When you want to delete a file and unregister it from the environment, if it is for example no longer needed.