【Unity 6】Timeline入門|Cubeを動かして、C#から演出を再生してみよう
Unityでゲームを作っていると、「ゲーム開始時にオブジェクトを動かしたい」「ボス登場の演出を作りたい」と思うことがあります。これらの動きをすべてC#のコルーチンで書くこともできますが、決まった順番の演出を組み立てるなら、Timeline(タイムライン)が便利です。
この記事では、まずCubeを左から右に動かす短い演出を作り、その後、スペースキーを押したときにC#から再生するところまで進めます。Animatorのステート遷移やCinemachineのカメラ設定を一から学び直す記事ではありません。

この記事の進め方
- Unity 6の3Dプロジェクトに新しいシーン(
TimelinePractice)を作って進めます - Animatorをまだ使ったことがない人は、先にUnity Animator 学習シリーズで基本を確認しておくとスムーズです
- 手順4ではInput Systemを使います。キー入力の受け取り方はInput Systemで「押した瞬間」を扱う記事で確認できます
- 上から順に進めれば完成します。作る順番は「シーンの準備 → Timelineを作る → Cubeの移動を記録 → C#から再生」です。音の追加は発展課題です
今回のゴール
- Timeline AssetとPlayable Directorの役割を説明できる
- Cubeの位置を時間に沿って変えるAnimation Trackを作れる
PlayableDirector.Play()を使ってC#から演出を再生できる- 通常のゲーム動作と、決まった順番の演出の使い分けを考えられる
所要時間の目安:60〜90分。 音声・カメラ連携は発展課題です。
TimelineとAnimatorは何が違う?
Animatorは、たとえば「IdleからWalkへ」「WalkからAttackへ」というように、状態と条件による動きの切り替えを得意としています。一方、Timelineは「0秒に開始、2秒まで移動、3秒で効果音」というように、時間の流れに沿った演出を得意としています。
| 機能 | 主な役割 | 使いどころ |
|---|---|---|
| Animation Clip | 動きそのものを記録する | 移動・回転など |
| Animator Controller | 状態と遷移を管理する | Idle / Walk / Attack |
| Timeline | 複数のクリップを時間軸に配置する | 開始演出、イベントシーン |
| Playable Director | Timelineをシーンに結びつけ、再生を管理する | C#からの再生・停止 |
Animatorの基礎を確認したい人は、先にUnity Animator 学習シリーズを見てください。
1. 新しい3Dシーンを用意する
Unity 6の3Dプロジェクトで作業します。シーンを保存し、Hierarchyで右クリックして 3D Object → Cube を追加します。
- Cubeの名前を
DemoCubeに変更する - TransformのPositionを (-3, 0, 0) にする
- Hierarchyで Create Empty を選び、空のGameObjectを
TimelineDirectorと名付ける - シーンを
TimelinePracticeとして保存する
CubeがGameビューに映らない場合は、Main Cameraの位置や向きを調整してください。ここでの目的は「Cubeを画面内に見せる」ことで、カメラの正確な数値は必須ではありません。
2. Timelineを作る
- メニューから Window → Sequencing → Timeline を開く
- Hierarchyで
TimelineDirectorを選択する - Timelineウィンドウにある Create をクリックする
- 保存先と名前を指定し、
CubeMoveTimelineとして保存する
Timeline Assetが作られ、TimelineDirector に Playable Director コンポーネントが追加されます。Inspectorの Playable 欄に CubeMoveTimeline が指定されていることを確認しましょう。
Timelineの用語
- Track(トラック):アニメーションや音声などを置く行
- Clip(クリップ):トラック内で時間の長さを持つ要素
- Playhead(再生ヘッド):現在どの時刻を見ているか示す線
- Binding(バインディング):トラックがどのGameObjectを操作するかの関連付け
Timeline Asset自体と、シーン中の対象GameObjectとの関連付けは別です。アセットを作っただけでCubeが自動的に動くわけではありません。
3. Cubeの移動を記録する
最初はAnimation Trackひとつだけを使います。
- Timelineウィンドウの Add(+)→ Animation Track を選ぶ
- Hierarchyの
DemoCubeをAnimation Trackのバインディング欄にドラッグする。必要ならCubeにAnimatorコンポーネントを追加する - Animation Trackの録画(赤丸)ボタンを押し、記録モードにする
- 再生ヘッドを 0秒 に置き、
DemoCubeのPosition Xを -3 にする - 再生ヘッドを 2秒 に移動し、Position Xを 3 にする
- 録画ボタンをもう一度押して記録を終了する
- 再生ヘッドを0秒に戻し、Timelineの再生ボタンで動きを確認する
これでCubeが左から右へ移動するアニメーションを作れます。最初の記録でAnimation Clipが生成される場合があります。記録方法によって、トラック上の表示はInfinite Clip(無限クリップ)になることがあります。
確認ポイント: InspectorでPositionを動かしても記録されない場合は、録画ボタンが有効か、再生ヘッドが意図した時刻にあるか、Animation TrackのBindingがDemoCubeになっているかを確認してください。
4. 再生をC#から制御する
ここまでの動きはTimelineウィンドウから再生できました。次は、ゲーム中にスペースキーを押したときに演出を開始します。
まず、TimelineDirector のPlayable Directorコンポーネントで、Play On Awake のチェックを外します。起動直後に自動再生しないようにするためです。また、Wrap ModeをNone にし、最後まで再生したら停止する設定にしておきます。Noneでは、再生が終わるとCubeが再生前の位置に戻ることがあります。右端で止めたままにしたい場合は Hold を選びましょう。
Projectで TimelineStarter.cs を作成し、次のコードを入力します。今回は新Input Systemを使用します。
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Playables;
public class TimelineStarter : MonoBehaviour
{
[SerializeField] private PlayableDirector director;
private void Update()
{
if (Keyboard.current == null)
{
return;
}
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
if (director == null)
{
Debug.LogWarning("Playable Directorが設定されていません。");
return;
}
director.Stop();
director.time = 0;
director.Play();
}
}
}
Inspectorで参照を設定する
TimelineDirectorにTimelineStarterを追加するTimelineStarterの Director 欄に、HierarchyのTimelineDirector自身をドラッグする- Playモードでスペースキーを押し、Cubeが動くか確認する
PlayableDirector 型の変数を使うため、using UnityEngine.Playables; が必要です。
Stop()で直前の再生を止め、time = 0で先頭に戻し、Play()で最初から再生するようにしています。スペースキーを連打した場合も先頭からやり直す仕様です。
Keyboard.current はInput SystemパッケージのAPIです。Package ManagerでInput Systemを導入し、プロジェクトで有効にしてください。入力に関する詳しい説明は、【Unity 6】ジャンプや攻撃の入力を受け取る ― Input Systemで「押した瞬間」を扱う2つの方法を参照してください。5. なぜC#だけで書かないの?
Cubeを2秒間で移動させるだけなら、C#で書く方が簡単な場合もあります。しかし、「Cubeの移動と同時に効果音を鳴らす」「少し遅れて別のオブジェクトを動かす」といった演出では、開始時刻と長さを見ながら調整できることがTimelineの強みです。
反対に、敵の追跡AI、プレイヤー入力、衝突判定、体力管理などはTimelineに任せるよりC#で実装するのが自然です。
- C#: ゲームのルールや状況に応じた動作
- Timeline: 決まった順番・タイミングで行う演出
- Playable Director: その2つをつなぐ再生窓口
6. 発展:演出に音を追加する
効果音のAudio Clipが用意できたら、次のように追加します。
TimelineDirectorに Audio Source コンポーネントを追加する- Timelineに Audio Track を追加する
- Audio TrackをAudio Sourceにバインドする
- Projectの音声ファイルをAudio Trackにドラッグして配置する
- 再生開始位置を移動し、Cubeの動きと音が合うように調整する
音声ファイルを準備していなければ、この課題は飛ばして構いません。Timelineの音声プレビューは、環境によってはPlayモードでの確認が必要です。
カメラも切り替えたい場合
Cinemachineを使うと、Timeline内でカメラのショットを並べて切り替えることもできます。ただし、Cinemachine Camera、Cinemachine Brainの設定をこの記事で重ねて説明することはしません。
すでにUnity 6入門チュートリアル:Cinemachineでゲームのカメラを自由に動かそう!の「発展:Timelineで映画のような演出を作る」に、全景→接近→追従の例があります。基本演習を終えたら、そちらに進みましょう。
7. うまく動かないとき
| 症状 | 確認すること |
|---|---|
| TimelineウィンドウにCreateがない | TimelineDirector が選択されているか |
| Cubeが移動しない | Animation TrackのBinding、Animator、記録したキーフレーム |
| Playモード開始時に勝手に動く | Playable DirectorのPlay On AwakeをOFF |
| スペースキーに反応しない | Input Systemの導入と有効化、Gameビューのフォーカス |
| Consoleに参照警告が出る | TimelineStarter のDirector欄を設定したか |
| Cubeの位置が予想と違う | TimelineのWrap Modeや、同じTransformを制御する他の処理 |
8. 理解を確かめよう
- Timeline AssetとPlayable Directorは、それぞれ何を担当しますか?
- CubeのAnimation Trackを作ったのに動かないとき、Bindingを確認するのはなぜですか?
director.Play()を使うと、何ができるようになりますか?- 「敵の追跡」と「ボス登場時のカメラ演出」は、どちらをTimelineに任せるのがよいでしょうか? 理由も考えてみましょう。
まとめ
Timelineは、ゲーム内の複数の動きや音を時間軸で組み立てる道具です。今回の演習では、Cubeを動かすAnimation Trackを作成し、Playable Directorを通してC#から再生しました。
まずは「Timelineで演出を作る」「C#で演出を開始する」という役割分担が分かれば十分です。慣れたら音声、複数のオブジェクト、Cinemachineのカメラ演出へと発展させてみてください。
関連記事
- Unity Animator 学習シリーズ ― Animation Clipからステート制御まで
- Unity 6入門チュートリアル:Cinemachineでゲームのカメラを自由に動かそう!
- 学習シリーズ一覧









ディスカッション
コメント一覧
まだ、コメントがありません