> For the complete documentation index, see [llms.txt](https://docs.ninjutsugames.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ninjutsugames.com/game-creator-1/state-machine/editor-graph/blackboard.md).

# Blackboard

**State Machine Graphs** can not reference scene objects due to living in the Project Panel. To overcome this, we've created the **Blackboard**, where the developer writes down the input fields he/she'll need and these are filled at runtime.

![](/files/-MTT3M4y3ldXGP-W-Anc)

{% hint style="info" %}
As you may have noticed in the image above, to access the value of a **Blackboard** entry is done as if it was a **Local Variable**. This is because under the hood, the **State Machine** component generates a new **Local Variable** component and fills it with all the entries from the **Blackboard**.
{% endhint %}

Once the **Blackboard** is filled with some entries, the **State Machine** component is automatically updated, adding new entries and removing those that no longer exist in the **Blackboard**.

![](/files/-MTT3nIQtm2C3Jhc0Vfh)

For example, let's say our game has a *Guard* that can attack anything when it has a **`target`** defined. We could create a **`target`** entry in the **State Machine** and ask if it's different than *null*. If so, follow it and attack when it's within in range.

![(Can't have a Local Variable with the same name as a Blackboard entry)](/files/-MTT7Tr__3HnWxq1c67X)

{% hint style="danger" %}
Because the **StateMachine** component generates a **Local Variable** object with the **Blackboard** entries, it will throw a conflict error.
{% endhint %}

{% hint style="warning" %}
**Invoker** is a variable automatically generated and it will always have the game object where the State Machine is as reference.
{% endhint %}
