Cross Technology

Unity、VR、MR、ARを中心とした技術ブログ

【Unity】時間制御アセット「Chronos - Time Control」の使い方とTips紹介

スローモーションの表現を付けてみたくて探していたところ、時間制御ができるアセット「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が記載されていますが、アセットストアの紹介ページからも行けますので、リンクを貼っておきます。

Chronos / Ludiq

4. 動作確認

Chronosアセットにはサンプルシーンがあります。下記はサンプルシーンのスクリーンショットですが、いろいろなオブジェクトが色々な動きをしており、どうすればどう動くのか、がわかりづらい印象を持ちました。

UnityアセットChronosのサンプルシーン画面

そこで、サンプルシーンについては、ある程度このアセットの構造を理解してから使うことにして、まずは最も簡単な時間制御を試しました。試した結果がこちらです。

UnityアセットChronosを使った時間制御の例

このように、一つのgame objectの移動速度を制御できます。以下、このサンプルを作るための手順を解説します。

4-1. Timekeeperオブジェクトを設置する

Unityの"GameObject"から生成できるオブジェクトに、 Timekeeperというオブジェクトが追加されているので、これを選択します。

Timekeeperオブジェクトの追加画面

4-2. 新規のGameObjectを設置する

なんでも良いです。今回はCubeを設置しました。

4-3. GameObjectにTimelineコンポーネントを追加する

時間制御したいGameObjectを選択した状態で、Component/Timelineを選択します。

UnityアセットChronosのComponent/Timeline選択画面

選択したTimelineコンポーネントについて、ModeとGlobal Clockを下記のように指定します。

UnityアセットChronosの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. 終わりに

基本的な原理と使い方は整理できました。機会あれば何かのゲームに使ってみたいと思います。