> 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/help/faq.md).

# FAQ

The questions that come up most.

## Do I have to write code to use it?

No. There are two ways to bind, and only one of them involves code.

* **From the Inspector.** Right click any serialized field on any component, choose **Enable Binding**, click the hexagon toggle that appears, and wire it up. This works on Unity's own components, on packages, on Asset Store plugins and on shader properties, because nothing in the target has to know about it. No file is edited and no recompile happens.
* **From code.** Change one field's type to `Bind<T>`. You get lazier updates and exact control over when the value moves, at the cost of the field having to be yours.

They are equally supported and mix freely on the same object. [Two Ways to Bind](/binding-system-3/overview/two-ways-to-bind.md) compares them.

## Why does my binding have no Update Points option?

Because it is a `Bind<T>` field, and there is nothing to schedule: your code reading the field *is* the update. Update points exist for [proxy bindings](/binding-system-3/overview/proxy-bindings.md), where the bound component does not know it is bound and something has to move the value for it.

The nearest equivalent for a `Bind<T>` field is **Auto Update** under **Settings**, a fixed once-per-frame refresh between `Update` and `LateUpdate`. See [Auto Update](/binding-system-3/overview/modes-and-updates.md#auto-update).

## Why use this when I can wire everything in code?

You can, and the package never stops you: bindings are **opt in**, per field and per instance. The cases where it pays off:

1. **People who are not developers** need to link values. A designer can rewire a scene without opening a file.
2. **Decoupling.** A component that declares what it needs, rather than naming what provides it, is testable alone and reusable as is.
3. **No glue classes.** The `HealthBarDriver` class that exists only to copy one value into another stops being written.
4. **Debugging.** A binding is a place you can watch a value flow, which a direct assignment is not.

The honest counterpoint: on a very large team, connections that live outside code are harder to review than code. Which is why every one of them is listed, searchable and graphable. See [Diagnostics](/binding-system-3/project-tools/diagnostics.md).

## How do I add this to an existing project?

Incrementally, and the change is small.

For fields that are only **read**, change `T` to `Bind<T>`. The implicit conversion means most call sites need no change at all. For fields you write to, add `.Value`.

The [Reserializer](/binding-system-3/project-tools/diagnostics/reserializer.md) can carry existing values across the type change. See [Upgrading](/binding-system-3/getting-started/upgrading.md) if you are coming from 2.x.

## Does it work with IL2CPP?

Yes, on every platform Unity builds for. See [Benchmarks](/binding-system-3/project-tools/performance/benchmarks.md) for how the two backends compare.

## Can I bind methods?

Yes, and in 3.x it is a normal, supported thing rather than experimental. A method can be read from (its return value) or written to (one of its parameters), and each parameter can itself be a binding.

```csharp
myBoundFloat = new Bind<float>(transform, "GetSiblingIndex()");
myBoundTransform = new Bind<Transform>(transform, "GetChild(Int32)", 1);
```

Methods are listed in the bind path menu by default. Turning them off makes the menu much shorter on large types. See [Paths and Parameters](/binding-system-3/overview/paths.md).

## Can I edit several objects at once?

Yes. Values that differ are shown as mixed rather than flattened, and converters and modifiers can be added across the selection. Their inner values can be edited for all the objects at once when every object holds the same modifiers in the same order. A proxy binding edits one object at a time unless you turn on **MIRROR**, but **Enable Binding**, a picked path and every menu action reach the whole selection. See [Editing several bindings at once](/binding-system-3/overview/binding.md#editing-several-bindings-at-once).

## Why can I not set a very long path?

Two limits: **Max Bind Path Depth**, which is how deep the menu walks into one type, and a loop guard that stops `transform.gameObject.transform…` from expanding forever.

A trimmed path is still reachable in two hops: bind to the intermediate object, [pin](/binding-system-3/overview/pinning.md) it, and continue from there. See [depth limits](/binding-system-3/overview/paths.md#depth-limits).

## Can I bind a field on a component I did not write?

Yes, that is what [proxy bindings](/binding-system-3/overview/proxy-bindings.md) are. Right click the field, choose **Enable Binding**, then click the hexagon toggle beside the label. Works on serialized fields, material properties and UnityEvent slots.

## How do I make a prefab that binds to something in each scene?

[Bind variables](/binding-system-3/overview/bind-variables.md). The prefab refers to a name, each scene supplies the object. Or [In Context](/binding-system-3/overview/sources.md#in-context) source mode, when the target is nearby in the hierarchy.

## Does a binding cost me every frame?

Only if you asked for that. By default a bound value is resolved when your code reads it. [Update points](/binding-system-3/overview/modes-and-updates.md) are what make the engine do work for you, and they are opt in per binding.

[Proxy bindings](/binding-system-3/overview/proxy-bindings.md) are the exception: they need an update point to do anything, because the target component knows nothing about the binding.

## Doesn't reflection make this slow?

Reflection is used **once per (type, path)**, when a binding is first built, to find the members the path names. It is never used to read or write the value.

After that, a field segment is **direct access** to the field's location, which is close enough to a native field read that the difference is hard to measure, and a property, method or indexer segment is a strongly typed delegate over the real member. `FieldInfo.GetValue` and `MethodInfo.Invoke` are never called while the game is running. [Generated accessors](/binding-system-3/project-tools/performance/optimized-accessors.md) go further still and collapse a whole path into one static call at build time.

See [Performance](/binding-system-3/project-tools/performance.md) for the full cost model.

## Is it fast enough?

For the numbers, see [Benchmarks](/binding-system-3/project-tools/performance/benchmarks.md). For the answer that matters, open the [Bindings Monitor](/binding-system-3/project-tools/diagnostics/bindings-monitor.md) in your own scene: it shows the total cost per update in milliseconds, and which bindings own it.

## Does it allocate?

A bound read of a value type through any number of modifiers allocates nothing. `ModifyDelegate<T>` takes its value by `in`, so value types are never boxed on the way through.

## I renamed a field and my bindings broke

They should have been repaired. See [Refactoring](/binding-system-3/project-tools/diagnostics/refactoring.md), and check that **Enable Refactoring** is on: with it off, invalid bindings are removed by default.

## Can I see from my code which members are bound?

Yes, new in 3.0.2, in VS Code and Rider. Above each class and member, a line says how many bindings use it, and a click lists them and selects the one you pick in Unity. The extension installs itself in the editor Unity opens scripts with. See [VS Code and Rider](/binding-system-3/reference/integrations/vscode-and-rider.md).

## Does it support Odin Inspector?

Yes, including Odin attributes such as `[AssetsOnly]` and `[SceneObjectsOnly]`. See [Odin Inspector](/binding-system-3/reference/integrations/odin-inspector.md).

## Does it support UI Toolkit?

Yes, new in 3.0. Bind UXML element properties from UI Builder. See [UI Toolkit and UXML](/binding-system-3/overview/ui-toolkit.md).

## Can I use it at edit time?

Yes. Turn on the **EDITOR** update point on a [proxy binding](/binding-system-3/overview/proxy-bindings.md) and it runs without play mode, so you can see its effect while authoring the scene. The [path preview](/binding-system-3/project-tools/diagnostics/path-value-preview.md) also resolves at edit time.

[Live Debug](/binding-system-3/project-tools/diagnostics/live-debug.md) reports at edit time too. Its read column works with the game stopped, and its write column, which has nothing to report until something writes to the binding, is exercised by pinning a value onto a stage.

## Why is my Inspector slow?

Because a bind row draws more than a field, and you have many of them. That is [Performance Mode](/binding-system-3/project-tools/performance/performance-mode.md), which can engage automatically above a threshold you set. It changes nothing in a build. [Micro UI](/binding-system-3/overview/micro-ui.md) goes further: a bound field keeps its own control and the bind row is not built at all until you open it.

## Why is the bind path menu slow to open?

The menu walks the type graph. Lower [Max Bind Path Depth](/binding-system-3/overview/paths.md#depth-limits) to 2, and turn off **Methods** in the [Visualization panel](/binding-system-3/reference/settings.md#visualization). Both are reversible and neither affects existing bindings.

## Where is my data stored?

Bindings live in the objects that own them: scenes, prefabs, assets. The package's own data lives in the [Bindings folder](/binding-system-3/reference/settings.md#bindings-path). Caches live in `Library/` and are rebuilt on import.

## Can I write my own converters and modifiers?

Yes, and it is a few lines. See [Extending](/binding-system-3/reference/extending.md), and import the **Additional Converters** and **Additional Modifiers** samples.

## Something is wrong and this page did not cover it

[Troubleshooting](/binding-system-3/help/troubleshooting.md), then [Support](/binding-system-3/help/support.md).
