ゲーム制作

UnityのTimelineの速度を変更する2つの方法【スクリプトからできる】

 

UnityのTimelineの速度を変更する方法を紹介します。インスペクターからもできますが、スクリプトからもできます。

両方紹介するので、是非役立ててください。

 

UnityのTimelineの速度をインスペクターで変更する方法

Timelineの速度をインスペクターで変更する場合は、Clip Timingの所にある、Speed Multiplierを変更しましょう。指定する値は乗数なので、2にすると2倍になりますよ。

UnityのTimelineの速度をインスペクターで変更する方法

 

もし「Timelineの部分がClipじゃないんだけど・・・」って人は下のようにトラックの所の右クリックメニューにある「Convert To Clip Track」にすれば、Clipになってくれます。

UnityのTimelineの速度をインスペクターで変更する方法

 

参考:クリップの再生スピードの変更(公式)

UnityのTimelineの速度をスクリプトで変更する2つの方法

次にスクリプトでUnityのTimelineの速度を変更する方法を説明します。サンプル的には次のツイートのロゴ画面のスキップみたいな感じですね。

ロゴ表示中に、クリックしたら速度を早くする感じでスキップしています。

 クリップ単位で速度を変更する方法

先ほどインスペクターで変更する方法を紹介しましたが、これをスクリプトから変更できます。今回はこの方法は使っていないので、さらっと紹介します。

重要な部分のみ抜粋すると次のようになります。

using UnityEngine.Timeline;
public class TimelineController : MonoBehaviour, IPointerClickHandler
{
  public TimelineAsset timelineAsset;

  public void OnPointerClick(PointerEventData pointerData)
  {
      IEnumerable<TrackAsset&gt 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の幅が広がりますね。

ガンガン使っていきましょう!

 

-ゲーム制作