Project Base

        This webpage also aims to help my teammates to get familiar with features in "Project Base".

Instructions:

        This is my self-maintained template framework to help me efficiently manage similar basic features and bridge Unity engine with other Apps and plugins in every game.

        Two years ago, I decided to become a game developer. After finishing my first Unity project, "EllerbeCreek," I realized that many base features in one game can be reused in another game. Thus, I begin to develop my "Project Base"

        The "Project Base" is mainly composed by many singletons providing features containing EventSystem, ObjectPool, Inventory, UI manager(/3DUI), and so on. They are helpful for me in developing a small game project and getting familiar with the features that every game has. The project base can also be adjusted and extended to meet different demands in different games. As time goes on, I have added more than ten features to my project base. I am also trying not to add too many features that may be useless in some games.

        I believe this project base can significantly help my small game projects. And even though maybe I will switch to some other game engines, the experience can still help me quickly understand and get used to the new engines.

Below is a video to instruct my "Project Base" to my "E4E" teammates.

Current features:

  • SingletonManager
            A singleton using Generics, so that all other manamgers can inherent from this class to become a singleton. I also have another singleton manager_mono that is Unity's "MonoBehavior". That manager can be attached to gameobjects, so it is not safe. Thus singleton manager_mono is not suggested.

  • MonoManager
            As mentioned above, SingletonManager and its childs cannot use Unity MonoBehavior funtions, so this singleton creates a gameobject as controller to call mono functions for the Managers using delegate function (UnityAction / lambda function). It is the same idea as function pointers in C++. You can write your own momo functions or use lambda function as usual and call MonoManager. GetInstance(). xxxMonoFuntion(your mono function) to have the ability to use mono functions. However, because this singleton and its controller is only created when the first time called. You cannot call the onEnable() and start() mono function.

  • SceneManager
            Providing safe ways (sync / async) to load scenes. More functions like process bar can be easily added if needed.

  • ResourceManager
            Providing safe ways (sync / async) to load resources. The functions can also receive a delegate function (UnityAction / lambda function) to do things after the object is created. (For example, trigger an event telling others that it is cerated.)

  • InputManager (Old / New Unity Input System)
            Having two versions: one for old Unity input manager; one for new Unity Input System. Provide functions to enable and disable player inputs. And some more customized functions for different games.

  • EventCenter
            Using Listener Design Pattern, the EventCenter will call all the delegate functions (UnityActions / lambda functions)when an event is triggered. This is used to help us to decoupling our codes.

    Event Center Video for E4E

  • ObjectPool
            Built on top of resource manager. We can make our performance better using object pool if we frequently create and destroy a kind of object. We can manually release these memory after we don't need to create these objects.

    Object Pool Video Demo

  • UIManager (2D / 3D) (with inventory template)
            Currently, we are using 2D UI. It can easily show and hide panels as we want. It also receives a delegate function (UnityAction / lambda function) to do things after the panel is created. All the panels inherents the BasePanel templete, so that it can easily find objects on it and manamge events going through it. It also has a function to auto adjust canvas scale based on resolution.
            An inventory templete that can show a million items without lag is included.

    Inventory Video Demo 3DUI Demo

  • MusicManager (For Unity / FMod)
             The old version can manage background music and SFX using Uinty music mixer. It also provide functions like cross fading which is applied in Hooked In Space. We have a new one for FMod in Eye 4 Eye.

  • NarrativeManager (Yarn Spinner)
            A manager I am currently developing on to help designers to use Yarn Spinner easier in Unity Editor.

    Yarn Spinner Video Demo

  • GameStateManager
            Manage Game State.

  • MerticsManager
            A script provided by professer Richard's former colleagues in Naughty Dog. It can output any data we want to keep track of in playtest into a CSV file.

  • QualityManager
            A script provided by professer Richard to manage game quality.

  • DataManager
            Providing functions to read and write data through three different Unity path. Streaming is the files also sent in builds. Persistent is the files saved in this computer. Temporary is the files work like cache.

  • Hooked in Space applies my "Project Base" codes. For more information, check this link:         Hooked in Space

    E4E applies my "Project Base" codes. For more information, check this link:                                     Eye 4 Eye