---
description: Lists all channels on the object or behavior.
---

# Channels

This provides a helpful overview of an object's animation channels with additional settings and editing features.&#x20;

![Each channel belongs to a behavior and represents a specific property being animated. ](https://2067910529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC3dOuetlQfYgK5FPUKgn%2Fuploads%2FAWypnPGjkQ8DLznAKCtN%2FTimeflowObject_Editor_Channels.jpg?alt=media\&token=bb76580c-3bac-4d60-b659-dac95ed57091)

{% hint style="info" %}
**No channels have been created**

If this message is displayed in the Channels section, it simply means there are no animation channels on the object. Not all behaviors have channels, so this is normal and nothing to worry about.
{% endhint %}

## Channels List

The Channels section provides a convenient way of inspecting channel setup and data. Some behaviors such as Keyframer also display a Channels section in the editor, however will only show the channels it manages. Whereas the TimeflowObject shows all channels on the object. In either case the channels may be edited the same.

![Property mappings can be reassigned by clicking on the main button displaying the property name of each channel. ](https://2067910529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC3dOuetlQfYgK5FPUKgn%2Fuploads%2Fz1nkbjPZ5vN6uYAiQfAS%2FTimeflowObject_Editor_ChannelsMultiple.jpg?alt=media\&token=eb8a7106-d22f-4a0b-a648-1fa3522ae5ac)

If a property with multiple attributes is selected, an additional set of options allows choosing an attribute (axis), or processing it as a uniform or combined value (vector). See [Properties](../../user-guide/timeflow-view/properties) for further details.

{% hint style="success" %}
Use the up and down arrow buttons in the Channel list to reorder them.&#x20;
{% endhint %}

## Channel Order

In most cases the order of channels doesn't matter, however there may be times that it is advantageous to rearrange them. This can be to display them in a specific order and also determines which channels are processed first.

![](https://2067910529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC3dOuetlQfYgK5FPUKgn%2Fuploads%2FEXK4WNUNV0p0j0cgnw7h%2FTimeflowObject_Editor_ChannelOrder.jpg?alt=media\&token=27b40079-7241-4974-ba74-6e50406a0575)

{% hint style="info" %}
Channels are always processed from the top first, going down. This matches the order shown in the [Object Panel](../../user-guide/timeflow-view/object-panel), where channels can be dragged to reorder them as desired.
{% endhint %}

## Channel Settings

Expand the foldout arrow to view details for any channel listed. Channels that support keyframing also display a list of keyframe times and values for direct editing.

![](https://2067910529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC3dOuetlQfYgK5FPUKgn%2Fuploads%2FyrJr5baMhc6nYnxgW3wZ%2FTimeflowObject_Editor_ChannelDetails.jpg?alt=media\&token=4c8614c9-cd78-4a52-b251-7b60a37200f3)

{% hint style="info" %}
Options and features available to each channel depend on the property type it maps to as well as the type of channel it is. Many behaviors, such as Tween, have custom channel types which do not support keyframing and does not list keyframes.
{% endhint %}

### Channel Link

Displays the current channel link if one is assigned. For more details, see [Channel Link](../../user-guide/timeflow-view/channel-link).

<figure><img src="https://2067910529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC3dOuetlQfYgK5FPUKgn%2Fuploads%2F1Z9iabzqi7etMZyqPUNo%2Fimage.png?alt=media&#x26;token=99464747-1847-4065-b1dc-f3bfa23a3d39" alt=""><figcaption></figcaption></figure>

### Loop Settings

Displays settings that control looping a section of time. These features are covered in more detail in the [Graph View](../../../user-guide/timeflow-view/graph-view#looping-animation) documentation.&#x20;

### Limit Value

This option is only available for numeric data types. If enabled, all values generated by the channel (whether keyframed or procedural) are restricted to the set value range. Any values outside of the range are cropped to the Min and Max values.&#x20;

<figure><img src="https://2067910529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC3dOuetlQfYgK5FPUKgn%2Fuploads%2F9atvanblEfL4q1OOt3mJ%2Fimage.png?alt=media&#x26;token=4ce716ce-d889-4df0-8c0f-902acf2199c0" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Use this for any properties that require a specific value range. &#x20;
{% endhint %}

### Set Shader Global

When enabled, the channel outputs its value each frame to the named global shader property. This can be used to perform animations on all materials using the shader.&#x20;

<figure><img src="https://2067910529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC3dOuetlQfYgK5FPUKgn%2Fuploads%2Fveu3EqjUYgFAJwoYWGzy%2Fimage.png?alt=media&#x26;token=83986990-134b-46e2-9c09-1be3e597a572" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
This is a much more efficient way to animate materials across many objects, instead of setting values on each material instance separately.
{% endhint %}

This is implemented through Unity's Shader class using the [SetGlobal methods](https://docs.unity3d.com/ScriptReference/Shader.SetGlobalFloat.html). Data types include float, vector, and color. This works in both edit mode and play mode the same.

{% hint style="info" %}
**Shader Graph**\
To use this feature with [Shader Graph](https://docs.unity3d.com/Packages/com.unity.shadergraph@13.1/manual/index.html), declare a property with the Exposed checkbox off. Enter a unique name for Reference to use with Set Shader Global. \
\
<img src="https://2067910529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC3dOuetlQfYgK5FPUKgn%2Fuploads%2FEKbNz4COgWytpLecEiXJ%2Fimage.png?alt=media&#x26;token=f8de1b88-6594-4b2d-a364-c3f1ff592e31" alt="" data-size="original">&#x20;
{% endhint %}

### Keyframes

Lists all keyframes in the channel. This section is only displayed if the channel supports keyframing. Keyframes may be edited directly.

{% hint style="warning" %}
Be aware that every keyframe must have a unique time. Any keyframe with the same time as another is considered a duplicate and removed automatically.&#x20;
{% endhint %}

### Exposed Keyframes

This is an advanced feature for creating programmable or remote-controlled keyframe values. Each keyframe may be exposed using a unique ID making it globally accessible via simple scripting calls to get and set the keyframe values dynamically.

<figure><img src="https://2067910529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC3dOuetlQfYgK5FPUKgn%2Fuploads%2FpuNUonHjqFex2CVgk1VN%2Fimage.png?alt=media&#x26;token=f95eb868-11c8-4e20-ab3a-b119ebfd8cd6" alt=""><figcaption><p>IDs are assigned at random when Expose is enabled, but maybe changed to any desired value.</p></figcaption></figure>

{% hint style="info" %}
If multiple keyframes have the same ID, they are affected the same.
{% endhint %}

```
// To set a keyframe value remotely in any script:
AxonGenesis.Keyframe.SetExposedKeyframe(ID, Value);

// To get a keyframe value:
float value = AxonGenesis.Keyframe.GetExposedKeyframe(ID, 0);
```

One use case for this feature is to create variations of animations and object placement determined by a game controller or setup script. It can also be used to get values and Keyframe objects for further custom processing.

For an example script, please see SetExposedKeyframe.cs.
