スローモーションの表現を付けてみたくて探していたところ、時間制御ができるアセット「Chronos - Time Control」を見つけることができました。(8/28日現在、ちょうどマッドネスセールの対象になっていますね)
ざっと動きを調べたのですが、いくつか分かりづらい箇所があったので、まずは基本的な確認までを備忘録として残しておきたいと思います。
まず、どんなことができるかは、You Tubeで公開されているプロモーションムービーを見るのが早いと思います。とてもかっこいいです。
(「Chronos - Time Control」は長いので、以後このアセットのことを「Chronos」と呼びます)
1. Chronosとは?
時間制御ができるアセットです。オブジェクトの移動速度を速い/遅い、停止、巻き戻しのように変更できます。自分で指定した条件のときに変更、ということができます。
たとえば、冒頭のプロモーションムービーのように、特定オブジェクトだけ、任意のエリアに入ったオブジェクトだけ、のような制御ができます。
2. Chronosの構成
大きく分けて6つのコンポーネントがあります。説明は私の解釈です。
名称 | 役割 |
---|---|
TimeKeeper | すべての時間制御の元となるコンポーネント。Chronosによる時間制御を行うには、TimeKeeperコンポーネントを付けたオブジェクトが、一つのシーンに一つだけ存在している必要がある |
Clock | 時間制御のための基本クラス。Abstractとあり、実際にオブジェクトにアタッチすることはなさそう |
Global Clock | オブジェクト(複数)のグループを指定するコンポーネント。Unityのtagに類似。TimeKeeperオブジェクトにアタッチする必要がある。他のGlobal ClockをParentとして指定できる |
Local Clock | 一つのオブジェクトを時間制御できるようになるコンポーネント |
Area Clock | Colliderの範囲内にあるオブジェクト(複数込み)を時間制御できるようになるコンポーネント |
Timeline | Chronosアセットで時間制御させたいオブジェクトに必ずつけるコンポーネント |
3. 準備
まずはアセットを購入し、インポートします。アセットストアの紹介ページによると、容量は3.8MBととても軽いです。インポートすると、Assets/Chronosフォルダに、Readmeがあります。ここにチュートリアルのURLが記載されていますが、アセットストアの紹介ページからも行けますので、リンクを貼っておきます。
4. 動作確認
Chronosアセットにはサンプルシーンがあります。下記はサンプルシーンのスクリーンショットですが、いろいろなオブジェクトが色々な動きをしており、どうすればどう動くのか、がわかりづらい印象を持ちました。
そこで、サンプルシーンについては、ある程度このアセットの構造を理解してから使うことにして、まずは最も簡単な時間制御を試しました。試した結果がこちらです。
このように、一つのgame objectの移動速度を制御できます。以下、このサンプルを作るための手順を解説します。
4-1. Timekeeperオブジェクトを設置する
Unityの"GameObject"から生成できるオブジェクトに、 Timekeeperというオブジェクトが追加されているので、これを選択します。
4-2. 新規のGameObjectを設置する
なんでも良いです。今回はCubeを設置しました。
4-3. GameObjectにTimelineコンポーネントを追加する
時間制御したいGameObjectを選択した状態で、Component/Timelineを選択します。
選択したTimelineコンポーネントについて、ModeとGlobal Clockを下記のように指定します。
4-4. 基底クラスのスクリプトを作る
まず、スクリプトの記述を簡略化するため、以下のようなコードを準備します。
giste7150b2307d1f83dec14b5f45225d532
以後、時間制御をしたいときは、BaseBehaviourクラスを継承します。例えば、Timelineというコンポーネントがありますが、
GetComponent<Timeline>.deltaTime
を、
time.deltaTime
として簡略記述できるようになります。なお、BaseBehaviour.csは作成して Project Viewにあるだけでよいです。Hierarchy Viewの何かのオブジェクトに追加する必要はありません。
4-5. 時間制御のスクリプトを作る
以下のようなスクリプトを書きます。
gist6277067bce1576bad34f589f063959cf
4-6. 適当なGame objectに、TimeControlTest.csを追加する
たとえば、今回は制御対象のCubeに追加してみました。これでシーン実行すると、キーボードの1〜5のキーに応じてそれぞれ時間制御をかけることができます。
5. Tips
チュートリアルページは、Unityの2D Platformerというサンプルプロジェクトを元にした解説であり、なぜかChronosアセット付属のサンプルシーンに関する解説は見つけることができませんでした。
まだチュートリアルページを全部読めていないので、一通り読めば、サンプルシーンの中身も理解出来る気がしています。
6. 終わりに
基本的な原理と使い方は整理できました。機会あれば何かのゲームに使ってみたいと思います。