⌚
Timeflow
  • ⌚Introduction
  • 📗User Guide
    • â–ļī¸Getting Started
      • ✅Requirements
      • âŦ‡ī¸Installation
      • 🚀Quick Start
      • âœī¸Workflow
      • đŸŽŦRender Pipeline
      • â¯ī¸Editor vs Runtime
      • đŸĻŋHow it Works
      • â›‘ī¸Potential Issues
      • ⚡Optimization
      • 🔨3rd Party Tools
      • đŸ”ĸUpgrading Guide
    • â„šī¸Timeflow Editor
      • đŸŽ›ī¸Menu Bar
      • â˛ī¸Time
      • Local Time Scope
      • 🧰Work Area
      • âš™ī¸Settings
      • âŗUpdate Settings
      • đŸ“ēDisplay Lists
      • đŸ”ģMarkers
      • đŸ”ĩObject
      • 🏭Managed Objects
      • ⚡Quick Select Objects
      • âš’ī¸Tools
    • đŸŽŦTimeflow View
      • 🔩Toolbar
        • 🔑Auto Keyframing
        • â¯ī¸Play Controls
        • đŸĨ…Work Area
        • â¯ī¸Current Time
        • đŸŽŧMusical Timing
        • 🌐Grid and Snap
        • 🔸Keyframe Values
        • đŸ”ģMarkers
      • â˛ī¸Timeline
      • 📐Time Navigation
      • Local Time Scope
      • 🎏Track View
      • â†˜ī¸Selection
      • 📰Object Panel
      • đŸ“ēDisplay Lists
      • 🍱Channels
      • đŸŖProperties
      • 🔗Channel Link
      • đŸšĨSwitches
      • 📅Values Column
      • đŸ›¤ī¸Tracks
      • 🔸Keyframes
      • đŸ“ļAlignment Tools
      • ⌛Time Offset
      • đŸ”ĸInfo Panel
      • 📉Graph View
      • âœ‚ī¸Keyframe Tools
    • 🍰Menus & Shortcuts
      • 📃Context Menus
        • â†–ī¸Select Menu
        • 📰Object Menu
        • 🍱Channel Menu
        • đŸ›¤ī¸Tracks Menu
        • 🔸Keyframes Menu
        • đŸ”ģMarkers Menu
        • 📰View Menu
        • 📰Events Menu
        • đŸĨ…Work Area Menu
      • đŸ—ƒī¸File Menu
      • âš’ī¸Timeflow Menu
        • đŸ•ēAdd Behavior
        • đŸ”ļAnimation
        • 🍱Composition
        • đŸ“ēDisplay
        • ⏊Jump To
        • 👨‍đŸ‘Ļ‍đŸ‘ĻHierarchy
        • 🌐Mesh
        • 👉Select
        • 📚Tracks
        • 🌈Track Colors
        • â†”ī¸Transform
        • đŸ‘ī¸Visibility
        • đŸ› ī¸Editor
      • đŸ”ĩGame Objects Menu
      • đŸŽ›ī¸Presets
      • âš™ī¸Preferences
        • Assets
        • ⌛Time
        • đŸŗī¸â€đŸŒˆTracks
        • âšĒObjects
        • 🧮Channels
        • đŸ”ļKeyframes
        • 🔠Input
        • đŸ“ĨImport
        • đŸ–ŧī¸Rendering
        • đŸŽ›ī¸Overrides
        • 🍱Extras
      • *ī¸âƒŖKeyboard Shortcuts
        • Managing Shortcuts
      • âœ´ī¸Quick Menu
  • Reference
    • đŸ”ĩTimeflow Object
      • đŸĸTracks
      • 🏭Behaviors
      • ⏰Events
      • đŸ—ƒī¸Channels
    • 💃Timeflow Controller
      • đŸŽžī¸Timeflow Playback
    • đŸĒ„Behaviors
      • đŸŽžī¸Animation
        • 🔸Keyframer
        • â†”ī¸Tween
        • 🔀Blend
        • đŸŽĸMotion Path
        • đŸ‘¯Animation Clips
        • 🌴Animator Blend Trees
        • 😁Blend Shapes
      • 🤖Automation
        • 🛸Auto Bank
        • 🧭Auto Rotate
        • 📐Distance
        • ⏰Event
        • đŸ›Šī¸Flyby
        • 🏃Follow
        • 👀Look At
        • đŸŽ¯Look At Target
        • 🎲Noise
        • 🚊Place On Path
        • đŸī¸Place On Surface
      • 🔊Audio
        • 🔊Audio Track
        • đŸŽŧAudio Spectrum
        • đŸŽĩAudio Sample
        • đŸŽ™ī¸Audio Reactive
      • 🎹MIDI
        • 🎹Midi File
        • đŸĨMidi Tween
        • 📡Midi Receiver
          • đŸŽ›ī¸Minis Setup (New Input System)
          • đŸšĨMidiJack Setup (Legacy Input)
      • 🏁Rendering
        • đŸŽžī¸Render To Disk
        • 📋Render Queue
        • đŸ“Ŋī¸Video Encoding
        • 💡Tips & Optimizations
        • âēī¸Unity Recorder
      • 🔧Tools
        • â„šī¸Animator Info
        • 🧮Align Children
        • đŸ’ŦComment
        • #ī¸âƒŖFPS Counter
        • 📈Graph
        • 🔗Property Link
        • 🔄Rotator
        • ✨Particle System Update
        • 🌈Trail Renderer Update
        • đŸ“ēVideo Player Update
    • đŸ—ƒī¸Precomposing
    • 🏭Prefabs
    • 🎨Advanced Presets
    • đŸŽ›ī¸Editor Overrides
      • 🏹Transform Editor Override
    • 🔌Integrations
      • đŸ§™â€â™‚ī¸Adventure Creator
      • đŸŽ›ī¸MIDI Jack | Minis
      • đŸ¤ēSpine Animation
      • đŸ“Ŋī¸Unity Timeline
      • ➰Unity Splines
    • đŸĒSamples
      • đŸ•šī¸Demo App
      • đŸŽžī¸Cutscenes
      • 🏓Physics
      • 🍧Shader Properties
      • ⚡Visual Effect Graph (VFX)
    • 📖Glossary
    • 📗Scripting
    • đŸ“ŖPublished Works
    • âš ī¸Known Issues
    • 🆘Support
    • đŸ§ĒBeta
    • Roadmap
    • đŸ”ĸVersion History
    • ÂŠī¸Terms & Privacy
Powered by GitBook
On this page
  • Linking Channels
  • Linking with Drag and Drop
  • Link Direction
  • Showing Links
  • Removing Links
  • Disabling Links
  • Editing Channel Links
  • Link Blend
  • Additional Settings
  • Source
  • In Attribute
  • Smooth
  • Time Offset
  • 1st Key
  • Time Scale
  • Link Modes
  • Off
  • Overwrite
  • Add / Subtract / Multiply
  • Min / Max
  • One Minus
  • Remap
  • Custom Channel Link
  • Create Object Instance
  1. User Guide
  2. Timeflow View

Channel Link

Use simple expressions to connect channel data

PreviousPropertiesNextSwitches

Last updated 1 month ago

Linking channels provides a way to combine the animation data of one channel with another. Channels are linked together similar to using patch cables, routing data from one channel to another to form chains of connected behaviors.

Linking channels is also a great way to replicate behavior across multiple objects. Instead of having a bunch of duplicate behaviors and animations to manage, one can use a single master object and then link others to it. This can be used to directly copy animation or to modify it through additional calculations.

Linking Channels

To the right of each channel name is a circular well. Clicking and dragging on this draws out a link cable which can be connected with any other channel well. Available link wells are highlighted by white circles as shown below.

Any link wells not highlighted in white may not be linked to. This may be to prevent circular references, or due to an incompatible data type.

Each channel may be connected to 1 other channel, using it as data input. This can be set to overwrite the existing channel data, or use a math expression to calculate a new value. Channel links can be daisy chained to create complex behaviors, or to replicate a channel animation across multiple objects.

The connection line appears red anytime dragging over an invalid selection. Releasing the drag while the line is red cancels the operation and no change is made.

Linking with Drag and Drop

A handy shortcut to simultaneously create and link a new channel is to drag the object onto the link well of the source object.

In the example shown, the Cylinder object is dragged onto the Sphere Local Position channel link. This then creates a matching Local Position channel on the Cylinder and links it to the Sphere's position.

This operation also works with multiple objects, creating and linking a new channel on each object.

Link Direction

Each channel has the ability to be linked to another channel (receiving the other's data) or linked from another channel (providing its data to that channel). This is depicted by the well icon as shown below.

When the channel link is selected, small notch may be seen traveling along the line in the direction of data flow, as an aid to visualize the link relationship.

Each channel may only have 1 link input (linked to), but unlimited outputs (linked from).

When a channel is being referenced by other channels (i.e. providing its data), its link well is outlined with its own channel color, to represent outward flow of data.

Showing Links

To avoid screen clutter, channel link lines are only displayed for selected channels. If nothing is selected, only the link fills and outlines are shown (without lines).

Hold the Alt key to temporarily show all channel link lines, as shown above.

Removing Links

Channel links can be removed using the context menu options as explained in the section below. You can also hold the Control key and click on the link well to remove a link. This can only be used on destination links (Linked To).

While holding the Control key, any link wells that can be removed are displayed with a red minus icon ( - ).

Disabling Links

Channel links can be disabled without removing them by holding the Alt key and clicking on any receiving link wells (with filled color). Disabled links are displayed in gray and no longer processed.

The linked from channel only shows a gray outline if all referencing channels (linked to it) are disabled. If any channel link is still enabled, it displays the outline in color. The helps indicate when channel links are active or not.

When a channel link is disabled it is treated as though it doesn't exist and the channel resumes normal behavior. It may be helpful at times to temporarily disable a link while preserving its settings otherwise.

Animating Channel Links?

Editing Channel Links

When a channel is selected, the link settings are displayed in the Info panel below.

Link Blend

Additional Settings

More settings can be exposed by clicking the pencil icon (to the right of the Link Blend slider). This also reveals a minus icon ( - ) which removes the channel link if clicked.

Source

This displays the object and source channel being linked to. This field can be modified directly by dragging and dropping another TimeflowObject. The available channels to link to are displayed in the drop-down menu next to the object field.

In Attribute

This drop-down menu selects which attributes are used for input. This is only available for complex value types. Primarily this is useful to link a single axis from a complex value (vector, color, rect) to a single float value.

Note that the Out Attribute is disabled since it must match the channel it belongs to.

Smooth

Applies temporal smoothing (in seconds) to the input value. Set to 0 to disable.

Smoothing averages input values over time. Use this to reduce noise and blend values more gradually over time.

Smoothing is only available for numeric and color data types.

Time Offset

A time offset (in seconds) can be applied to delay or anticipate the source animation. This could be used for example to have one object, or a series of objects, follow a lead object spaced out over time.

Data Cache Optimization When data is requested (which may be at times other than the current time), the source channel calculates the value internally but does not apply it to the object. A smart context-aware form of data caching is used to optimize repeated requests, so that the channel doesn't reprocess the same data.

1st Key

This option is used with Time Offset. When enabled, the first keyframe on the channel sets the channel link time offset. Dragging the keyframe in time sets the channel link time offset. This can be helpful to manage link time offsets in the track and graph view.

Negative

If this checkbox is enabled, the 1st keyframe time is applied as a negative time offset (instead of positive).

Time Scale

Apply time scaling to the linked animation to speed it up or slow it down relative to the source animation.

Link Modes

Channel data may be processed with one of the following mathematical operations or using a custom function.

Off

Disables the link. No processing is performed and the link is ignored when this mode is selected.

Overwrite

This replaces the current channel data with the source channel data. This is a good mode to use for 1:1 copying of data from one channel to another. If blend is at full strength (1), then the current channel data is fully overwritten.

Add / Subtract / Multiply

This adds, subtracts, or multiplies the source data with the current channel data. These modes are useful to augment an animation by offsetting, reducing, or amplifying it.

Since both the source and destination channels can have their own animations, channel links can be used to create complex curves using simple techniques.

Min / Max

These modes are based on the math operations min() and max(). Min compares 2 values and returns the smaller of the two, while Max returns the greater of the two. This can be used to limit values or to perform boolean type operations between animation curves.

One Minus

Use this mode when the source data is a value between 0 and 1 to get the complimentary value.

To invert or mirror data that isn't clamped between 0 and 1, use the Subtract mode and set an initial keyframe value of 0.

Remap

Use remap to scale values from an input range to an output range. This can be helpful when mapping one property to another with a different value range.

Custom Channel Link

A custom channel link operation can be defined by writing a simple script. This is implemented using a ScriptableObject. Your custom script must derive from the base class CustomChannelLink and use override functions to implement custom behavior.

This documentation assumes you are familiar with Unity scripting. Please see CustomChannelLinkDifference.cs for example code and refer to the comments for further details about the implementation.

Create Object Instance

To assign a custom channel link, an instance of the ScriptableObject must be created as an asset first. This is a one-time setup after which the object can be assigned in the channel link settings.

Right-click in the Project view and select Create > Timeflow > Create Channel Link

Once created, the custom link can be dragged from the project window to the custom link field in the mini inspector, as shown below.

For more commands and menu options related to channel links, see Channel Link Menu.

In the event that the receiving object does not have a matching property, a channel is created instead. This can occur if the source channel is mapped to a component property that doesn't exist on the receiving object (i.e. doesn't have the same components).

Linked To (Receiving Data)

When a channel link is receiving data, its link is filled with the color of the source channel. By default the source data overwrites the receiving channel data, but may be configured to process the data further as described below in .

Linked From (Providing Data - read only)

In the example above, an extra channel (Data Process) has been added to perform additional calculation, which is then linked to by Capsule Local Position. Using intermediate channels in this way is useful to perform multiple calculations.

It may be tempting to animate Link Blend or other parameters of channel links, however this is prohibited and it is not possible to animate channel link parameters. Instead, additional channels may be added to perform additional processing.

If the result you are trying to achieve is more complex, it may be better to write a as described below Custom Channel Link.

This slider controls how much of the source data is combined with the current channel. If blend is set to 0, then the current channel remains unchanged from its present value, whereas a blend of 1 applies the data fully. How the blend is calculated depends on the math expression selected, described below in .

The can be helpful for visualizing the result of channel link calculations.

The receiving channel must have at least 1 keyframe for blending or when using any mode other than Overwrite. If the channel does not have any keyframes, then a warning similar to below is displayed.

📗
đŸŽŦ
🔗
data-only
Graph View
Additional Settings
custom script or channel link
Link Mode
data-only
data-only
Note that a link is only created when the object is dragged and dropped on the channel link well (highlighted in white).
Note that the color of the link is based on the source channel color, which is blue in the example shown.
Shows a Link Blend value of 0, where the current blue animation curve is unaffected.
Shows the result of partially blending the source data with the current channel animation.
An example showing Multiply, using an animation curve to envelope another.
An example using Min, akin to a Boolean intersection.