> 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/project-tools/diagnostics/scene-visualizer.md).

# Scene Visualizer

Every binding in the scene, drawn as an arrow, in the Scene view.

**Window ▸ Binding System ▸ Bind Scene Visualizer**, or the **Bind Visualizer** entry in the Scene view's own overlay menu.

The other diagnostics answer questions about a binding you have already found. This one answers a different question: *what is connected to what, in the scene in front of me?* It draws an arrow for every binding of the loaded scenes, straight in the Scene view, pointing the way the data travels.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2FxzGpN3CmmAOfnfw8Rr8x%2FScreen%20Recording%202026-09-28%20at%2017.52.02.gif?alt=media&amp;token=357f0a06-e7e1-4c3c-9d61-c1bc5f795b62" alt=""><figcaption><p>The Scene Visualizer with arrows and badges on</p></figcaption></figure>

It is off until you turn it on, editor only, and nothing about it reaches a build.

{% hint style="success" %}
**Somewhere to try it:** the [Cozy Nook](/binding-system-3/tutorials/samples.md#cozy-nook) sample scene ships in the package folder and needs no import. Its **Sunlight** variable feeds three objects, its **Breeze** variable two, and its water level reads `UnityEngine.Time`, so all three kinds of [shared point](#shared-source-points) below are on screen the moment you turn the visualizer on.
{% endhint %}

{% hint style="info" %}
This is a per-user setting, kept with your editor rather than in the project. Turning it on does not turn it on for the rest of the team, and it is not a change to commit.
{% endhint %}

## The arrows

One arrow per binding. **The arrowhead is the bind mode**, so direction is readable without touching anything:

<table><thead><tr><th width="230">Mode</th><th>How it is drawn</th></tr></thead><tbody><tr><td><strong>Read</strong></td><td>One head, at the object being written into. Data flows away from the source.</td></tr><tr><td><strong>Write</strong></td><td>One head, at the source. Data flows back into it.</td></tr><tr><td><strong>Read Write</strong></td><td>A head at each end.</td></tr></tbody></table>

Colour carries the same information, matching the hues the Inspector uses:

<table><thead><tr><th width="230">Colour</th><th>What it means</th></tr></thead><tbody><tr><td>Cyan</td><td>Read.</td></tr><tr><td>Amber</td><td>Write.</td></tr><tr><td>Violet</td><td>Read Write.</td></tr><tr><td>Red</td><td>The binding cannot reach what it was pointed at: no source and no way to look one up, a variable id that no longer resolves, or a static class that is gone. The first of those is what <a href="#needs-attention">Needs attention</a> counts; the other two are named on the <a href="#shared-source-points">point</a> the arrows meet at.</td></tr></tbody></table>

With **Flow** on, dots travel along each arrow in the direction the data goes, which makes a Read Write binding obvious at a glance.

An arrow attaches to the middle of the object's body, and to its **transform** where there is no body to speak of. A particle system is the case that matters: its renderer bounds are the particles currently alive, which drift away from the emitter, grow and shrink as the effect runs, and describe nothing at all while it is stopped. Its arrows go to the emitter itself, whether or not anything is simulating.

### Shapes that mean something

<table><thead><tr><th width="230">What you see</th><th>What it means</th></tr></thead><tbody><tr><td>A <strong>fan</strong> of arrows between two objects</td><td>Several bindings connect the same pair. Each one bows a little further out so they stay countable. <strong>Bow</strong> in the panel controls how far.</td></tr><tr><td>A small <strong>loop</strong> above one object</td><td>Both ends of the binding are on the same object.</td></tr><tr><td>Several arrows <strong>meeting at one point</strong> in mid air</td><td>They all read the same source. See <a href="#shared-source-points">Shared source points</a>.</td></tr><tr><td>A <strong>dashed</strong> arrow</td><td>The source is not an object anywhere: a <a href="/binding-system-3/overview/bind-variables.md">bind variable</a>, or a <a href="/binding-system-3/overview/sources.md#static">static member</a> of a class. The lighter tint and the broken line say so before you read the label.</td></tr><tr><td>A short <strong>stub</strong> ending in a square</td><td>Nothing in the scene sits at the far end, and nothing identifies the source either: a reference that is missing, or a lookup with no key to group it by. The arrow still says where the value lands.</td></tr></tbody></table>

## Shared source points

A [variable](/binding-system-3/overview/bind-variables.md), a [static class](/binding-system-3/overview/sources.md#static), an asset and a [runtime lookup](/binding-system-3/overview/sources.md) have no place in the hierarchy, so the visualizer gives each one a place of its own: a single point in space that every binding reading it starts from.

Two objects on the same variable draw two arrows that meet. Two objects on different variables never do. The same holds for two objects reading `Time`, or `Mathf`, or your own static settings class. That is the whole idea, and it is what turns *these are variable bindings* into *these are the same variable*.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2FSGGdbQFd30ihhUTV9d9Z%2FScreenshot%202026-09-28%20at%2017.54.56.png?alt=media&amp;token=bf59b474-8428-41f4-ba35-e003a995513a" alt="" width="563"><figcaption><p>Three bindings meeting at the point that stands for one variable</p></figcaption></figure>

<table><thead><tr><th width="270">What you see</th><th>What it means</th></tr></thead><tbody><tr><td>A <strong>diamond</strong></td><td>A <a href="/binding-system-3/overview/bind-variables.md">bind variable</a>.</td></tr><tr><td>A <strong>triangle</strong></td><td>A class read through its <a href="/binding-system-3/overview/sources.md#static">static members</a>. No instance exists anywhere, so the class itself is what the point stands for.</td></tr><tr><td>A <strong>square</strong></td><td>An asset, or a source looked up at runtime by tag, name or pattern.</td></tr><tr><td>The <strong>label</strong> above it</td><td>The source's name, and how many bindings read it.</td></tr><tr><td><strong>Red</strong></td><td>A variable whose id no longer resolves, or a class that has been renamed or deleted. Every binding on such a point is set up and reaching nothing.</td></tr></tbody></table>

The colour is the mode of the bindings that read it, the same hues the arrows use, and the read write hue when they disagree, since the point then carries traffic in both directions.

### Where the point goes

The point is placed rather than authored, so the rules are worth knowing:

* **Above the objects it feeds**, in the middle of them, so its arrows stay short and local. Never inside one of them.
* **Out along a ring**, by an angle taken from the source's own identity. Two sources feeding the same objects would otherwise land on the same spot, so any pair that comes out too close is stepped around the ring until it is clear.
* **The same point on every repaint**, and the same again after a domain reload. Nothing in the placement depends on the camera, on the order the scene was read, or on which filters are on: narrowing the [scope](#scope) hides arrows without moving the point they left from.
* **In the ground plane** for a scene laid out on the ground, and in the view plane for one built flat, the way a 2D game is.
* **In the space it is read from**, which matters as soon as a screen space canvas is involved. See below.

### Points and screen space canvases

A screen space canvas is a world of its own. Its rect transform is measured in pixels, so a full screen one is a thousand units across and sits that far from the scene it draws over. A source read by three objects in a room **and** by one label on the HUD would have its point placed in the middle of the two: hundreds of metres above the room, with every arrow crossing the whole view to reach it.

So a canvas counts as a space, and a source read from two spaces gets **a point in each**: one above the objects in the room, one in the canvas beside the label. Nothing is drawn between the two.

<table><thead><tr><th width="270">What follows from that</th><th>What it means</th></tr></thead><tbody><tr><td>Two labels, one name</td><td>Where a source has a point in more than one space, the canvas is named on the label: <em>Sunlight</em> in the world, <em>Sunlight in HUD</em> on the canvas. With one point there is nothing to name, so nothing is added.</td></tr><tr><td>Each space keeps its own scale</td><td>A point is placed in the units of its own space. The canvas cannot lift the points in the world with it, and the world cannot flatten the points in the canvas onto their elements.</td></tr><tr><td>A canvas is sized by its rect</td><td>Not by whichever of its elements hold a binding. One bound label in a full screen canvas is still a space a thousand units across.</td></tr><tr><td>The plane comes from the canvas</td><td>A <strong>Screen Space Camera</strong> canvas can sit at any angle, so its points are placed on the canvas plane rather than in the ground plane, and stay on the surface its elements are drawn on.</td></tr><tr><td>A world space canvas is not a space</td><td>It is in the world already, at world scale, so it groups with everything else there.</td></tr></tbody></table>

{% hint style="info" %}
A binding whose **two ends** are a world object and a UI element still draws one long arrow between them, and it should: both ends are real objects in real places. Only the invented points are placed per space.
{% endhint %}

### Hovering a point

The point behaves like an arrow, one level up. Hover the marker **or its label** and every binding reading that source lights at once while the rest dim, and a card opens on the source itself. The label is the easier target of the two, and it is the part that names what you are pointing at.

<table><thead><tr><th width="230">Row</th><th>What it shows</th></tr></thead><tbody><tr><td><strong>Source</strong></td><td><em>Bind Variable</em>, <em>Static Value</em>, the asset's type, or the <a href="/binding-system-3/overview/sources.md">source mode</a> doing the lookup.</td></tr><tr><td><strong>Type</strong>, <strong>Scope</strong>, <strong>Value</strong></td><td>On a variable: what it holds, where it is scoped, and what is in it right now. The value is live in play mode.</td></tr><tr><td><strong>Namespace</strong>, <strong>Assembly</strong></td><td>On a static class: which one it is, when two classes share a name. A class that no longer resolves shows <em>not found</em> and what was recorded for it instead.</td></tr><tr><td><strong>Key</strong></td><td>On a lookup: the tag, name or pattern being searched for.</td></tr><tr><td><strong>Space</strong></td><td>The canvas this point belongs to, when it is in one, and how that canvas is rendered. It is also a reminder that the same source may have another point out in the world.</td></tr><tr><td><strong>Bindings</strong></td><td>How many read this source, in this space.</td></tr><tr><td><strong>Direction</strong></td><td>How many of them read and how many write. A variable written by one object and read by five is the shape worth spotting.</td></tr><tr><td><strong>Every Update</strong></td><td>How many of them are not on <a href="/binding-system-3/overview/modes-and-updates.md#optimized-update">Optimized Update</a>. Absent when they all are.</td></tr><tr><td><strong>Members</strong></td><td>On a static class: which statics are actually read, by name. Five bindings on one class are usually five different members, and this saves hovering all five arrows.</td></tr><tr><td><strong>Objects</strong></td><td>The objects themselves, by name.</td></tr></tbody></table>

**Left click** the point to select every object reading that source. **Right click** it for the rest, on release, the same way an arrow does:

<table><thead><tr><th width="270">Item</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Select N Objects</strong></td><td>The same as a left click.</td></tr><tr><td><strong>Frame Them</strong></td><td>Moves the camera so the point and everything reading it are on screen.</td></tr><tr><td><strong>Select Variables Container</strong></td><td>Selects the object that declares the variable, when a loaded scene declares it.</td></tr><tr><td><strong>Open Bind Variables</strong></td><td>Opens the <a href="/binding-system-3/overview/bind-variables.md">Bind Variables</a> window at the containers of the project.</td></tr><tr><td><strong>Select Script</strong></td><td>On a static class: selects the script it is declared in. Absent for a class with no script asset of its own, an engine type above all.</td></tr><tr><td><strong>Copy Class Name</strong></td><td>On a static class: puts its full name on the clipboard, ready to paste into code.</td></tr><tr><td><strong>Select Source Asset</strong></td><td>On an asset source: selects the asset.</td></tr><tr><td><strong>Optimize N Bindings</strong></td><td>Turns <a href="/binding-system-3/overview/modes-and-updates.md#optimized-update">Optimized Update</a> on for every binding on this source that lacks it, in one undo step.</td></tr><tr><td><strong>Isolate These Objects</strong></td><td>Selects them and switches <a href="#scope">Scope</a> to <strong>Selection</strong>, leaving only this source's bindings on screen.</td></tr><tr><td><strong>Group Shared Sources</strong></td><td>The switch for all of this. See <a href="#shape">Shape</a>.</td></tr></tbody></table>

## Hovering an arrow

Put the pointer on an arrow. It thickens, the rest dim, and a card opens with the whole binding in one place.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2Fqz61g1J739BLmKl4THY5%2FScreenshot%202026-09-28%20at%2017.56.05.png?alt=media&amp;token=2077645e-af94-43a2-a854-8252eb417203" alt="" width="563"><figcaption><p>The card that opens on a hovered arrow</p></figcaption></figure>

<table><thead><tr><th width="230">Row</th><th>What it shows</th></tr></thead><tbody><tr><td><strong>Source Path</strong></td><td>What the binding reads. A <a href="/binding-system-3/overview/bind-variables.md">variable</a> shows its name, a constant shows <em>Default Value</em>, and a path owned by an <a href="/binding-system-3/reference/extending/accessor-providers.md">accessor provider</a> is expanded into the provider's own form.</td></tr><tr><td><strong>Target</strong></td><td>The field it delivers into, or the proxied path.</td></tr><tr><td><strong>Mode</strong></td><td>Read, Write or Read Write.</td></tr><tr><td><strong>Variable</strong>, <strong>Scope</strong>, <strong>Variable Type</strong></td><td>On a variable source. The name turns red when the id no longer resolves to a variable.</td></tr><tr><td><strong>Class</strong>, <strong>Namespace</strong></td><td>On a <a href="/binding-system-3/overview/sources.md#static">static</a> source: the class the member is read from. Red, with <em>not found</em>, when that class is gone.</td></tr><tr><td><strong>Source</strong></td><td>On any other source that is not a direct reference: the <a href="/binding-system-3/overview/sources.md">source mode</a> that will resolve it, or <em>missing</em>.</td></tr><tr><td><strong>Modifiers</strong>, <strong>Pre Modifiers</strong></td><td>How many <a href="/binding-system-3/pipeline/modifiers.md">modifiers</a> are in the pipeline, on each side of the conversion.</td></tr><tr><td><strong>Read Converter</strong>, <strong>Write Converter</strong></td><td>The <a href="/binding-system-3/pipeline/converters.md">converter</a> in use, by name.</td></tr><tr><td><strong>Parameters</strong></td><td>How many <a href="/binding-system-3/overview/paths.md">parameters</a> the path takes.</td></tr><tr><td><strong>Updates On</strong>, <strong>Interval</strong></td><td>On a <a href="/binding-system-3/overview/proxy-bindings.md">proxy binding</a>: its <a href="/binding-system-3/overview/modes-and-updates.md">update points</a> in words, and its <a href="/binding-system-3/overview/modes-and-updates.md#intervals">interval</a> when one is set. Nothing else reads them, so nothing else shows them.</td></tr><tr><td><strong>Optimized</strong></td><td><em>on change</em> or <em>every update</em>, on the bindings that read the flag. See <a href="/binding-system-3/overview/modes-and-updates.md#optimized-update">Optimized Update</a>.</td></tr><tr><td><strong>Kind</strong></td><td><em>Field Binding</em>, <em>Proxy Binding</em> or <em>UI Element Binding</em>: a <code>Bind&#x3C;T></code> field, a <a href="/binding-system-3/overview/proxy-bindings.md">proxy</a>, or a <a href="/binding-system-3/overview/ui-toolkit.md">UI Toolkit</a> binding on a document. It is what decides which of the rows above apply.</td></tr><tr><td><strong>Live Debug</strong></td><td>Whether <a href="/binding-system-3/project-tools/diagnostics/live-debug.md">Live Debug</a> is on for this binding.</td></tr><tr><td><strong>Object Cost</strong></td><td>In play mode with the <a href="/binding-system-3/project-tools/diagnostics/bindings-monitor.md">Bindings Monitor</a> open. See <a href="#cost-in-play-mode">Cost in play mode</a>.</td></tr></tbody></table>

The card keeps clear of the Scene view's overlays, including this tool's own panel, so it moves to whichever corner of the pointer is free.

**Left click** an arrow to select and ping the object that owns the binding. **Right click** it for the rest, which opens when the button comes back up: a right drag that happens to start on an arrow still orbits the camera, and no menu appears for it.

<table><thead><tr><th width="270">Item</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Select Source</strong> / <strong>Select Target</strong> / <strong>Select Owner</strong></td><td>Jump to either end, or to the object holding the binding when that is a third object.</td></tr><tr><td><strong>Optimize Update</strong></td><td>Toggles <a href="/binding-system-3/overview/modes-and-updates.md#optimized-update">Optimized Update</a> on this one binding.</td></tr><tr><td><strong>Live Debug</strong></td><td>Toggles <a href="/binding-system-3/project-tools/diagnostics/live-debug.md">Live Debug</a> on this one binding.</td></tr><tr><td><strong>Isolate This Object</strong></td><td>Selects the owner and switches <a href="#scope">Scope</a> to <strong>Selection</strong>, which is the fastest way to read one object's bindings in a crowded scene.</td></tr></tbody></table>

## Badges

**Badges** sit next to each object that holds a bound field and carry the things worth acting on.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2FjIU4Y6OM8hh4ylDahI5B%2FScreenshot%202026-09-28%20at%2017.57.18.png?alt=media&amp;token=64b6c91c-6763-4efb-9caa-b4ac60b24ba1" alt=""><figcaption><p>A badge with its count, its optimization state and a cost meter</p></figcaption></figure>

<table><thead><tr><th width="230">Chip</th><th>What it shows</th></tr></thead><tbody><tr><td>Bind mark and a count</td><td>How many bindings this object holds. Click it to select and ping the object.</td></tr><tr><td>Red mark and a count</td><td>How many of them cannot reach a source. Click to select the object.</td></tr><tr><td>Speed mark</td><td>The <a href="/binding-system-3/overview/modes-and-updates.md#optimized-update">Optimized Update</a> state, and the control for it. Green means every binding on the object updates only when its value changes. Dim, with a count, means that many still run on every update point. <strong>Click it</strong> to bring all of them to the same state, in one undo step. Absent on an object whose bindings are all <code>Bind&#x3C;T></code> fields, since the flag does nothing for those.</td></tr><tr><td>A meter with a figure in ms</td><td>Play mode only. See below.</td></tr></tbody></table>

{% hint style="success" %}
The speed chip is the quickest bulk fix in the package. Turn on **Optimize** in the panel, look for the dim chips, and click them. [Optimized Update](/binding-system-3/overview/modes-and-updates.md#optimized-update) explains what it changes and when to leave it off.
{% endhint %}

## Cost in play mode

Enter play mode with the [Bindings Monitor](/binding-system-3/project-tools/diagnostics/bindings-monitor.md) open and every badge gains a meter: a bar and a figure in milliseconds, coloured on a green to red ramp.

The ramp is relative to the heaviest object in the scene, with a floor, so a scene of cheap bindings still shows you where its hot spots are without painting everything red.

{% hint style="info" %}
The Monitor has to be **open**. It is the window that switches profiling on, and the visualizer only reports measurements it did not have to take itself. With the Monitor closed the panel says so and the meters stay away, rather than showing a number that is no longer being measured.
{% endhint %}

The measurements cover both kinds of binding the engine drives: [proxy bindings](/binding-system-3/overview/proxy-bindings.md) with an update point, and `Bind<T>` fields refreshed each frame. A binding resolved lazily when your code reads it is not measured, because the engine is not doing anything for it.

The panel's **Binding Cost** section adds the total, the peak, and the three heaviest objects, each clickable.

## The panel

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2Fh8NwcIVPLTe0plaWD7xu%2FScreenshot%202026-09-28%20at%2017.59.37.png?alt=media&amp;token=0b1061ab-c9eb-4989-885e-b621285f06cd" alt="" width="249"><figcaption><p>The Bind Visualizer panel</p></figcaption></figure>

The switch at the top left turns the whole thing on and off. Beside it is a live count of what is drawn.

Every section folds, and remembers whether you left it open. A closed section still reports its state on the right of its header, so nothing is hidden by folding it away.

### Show

<table><thead><tr><th width="230">Chip</th><th>What it shows</th></tr></thead><tbody><tr><td><strong>Arrows</strong></td><td>The arrows themselves.</td></tr><tr><td><strong>Badges</strong></td><td>The badges and their controls.</td></tr><tr><td><strong>Optimize</strong></td><td>Adds the optimization chip to each badge.</td></tr><tr><td><strong>Cost</strong></td><td>Adds the cost meter, when there is one to add.</td></tr><tr><td><strong>Paths</strong></td><td>Labels every arrow with its source path, instead of only the hovered one.</td></tr><tr><td><strong>Flow</strong></td><td>The travelling dots.</td></tr></tbody></table>

### Direction

**Read**, **Write** and **Read Write**, each coloured like the arrows it controls. Turn two off to read one kind of flow in isolation, which is the quickest way to answer "what writes back into this object?"

### Scope

<table><thead><tr><th width="270">Scope</th><th>What it covers</th></tr></thead><tbody><tr><td><strong>Whole Scene</strong></td><td>Every binding of the loaded scenes.</td></tr><tr><td><strong>Selection</strong></td><td>Only bindings with one end on the selection.</td></tr><tr><td><strong>Selection And Children</strong></td><td>The same, plus anything below the selection in the hierarchy.</td></tr></tbody></table>

### Shape

<table><thead><tr><th width="270">Control</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Group</strong></td><td>On, which is the default, every binding reading the same variable, static class, asset or lookup key starts from one <a href="#shared-source-points">shared point</a>. Off, each of them gets a short stub of its own next to the object it feeds, which is worth a look when a source is read right across a large scene and its arrows are long.</td></tr><tr><td><strong>Bow</strong></td><td>How far the arrows bow away from the straight line between their two ends. More bow keeps a fan of bindings between the same pair readable; less keeps a sparse scene tidy.</td></tr><tr><td><strong>Range</strong></td><td>Hides the arrows of objects further than this from the camera. Zero draws them all.</td></tr></tbody></table>

### Shared sources

Every source that lives outside the hierarchy, the most read first, with the number of bindings on each: variables, static classes, assets and keyed lookups together. Click a row to select the objects reading it. A name in red no longer resolves, whether that is a renamed variable or a deleted class.

It is the way in when the point you are after is behind the camera, or off in a part of the scene you are not looking at. Appears only when there is something in it.

### Needs attention

Appears only when there is something in it.

<table><thead><tr><th width="270">Row</th><th>What it shows</th></tr></thead><tbody><tr><td><strong>N without a source</strong></td><td>Bindings that are set up but have nothing to read from and no way to find it. <strong>Select</strong> selects every object holding one.</td></tr><tr><td><strong>N update every frame</strong></td><td>Bindings that run on every update point instead of only when their value changes. <strong>Optimize</strong> turns <a href="/binding-system-3/overview/modes-and-updates.md#optimized-update">Optimized Update</a> on for all of them, in one undo step. Only <a href="/binding-system-3/overview/proxy-bindings.md">proxy bindings</a> and UI Toolkit bindings are counted: a <code>Bind&#x3C;T></code> field is refreshed only when its value changes already, so there is nothing there to switch.</td></tr></tbody></table>

{% hint style="warning" %}
**Optimize** is a bulk edit across the loaded scenes. It is one undo step, so it is easy to take back, but read [Optimized Update](/binding-system-3/overview/modes-and-updates.md#optimized-update) first: a binding whose target is written by something else as well is the one case where you want it off.
{% endhint %}

### Actions

<table><thead><tr><th width="270">Button</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Rescan</strong></td><td>Reads the loaded scenes again. Rarely needed; the visualizer notices changes on its own.</td></tr><tr><td><strong>Frame All</strong></td><td>Moves the camera so every object taking part in a binding is on screen. The elements of a screen space canvas are left out whenever the world has objects of its own, since framing both at once leaves the scene a speck beside the canvas.</td></tr><tr><td><strong>Monitor</strong></td><td>Opens the <a href="/binding-system-3/project-tools/diagnostics/bindings-monitor.md">Bindings Monitor</a>, which is what feeds the cost meters.</td></tr></tbody></table>

## As a strip of buttons

The panel is a Unity overlay, so it takes the same three layouts the Scene view's own tool overlays do. Right click its header, or use its overlay menu, and pick **Horizontal** or **Vertical**.

<figure><img src="https://3048705056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLUfBXR02sJ5i0MxwYbaV%2Fuploads%2Fbz9IH2R8GTXu8MHavkiW%2FScreenshot%202026-09-28%20at%2017.58.38.png?alt=media&amp;token=5e286674-b8fa-4feb-87da-e49fa2677671" alt="" width="449"><figcaption><p>The same overlay in its Horizontal layout</p></figcaption></figure>

In either strip layout it collapses to the master switch, **Arrows**, **Badges** and **Cost**, with a **More** dropdown carrying the direction filters, the scope, the remaining switches and the actions. Nothing is lost, and the Scene view gets its space back.

Unity's own overlay controls apply too: drag it to a dock zone, collapse it to its icon, or hide it from the overlay menu.

## What it costs

Editor only, and off by default. While it is on:

<table><thead><tr><th width="270">Cost</th><th>What it involves</th></tr></thead><tbody><tr><td>Reading the scenes</td><td>The visualizer reads the serialized data of components that can hold a binding. It rescans when the hierarchy changes, on undo, and when a serialized value changes, ignoring Transform edits because the arrows already follow the objects. Each scan schedules the next one in proportion to how long it took, so a heavy scene slows the refresh rate rather than the editor.</td></tr><tr><td>Repainting</td><td>The Scene view repaints about thirty times a second so the flow animation runs and hovering responds. Turning <strong>Flow</strong> off drops that.</td></tr><tr><td>Drawing</td><td>Capped at four hundred arrows. Past that the view is unreadable anyway; the panel reports how many were left out, and narrowing the <a href="#scope">scope</a> brings them back.</td></tr></tbody></table>

Turn the master switch off, or hide the overlay, and all of it stops.

## Related pages

* [Bindings Monitor](/binding-system-3/project-tools/diagnostics/bindings-monitor.md): the numbers behind the cost meters, per binding rather than per object.
* [Bind Variables](/binding-system-3/overview/bind-variables.md): what a shared point stands for, and where variables are declared.
* [Sources](/binding-system-3/overview/sources.md#static): the Static mode, and the seven other ways a source is found.
* [Dependency Graph](/binding-system-3/project-tools/diagnostics/dependency-graph.md): the same connections as a graph, project wide, including what is not in the open scene.
* [Bind Modes and Update Points](/binding-system-3/overview/modes-and-updates.md): what the arrowheads and the optimization chip mean.
* [Bind Variables](/binding-system-3/overview/bind-variables.md): why some arrows are dashed.
* [Settings](/binding-system-3/reference/settings.md#visualization): the switch, in the Visualization panel.
