# Intro

<div align="left" data-full-width="false"><figure><picture><source srcset="https://3435007275-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fc9UAjX7t2Dyuj3l9jfRm%2Fuploads%2FNQcjjDlOwsCkvPPdoVh2%2FSOTools_dark.png?alt=media&#x26;token=e821b170-ff0f-4a17-87ad-b99cc447b2f5" media="(prefers-color-scheme: dark)"><img src="https://3435007275-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fc9UAjX7t2Dyuj3l9jfRm%2Fuploads%2FBij080UsXRRZO6IBlvVM%2FSOTools.png?alt=media&#x26;token=4bb50eab-454c-4af3-8895-ea3c3d9e42f1" alt=""></picture><figcaption></figcaption></figure></div>

:link: Available on the [**Unity Asset Store**](https://bit.ly/sotools_as)

ScriptableObject Tools is a collection of tools to structure gameplay using the power of ScriptableObjects. By using ScriptableObjects as the glue between different parts of the game, you can:

* Solve cross-scene communication.
* Create gameplay that is possible to test in isolation, improving iteration time.
* Allow designers to tweak gameplay in the editor, even at runtime.

All of this using consolidated Unity workflows - which means they will work on all platforms, and with future Unity versions.

## Main components

ScriptableObject Tools is made of different components. You can find the documentation for each one of them in individual pages below.

[Shared Values](https://tools.continis.io/scriptable-object-tools/components/sharedvalues)

They hold one value, and can be used to describe a primitive value (int, float, bool, etc.) that is shared among different objects.

[Runtime Anchors](https://tools.continis.io/scriptable-object-tools/components/runtimeanchors)

They hold a reference to a Unity component that is only available at runtime. Once the game enters Play Mode, scripts can write and read from the value.

[Events](https://tools.continis.io/scriptable-object-tools/components/events)

Events with zero or more arguments, that can be used as channels of communication between objects.

## Utilities

These are base classes that you can derive from.

[ManagedScriptableObject](https://tools.continis.io/scriptable-object-tools/utilities/managedscriptableobject)

A base type to create a ScriptableObject that can reset itself when exiting Play Mode, thus making it compatible with Unity's Enter Play Mode Options (and specifically with "No domain reload").

[DescriptiveScriptableObject](https://tools.continis.io/scriptable-object-tools/utilities/descriptivescriptableobject)

A ScriptableObject with an editor-only description to let developers clarify its use.
