4th term 4th week - dsuz/unity-game-dev1-3d-2019 GitHub Wiki
今回のテーマ
今回のテーマは Timeline です。これを使うとカットシーンを作ることができます。
今回の準備
- Package Manager から Cinemachine をバージョン 2.5 に、ProBuilder を 4.2.3 にそれぞれアップデートする
- 入っていない場合は上記のバージョンをインポートする
- 同じく Package Manager から Unity Timeline (1.0.0) が入っていなければインポートする
- CutScene.unitypackage をプロジェクトにインポートする
- 前回までのプロジェクトがある人は追加でインポートする
- ない人は空のプロジェクトを作り、SD ユニティちゃんをインポートしてからインポートする
- SD ユニティちゃんをインポートした時はコンパイルエラーになるため、適宜修正して下さい
- シーン Assets/CutScene/CutScene を開き、実行する
- カットシーンのアニメーションが再生されれば OK です
Timeline とは
Timeline とは、各々のオブジェクトの挙動を記録しておき、それを指定したタイミングで再生できる機能を持つパッケージです。以下のような挙動を記録することができます。
- オブジェクトの Transform の変化(位置、向き、大きさ)
- キャラクターなどのアニメーションの再生
- 音を鳴らす
- オブジェクトを表示したり、消したりする
- カメラを制御する
Window メニュー > Sequencing > Timeline を選択して Timeline ウィンドウを表示し、シーン内の Director オブジェクトを選択すると、以下のウィンドウが表示される。
以下の点に注目すること。これらは Animator, Animator Controller などと似ていることに留意すること。
- Timeline ウィンドウには各 トラック の情報が表示されている
- Director オブジェクトには Playable Director というコンポーネントが追加され、Playable に CutScene という Timeline アセットがアサインされている
- Timeline アセットには Timeline ウィンドウに表示されているトラックと シーケンス が記録されている
- Playable Director コンポーネントの Play On Awake がチェックされていること
- つまりこれを外しておけば、スクリプトから PlayableDirector.Play() を呼ぶことで再生できる
実際に作ってみる
Transform をアニメーションさせる
新しいシーンを作り(一度保存して)、基本の操作を学びます。
- シーン内に空の GameObject を作り、名前を Director に変える
- 名前はなんでもよいが、Timeline の Playable Director であることを示す名前にする
- Director オブジェクトに Playable Director コンポーネントを追加する
- Window メニュー > Sequencing > Timeline を選んで Timeline ウインドウを表示する
- Hierarchy で Director を選んだ状態にして、Timeline ウインドウ内の Create ボタンをクリックする
- Timeline アセットが作られるので、名前を付けて保存する
- アセットの名前はなんでもよい
- 作られた Timeline アセットは、自動的に Playable Director にアサインされる
- 手動で Timeline アセットを作り、自分で Playable としてアサインすることもできる
- 以下の画像のように、既に一つトラックがあるので、これは右クリックして削除する
- Director オブジェクトに勝手に Animator コンポーネントが追加されているので、これも削除してよい
- Add ボタンをクリックして、Animation トラックを追加する
- Cube を作り、原点に置く(カメラに映るようにすること)
- 作った Cube をトラックにドラッグ&ドロップする
- Create Animator On Cube という選択肢がでるのでそれを選ぶ
- これは Cube に現時点で Animator が追加されていないために出る。既に追加されている場合は出ない。
- 再生ヘッドが 0 フレームにあることを確認して Rec ボタンを押す
- Cube オブジェクトを選び、Inspector の Transform - Rotation 上で右クリックして Add Key する
- 録音を停止する
- 再生ヘッドを適当な位置(300 フレームあたり)に移動して、もう一度再生ボタンを押す
- Cube の Transform - Rotation - Y に 360 を入力して、録音を停止する
- Timeline ウインドウで再生ヘッドをフレーム 0 に戻して、プレビュー再生ボタンをクリックする
流れとしては以下のようになる。
- アニメーションを設定したいオブジェクトを Animation Track として追加する
- キーを設定したい再生位置にヘッドを移動し、Rec を開始する
- その位置で操作したい項目に対して Add Key して値を設定する
- Rec を停止する
- ヘッドを移動 > Rec 開始(> 必要ならば Add Key)> 値を設定 > Rec 停止、を繰り返す
課題
Cube の Position と Scale をアニメーションさせ、回転しながら動いたり大きさが変わるアニメーションを作成せよ。
ヒント: Timeline ウィンドウのカーブはとても操作しにくい。トラックを右クリックして Edit In Animation Window を選ぶと、Animation ウィンドウでカーブを編集することができる。
キャラクターをアニメーションさせる
- SD_unitychan_humanoid プレハブをシーンに置く
- 位置や角度を適当に修正する
- プレハブに追加されている各コンポーネントの Is GUI のチェックを外す
- このチェックが入っていると、実行時に GUI が表示される
- Timeline ウインドウから Add > Animation Track を選ぶ
- トラック上の None (Animator) に SD_unitychan_humanoid オブジェクトをアサインする
- Animation(SD_unitychan_motion_humanoid に含まれる Standing@loop, Salute, Running@loop など)を Project ウインドウからトラックにドラッグ&ドロップする
- トラック上のアニメーションの再生位置や長さを調整し、プレビューを再生する
- トラックを重ねるとブレンドすることができる
- プレビューを再生するとキャラクターが原点に戻ってしまう。これを解決するために以下の設定をする。
- トラックを選んで Inspector から Track Offsets を Apply Scene Offsets を選ぶ
- もう一度プレビューを再生し、その場でアニメーションが再生されることを確認する
課題
キャラクターがアニメーションしながら移動するように、先の要領で Position をアニメーションさせよ。
ヒント: 別々のトラックに同じオブジェクトを指定して Animation Clip の再生と移動をさせることはできない(下にあるトラックのみが再生される)。同じオブジェクトに対して Animation Clip の再生と Transform のアニメーションを同時にさせるには、トラックを右クリックして Add Override Track を選び、オーバーライド トラックを作ってそこに Transform のアニメーションを設定する。
カメラを制御する
Cinemachine トラックを使うことで、Cinemachine の Virtual Camera を切り替えたり、ブレンドしながら切り替えることができる。
- Timeline ウインドウの Add ボタンをクリックして Cinemachine Track を追加する
- Cinemachine メニューから Create Virtual Camera を選ぶ
- Main Camera をトラックにアサインする
- とりあえず Virtual Camera (CM vcam1) を以下のように設定しておく
- Cinemachine トラックを右クリックして Add Cinemachie Shot を選ぶ
- Inspector から Virtual Camera を Create して、適当に設定する
- Solo ボタンを活用したり、他の Virtual Camera の設定を参照するとよい
- もう一つ Cinemachine Shot を追加して Virtual Camera を Create し、先ほどとは別の設定をする
- プレビューを再生して、カメラが滑らかに切り替わることを確認する
オブジェクトの有効・無効を制御する
- Timeline ウインドウから Add > Activation Track を選ぶ
- トラック上の None (Game Object) に対して適当な GameObject をアサインする
- シーケンス上の "Active" の範囲を変更し、プレビューを確認する
音を鳴らす
- Timeline ウインドウから Add > Audio Track を選ぶ
- 適当なオブジェクトに Audio Source を追加する
- Audio Source を追加したオブジェクトをトラックにドラッグ&ドロップする
- AudioClip アセットをトラック上にドラッグ&ドロップする
- トラック上の AudioClip の再生位置や長さを調整し、プレビューを再生する
課題
今回学んだことを活用して 5秒程度のカットシーンを作成せよ。作ることができたら gif アニメーションとして Slack 上に送信せよ。
ヒント: Gyazo GIF を使って、URL を Slack に送るのが便利です。
参考
- ADAM EP2/EP3 - Alembic Timeline Sample
- Unity Technologies 制の Unity 2017 用の Timeline のサンプルです。以下のようなサンプルシーンがたくさん入っています。ダウンロードサイズが 1GB あります。
- Unityのタイムラインの基本的な使い方を総まとめ!最短でTimelineを使いこなす
- Virtual CameraのTracked Dollyでパスに沿ってカメラを動かす
- テラシュールブログの Timeline カテゴリの記事