> For the complete documentation index, see [llms.txt](https://postica.gitbook.io/binding-system-3/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://postica.gitbook.io/binding-system-3/pipeline/modifier-catalogue/values-and-references.md).

# Values and references

Modifiers that replace, link, delay, blend or report a value.

These work on values of almost any type, and several of them are generated on request for types of your own. See [Standard Modifiers for Your Types](/binding-system-3/pipeline/standard-modifiers.md).

## Set Value

Ignores the incoming value and uses the value you configure instead.

**Parameters:** set **Set Value** to a fixed value or another binding. Enable **Set On Enable** when the value should be applied as soon as the object becomes active.

{% hint style="info" %}
**Example:** use a fixed `true` value to keep a target enabled, or bind Set Value to a shared game-state field so several targets receive the same value.
{% endhint %}

Use this deliberately: it replaces the incoming value. If you only need a fallback, use [Null Check Modifier](#null-check-modifier) instead.

### Using a value from elsewhere

Set Value is most useful when **Set Value** is bound to another field. The modifier listens for that field to change and immediately applies the new value. **Set On Enable** applies the configured value when the object becomes active.

{% hint style="info" %}
**Step-by-step example:** add Set Value to a panel's active-state binding. Bind Set Value to `GameState.tutorialComplete` and keep Set On Enable enabled. Whenever the tutorial state changes, the panel receives the same true/false value; it also receives the current state when it is enabled.
{% endhint %}

{% hint style="warning" %}
Set Value deliberately discards the original incoming value. Do not use it when the original value still needs to influence the result.
{% endhint %}

***

## Blend To

Moves the incoming value partway toward a target value, by an amount you choose.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2Fgit-blob-64449c08fa37916fd13bdfa4c5bc405a7ce2f0e5%2Fmodifier-blend-to.png?alt=media" alt="" width="563"><figcaption><p>The Blend To modifier</p></figcaption></figure>

**Parameters:** set **Target** to the value to blend toward, and **Amount** to how far to go. `0` keeps the incoming value, `1` replaces it with the target completely, and `0.5` lands halfway between them.

{% hint style="info" %}
**Example:** on a color, a Target of gray with Amount `0.7` washes a value out toward gray without discarding the original hue. On a position, blending toward a rest position with a bound amount pulls an object home as that value rises.
{% endhint %}

Available for `float`, `double`, `Vector2`, `Vector3`, `Vector4`, `Color`, and `Quaternion`. Rotations are blended along the shortest arc. There are no integer versions, because a fractional blend between whole numbers would collapse to the nearest one; put a numeric converter in front if you need one.

Both the target and the amount can be bound, which is where this modifier earns its place: with a bound amount, one value can be dialled between two states by anything else in the scene.

{% hint style="info" %}
Blend To applies its blend immediately, in one step. For a value that should travel toward its target over time, use [Tween Animation or Value Smoother](/binding-system-3/pipeline/tweening.md) instead.
{% endhint %}

{% hint style="info" %}
The write direction is supported: values travelling back to the source have the blend undone, so a two-way binding round-trips. At Amount `1` the incoming value was discarded entirely, so there is nothing to recover and the value passes through unchanged.
{% endhint %}

***

## Null Check Modifier

Uses a fallback value when the incoming value is missing. For text values, it also treats an empty string as missing.

**Parameters:** set **Fallback Value** to the value used when no incoming value is available.

{% hint style="info" %}
**Example:** show `Unknown Player` when a player name is empty, or use a default sprite when an optional image reference is missing.
{% endhint %}

Choose a fallback that clearly communicates the missing state instead of hiding an unexpected problem.

***

## Link To Bindable

Connects the value to another bindable value so they stay in sync.

**Parameters:** use **Link To** to select the other bindable value.

{% hint style="info" %}
**Example:** link a settings-screen volume control to an in-game volume control so changing either one updates the other.
{% endhint %}

{% hint style="warning" %}
Link only values that are intended to represent the same information. Avoid creating chains or loops of links unless you have tested how updates move through them.
{% endhint %}

### Keeping two controls in sync

Use the **Link To** picker to select the other bindable value. The linked value must use the same compatible type and must be writable when it needs to receive updates.

{% hint style="info" %}
**Step-by-step example:** add Link To Bindable to a settings slider's volume binding, then select `AudioManager.masterVolume` with Link To. Moving the slider updates the audio manager, and code that changes the audio manager updates the slider.
{% endhint %}

Keep the link close to the place where the shared value is displayed or edited. If several controls represent one setting, prefer linking each one to the same central value instead of linking controls to each other in a chain.

***

## Value Delayer

Shows an older value after a delay that you choose.

**Parameters:** set **Delay** in seconds and set **Initial Value**, which is used until the first delayed value is ready.

{% hint style="info" %}
**Example:** delay a health bar by `0.5` seconds so it trails behind the current health after the player takes damage.
{% endhint %}

Use a short delay for feedback effects. A long delay can make controls and status information feel unresponsive.

### Creating a delayed health bar

{% hint style="info" %}
**Step-by-step example:** add Value Delayer to a secondary health-bar binding. Set Delay to `0.8` and Initial Value to the character's starting health, such as `100`. The main health bar changes immediately while the secondary bar follows the earlier value after 0.8 seconds.
{% endhint %}

The delay uses scaled game time. It pauses when the game is paused, which is usually suitable for gameplay effects. Use a [custom modifier](/binding-system-3/reference/extending/modifiers.md) if a delayed value must continue while time is paused.

{% hint style="warning" %}
Like the [motion modifiers](/binding-system-3/pipeline/tweening.md), Value Delayer only advances while the binding runs. On a [proxy binding](/binding-system-3/overview/proxy-bindings.md) that means an update point has to be selected.
{% endhint %}

***

## Value Logger

Leaves the value unchanged while writing useful information about it to the Unity Console or a file.

**Parameters:** set **Format** to control the message, choose **Level** for Info, Warning, or Error, and choose whether to log only on changes, to the Console, or to a file. Set **File Path** for file logging and enable **Truncate File** when a new run should replace the old log.

{% hint style="info" %}
**Example:** use a format such as `Health changed to {value} at frame {frame}` and enable Only On Change to see meaningful health updates without repeated messages.
{% endhint %}

{% hint style="warning" %}
Use Value Logger while investigating a binding, then remove or disable it. Logging every update, especially to a file, can make the Console noisy and affect performance.
{% endhint %}

### Reading a useful log message

Use `{value}` for the value, `{time}` for the game time, `{frame}` for the frame number, `{path}` for the bound member path, `{source}` for the source object, and `{mode}` for the direction in which the binding is being used. Use `{{` and `}}` when the message itself needs braces.

{% hint style="info" %}
**Step-by-step example:** add Value Logger near the end of a health binding. Set Format to `Health changed to {value:F1} at frame {frame}`, leave **Only On Change** enabled, and enable **To Console**. During play mode, each meaningful health update appears once with a readable value and frame number.
{% endhint %}

Use **To File** only when Console output is not enough. A relative file path is stored under the application's persistent data location; enable **Truncate File** when each play session should start with a clean file.

{% hint style="info" %}
Value Logger reports every value that passes by. To react only to the values you care about, and to deliver them somewhere instead of to the Console, see [Events and conditions](/binding-system-3/pipeline/modifier-catalogue/events-and-conditions.md).
{% endhint %}

## Related pages

* [Modifier Catalogue](/binding-system-3/pipeline/modifier-catalogue.md): every modifier, by value type.
* [Standard Modifiers for Your Types](/binding-system-3/pipeline/standard-modifiers.md): getting these for a type of your own.
* [Live Debug](/binding-system-3/project-tools/diagnostics/live-debug.md): the other way to see what a binding is carrying.
