UnityのTimelineを使えば、ゲームのチュートリアルやエンドロールなどを簡単に作ることができます。
といっても、私もUnityを使い始めのころはTimelineの存在すら知らなかったので、頑張ってスクリプト組まないとなぁ、とか思っていました。
Timelineを知った時は、ゲーム内の演出がかなり広がる可能性を感じましたね。
そんなUnityのTimelineについてですが、この記事で一時停止する方法について説明します。もちろん停止からもう一度再生し始める部分も解説します。
これができれば、チュートリアルなどでユーザーからの入力待ちなんかも実装することができますよ。
UnityのTimelineを一時停止する方法【再生する方法も説明あり】
Timelineとしては次のような図になります。記事用のTimelineということで「ArticleTimeline」と名付けています。
エッセンス的には次の2つですね。
- Unityのロゴをタイムラインで動かし、途中で一時停止する。
- 一時停止した状態からボタンを押すと、タイムラインが再生する。
それでは解説していきます。
Timelineを一時停止するにはSignal Emitterを使用する
Timelineを一時停止させるためには、SIgnal Emitterの機能を使用して、スクリプトを動かす必要があります。そしてそのスクリプトの中でPlayableDirector.puaseメソッドを呼び出すことで一時停止することができます。
詳しい使い方は次のような感じです。
一時停止と再生のメソッドを持つスクリプトでスクリプトを作る
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Playables; public class RestartButton : MonoBehaviour { public PlayableDirector playableDirector; public void puase() { playableDirector.Pause(); } public void restart() { playableDirector.Resume(); } }
重要となるのは、PlayableDirector.Pauseメソッドで停止して、PlayableDirectorResumeメソッドで再生している点ですね。二つのメソッドを利用するために「UnityEngine.Playables」パッケージをusingしてます。
ここで変数playableDirectorを宣言していますが、これは後にinspectorでTimelineオブジェクトをアタッチするために使用します。
スクリプトをアタッチする
今回はスクリプトをボタンにアタッチしておきましょう。一時停止用のメソッドは再生用のメソッドと分けて画像用のゲームオブジェクトにアタッチしておいてもいいですが、今回はスクリプトをまとめて書いているので、両方ともボタンにアタッチします。
ボタンをクリックしたときにはrestartメソッドを動かしています。そしてPlayable DirectorにはTimelineオブジェクトをアタッチしています。
Signal Emitterを使う
本解説の目玉の部分である、Signal Emitterについてです。
imageのTimelineの所を右クリックして、「Add Signal Emitter」を選択します。
Timeline上に白いマークが表示されるので、それを選択するとinspectorが次のようになります。
「Create Signal」ボタンを押して、新規にSignalを作成します。(本解説内ではPauseSignalという名前で作りました。)
そして「Add Signal Reciver」ボタンをクリックして、シグナルを受信したときの動きを作ります。
ここで何をしているかというと、「Create SIgnal」でシグナルを送信する部分を作りました。そして「Add Signal Reciver」でシグナルを受信するところを作っています。
例えると、Timelineの白いマークのところまで来ると「シグナル」というボールを投げて、Signal Reciverでそのボールをキャッチして指定されたスクリプトを動かすというような感じです。
そのためSignal Reciverにはシグナルをキャッチしたときのスクリプトを指定します。スクリプトを指定すると次のようにpauseメソッドを呼ぶようにします。
以上で、Timelineを一時停止させて、TImelineを再開させる機能を実装できました。