UnityのTimelineの速度を変更する方法を紹介します。インスペクターからもできますが、スクリプトからもできます。
両方紹介するので、是非役立ててください。
UnityのTimelineの速度をインスペクターで変更する方法
Timelineの速度をインスペクターで変更する場合は、Clip Timingの所にある、Speed Multiplierを変更しましょう。指定する値は乗数なので、2にすると2倍になりますよ。
もし「Timelineの部分がClipじゃないんだけど・・・」って人は下のようにトラックの所の右クリックメニューにある「Convert To Clip Track」にすれば、Clipになってくれます。
UnityのTimelineの速度をスクリプトで変更する2つの方法
次にスクリプトでUnityのTimelineの速度を変更する方法を説明します。サンプル的には次のツイートのロゴ画面のスキップみたいな感じですね。
ロゴ表示中に、クリックしたら速度を早くする感じでスキップしています。
ここ最近TimelineとかAnimatorとかを扱っていたが、ようやく基本的なところは抑えられた。成果物的には動画みたいな感じ。ロゴ表示→プロローグ→タイトル画面みたいなやつが実装できるようになり、小技も身に付けた。
明日ブログに書くぜ。 pic.twitter.com/vR1f78FbBu— よしゆき@ソロゲームクリエイター (@yoshiyukilife) November 21, 2020
クリップ単位で速度を変更する方法
先ほどインスペクターで変更する方法を紹介しましたが、これをスクリプトから変更できます。今回はこの方法は使っていないので、さらっと紹介します。
重要な部分のみ抜粋すると次のようになります。
using UnityEngine.Timeline; public class TimelineController : MonoBehaviour, IPointerClickHandler { public TimelineAsset timelineAsset; public void OnPointerClick(PointerEventData pointerData) { IEnumerable<TrackAsset> tracks = timelineAsset.GetOutputTracks(); foreach (var track in tracks) { Debug.Log(track.name); IEnumerable<TimelineClip> clips = track.GetClips(); foreach (var clip in clips) { Debug.Log(clip.displayName); clip.timeScale = 5.0f; } } } } }
timelineAssetはインスペクターから指定できるようにして、速度を変えたいTimelineをアタッチします。GetOutputTracksでトラック一覧を取得して、トラックからGetClipsでクリップ一覧を取得して、クリップのtimeScaleに速度の倍率を変更すればOKです。
一つだけのクリップをピンポイントで変更する場合は、変更したいトラックとクリップを名前(サンプルでDebug.Logで出力している名前)から特定して変更してください。
なお注意点としては、GetClips()でクリップにアクセスするときは先に示した「Convert To Clip Track」でクリップにしておく必要があります。
Timeline単位で速度を変更する方法
Timeline全体の速度を一括で変更する方法があります。今回はこれを使いました。
今回はロゴのTimelineをスキップしたかったので、この方法で5倍速にして、スキップを演出しました。
using UnityEngine.Playables; public class TimelineController : MonoBehaviour, IPointerClickHandler { public PlayableDirector playableDirector; public void OnPointerClick(PointerEventData pointerData) { playableDirector.playableGraph.GetRootPlayable(0).SetSpeed(5.0f); } }
playableDirectorには速度を変えたいTimelineをアタッチしておきます。で、playableDirector.playableGraph.GetRootPlayable(0).SetSpeed()で変更してます。
こっちの方が簡単ですね。
UnityのTimelineの速度を変更できれば演出の幅が広がる
UnityのTimelineの速度を変更する方法を説明しました。
スピードって、アニメーションではかなり重要な要素ですよね。これがスクリプトから自在に操れると、色々と演出とかUIの幅が広がりますね。
ガンガン使っていきましょう!