# Signals

!!! note "Summary"
    A **Signal** supplies a value to a node. For example, you can give an Instruction a constant number or read one from a variable, the distance between two objects, or a random range.

!!! info "Signal entries come from source code"
    The pages below are a complete reference for every **Signal**, generated from the latest version of the asset and grouped by the type of value produced.

## Read and write

A Signal can read a value, write one, or support both operations. Its supported operations determine which dropdowns offer it:

* **Read Signals** appear in **Get** dropdowns. **Constant Number** returns the value you entered and can't be changed at runtime.
* **Write Signals** appear in **Set** dropdowns. **Game Object Name** supports both operations: it reads the object's current name and assigns a new one.

A source with no writable value, such as the distance between two objects, doesn't appear in a **Set** dropdown.

## Signals are typed

A Signal field offers sources of its own type, so a field asking for a number doesn't offer a color. Available types include **Number**, **Boolean**, **Vector3**, **Game Object**, **Scriptable Object**, and the collections that **Foreach** iterates.

Because the inputs of a Signal are themselves Signals, they nest: *random between 1 and the player's level* is a random-range Signal whose upper bound is a variable Signal.

## Reacting to changes

A **binding** monitors a Signal and runs an Event when its value changes. Use one to update a health bar when health changes, for example.

See [Bindings](../../signals/bindings.md) for how to choose a subscription mode and what each mode costs.
