Saving the game state

Our game currently doesn't save any state, but until now we haven't needed it. The player's location was directly accessed from their device's GPS, and the monsters around them were spawned by our makeshift monster service. However, we want our players to hunt down, catch, and collect monsters or other items as part of the game. In order to do this, we need to provide persistent storage in the form of a database. Otherwise, when the player turned off the game, all their collected items would be gone. Games running on a mobile device are particularly susceptible to getting shut down or crashing inadvertently, which means we need a robust storage solution.

If you do a search on the Unity Asset store for database, you will see plenty of free and paid options. Yet, we will use an open source alternative from GitHub called SQLite4Unity3d available at https://github.com/codecoding/SQLite4Unity3d. This package is an excellent wrapper for SQLite, a great cross-platform relational database. In fact, there are many different versions of SQLite database wrappers available on the Asset store. What puts this software above the others are a few reasons listed here:

  • Open source: This can be bad or good. In this case, it is good because it is free and still supported. Not all open source is free or well supported, so you have to be careful.

    Note

    UnityList at http://unitylist.com is a great search engine for more open source projects related to Unity.

  • Relational Database: SQLite is lightweight relational database that also happens to be open source and community driven. The relational database is a good option for us because it supports data relations and provides a well-known data definition language. The language used to query and define data in this database is called a SQL, hence the name. Fortunately, we won't have to have to get into SQL as the SQLite4Unity3d wrapper manages that for us.

    Note

    SQLite community page is available at https://sqlite.org/.

  • Object/Entity Data Model: An object or entity data model allows a developer to manage data in the database through objects rather than directly writing a secondary language, such as SQL. The SQLite4Unity3d wrapper provides an excellent implementation of a code-first (classes first) object relational mapping or entity-defined data model. A code-first approach will allow us to define our objects first, and then, at runtime, dynamically construct our database to fit our object definitions. Not to worry if this all sounds foreign; we will get into the details of this shortly.

    Note

    Table first is the opposite of code/classes first approach used to define entities. The database tables are defined first and then the code/classes are derived through a build process. Table first is preferred for those that want a rigorous definition of data.

Now that we have the background out of the way, let's get our hands dirty by loading the database wrapper and other code that we need. Fortunately, the database wrapper and code are all packaged in a single-asset import. Perform the following to import the asset package:

  1. Open the Unity editor and continue where we left the project at the end of Chapter 5, Catching the Prey in AR, with the Catch scene loaded. If you have jumped ahead to this chapter, load the project from the downloaded source folder: Chapter_6_Start.
  2. From the menu, select Assets | Import Package | Custom Package...
  3. When the Import package... dialog opens, navigate to the downloaded source code folder Chapter_5_Assets and select the Chapter5_import1.unitypackage file. Then, click on Open to import the file.
  4. After the Import Unity Package loads, just verify what is being imported and then click on the Import button. This will import some new and updated scripts as well as some plugins that manage SQLite integration.
  5. From the Project window, select the Assets/FoodyGo/Plugins/x64 folder. Inside the folder, select the sqlite3 plugin. Then, in the Inspector window, confirm that the plugin is configured to deploy to your device. The following is a screenshot shows an example for Android, but it would be the same even for iOS:

    Saving the game state

    Sqlite3 import settings for Android

  6. If you need to make any changes in the panel, click on the Apply button at the bottom. This will save and apply the changes.

Importing the package and setting up the plugins were fairly straightforward. We will test whether everything is configured correctly in the next section.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.14.6.194