GODS: Globally Observable Data Structures

Revolutionize your Unity development with GODS. Streamline your project architecture, decouple objects, dramatically improve code modularity, and boost productivity.

Get it here: GODS: Globally Observable Data Structures | Utilities Tools | Unity Asset Store

Streamline Your Unity Development

By leveraging globally accessible observable variables, lists, hash sets and events, GODS allows you to easily manage and respond to changes in your game’s data without the need for complex object references or tightly coupled code.

Main features

  • Observable Variables, Lists, and Hash Sets: Globally accessible data structures that trigger events when their values change.
  • Observable Game Events and Listeners
  • Scriptable Object-Based Architecture: Decouple systems and reduce scene dependencies for a more modular and maintainable codebase.
  • Reactive Event System: Automatically respond to data changes, enabling dynamic and responsive gameplay.
  • Intelligent Tagging System: Tag Observables for filtering and reset purposes.
  • Reference Tracking: Easily investigate which objects are listening for events at runtime.
  • Flexible Save Management: Supports multi-user save slots, auto/manual saving, encryption, and screenshots.
  • Customizable: Easily generate new observable types and extend the system to fit your project needs.

Designer Friendly

With GODS, you can react to variable, list, or hashset changes in real-time, right from the inspector. Custom property drawers feature intuitive lightning bolt symbols, allowing you to easily enable OnValueChanged and OnSaveLoaded events. No coding required—just click to connect your logic and bring your game to life!

Save Slot System

Say goodbye to clunky save systems. GODS introduces a flexible and secure save/load system with multi-user Save Slots, supporting both manual and automatic saves. Enjoy peace of mind with built-in encryption (optional) and even capture screenshots at save points, making your game experience seamless and user-friendly.

Documentation

The asset includes a well documented User Guide with descriptions, examples, code documentation, troubleshooting and more.

Full Source Code Access

GODS comes with complete source code, allowing you to fully customize and extend the tool to meet the unique needs of your project. Whether you want to tweak functionality or integrate new features, you’ll have all the resources at your disposal for seamless adaptation.

Take your Unity projects to the next level. Start using GODS today and experience the difference in your development workflow!

Get it here: GODS: Globally Observable Data Structures | Utilities Tools | Unity Asset Store

Tutorial Videos on Youtube

Significant time and effort have gone into developing this project to simplify the workflow for us Unity developers. Your thoughts and discussions about this tool are encouraged in the comments below.

Cheers!

The 1.2 update gave me 2 errors related to “Directory not found exception,” which resolved to 1 after exiting and restarting the editor.

It will clear when the Clear button is pressed in the Console.

I’m on Unity 6000.0.23f1.

Error report

DirectoryNotFoundException: Could not find a part of the path “E:_SteamGame\IMPP1\Library\SubAssetEssentialsCache\37470f489ccf0984588a2bb8409fad2d”.
System.IO.FileStream…ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) (at <321eb2db7c6d43ea8fc39b54eaca3452>:0)
System.IO.FileStream…ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.IO.FileOptions options) (at <321eb2db7c6d43ea8fc39b54eaca3452>:0)
(wrapper remoting-invoke-with-check) System.IO.FileStream…ctor(string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,int,System.IO.FileOptions)
System.IO.StreamWriter…ctor (System.String path, System.Boolean append, System.Text.Encoding encoding, System.Int32 bufferSize) (at <321eb2db7c6d43ea8fc39b54eaca3452>:0)
System.IO.StreamWriter…ctor (System.String path) (at <321eb2db7c6d43ea8fc39b54eaca3452>:0)
(wrapper remoting-invoke-with-check) System.IO.StreamWriter…ctor(string)
SubAssetEssentials.ReferenceCacher.WriteCache (System.String guid, System.String parents, System.String children) (at Assets/GODS Observables/Sub Asset Essentials/Scripts/Editor/Referencing/ReferenceCacher.cs:290)
SubAssetEssentials.ReferenceCacher.ProcessImportedAssets (System.String importedAssets) (at Assets/GODS Observables/Sub Asset Essentials/Scripts/Editor/Referencing/ReferenceCacher.cs:72)
SubAssetEssentials.ReferenceCacher.OnPostprocessAllAssets (System.String importedAssets, System.String deletedAssets, System.String movedAssets, System.String movedFromAssetPaths) (at Assets/GODS Observables/Sub Asset Essentials/Scripts/Editor/Referencing/ReferenceCacher.cs:58)
System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object parameters, System.Globalization.CultureInfo culture) (at <321eb2db7c6d43ea8fc39b54eaca3452>:0)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object parameters, System.Globalization.CultureInfo culture) (at <321eb2db7c6d43ea8fc39b54eaca3452>:0)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object parameters) (at <321eb2db7c6d43ea8fc39b54eaca3452>:0)
UnityEditor.AssetPostprocessingInternal.InvokeMethod (System.Reflection.MethodInfo method, System.Object args) (at <1f8babe234e540299e4f7387cdc20cd8>:0)
UnityEditor.AssetPostprocessingInternal.PostprocessAllAssets (System.String importedAssets, System.String addedAssets, System.String deletedAssets, System.String movedAssets, System.String movedFromPathAssets, System.Boolean didDomainReload) (at <1f8babe234e540299e4f7387cdc20cd8>:0)
UnityEditor.AssetDatabase:SaveAssets()
GODSObservables.GODSIconSetUtilities:RestoreIconsForAllInstances() (at Assets/GODS Observables/Scripts/Runtime/Util/GODSIconSetUtilities.cs:56)
UnityEditor.EditorApplication:Internal_CallDelayFunctions()

Hi @hopeful

thank you for reporting this issue, this was an oversight by me.

It is a non critical error but an annoying one. We first need to make sure the cache directory exists before we write to it. So adding this line:

EnsureDirectoryExists(Path.Combine(ReferenceCacher.cachePath, guid));

to the WriteCache method in ReferenceCacher.cs will fix the issue. I will push a hotfix update asap.

Also, when updating from 1.0.0 it is a good idea to delete the whole “GODS Observables” folder beforehand to avoid any compile errors. As always when updating, backup your project first - just in case.

Cheers, Tobias

Edit: The fix should already be live. New version: 1.2.01

1 Like