Unreal Engine5.5 シーケンサーでプレイヤーの実装
Unreal Engineのシーケンサーを任意のタイミングでスタートする仕組みを作っていきます (コンサートや舞台などで活用ください)
日本ではショーマスタークロック、いわゆるSMPTEタイムコードが大型の案件においては一般的になりつつありますが、何らかの理由で受け取ることが出来なかったりかえって面倒である場合はクリック音声を聞いてプレイヤーをスタートさせる事があります。(1.2. 1.2.3.4.など)
そんな場面でUnreal Engineを任意のタイミングでスタートさせる仕組みを紹介していきます。
大まかな流れ
基本的な考え方は曲や場面ごとにLevelを読み込むのではなく、あらかじめ全ての構成をロードしておき、Visibleを切り替えていきます。(レベルの切り替えには時間的に余裕を持ちましょう)
Jsonファイルを元に曲名とスタートポジションを呼び出します。
曲名を呼び出す瞬間にLevelのvisibleのToggleのオンオフを操作していきます。
再生中に再生速度をシームレスに変更し、再生スタートでズレたタイミングを調整します。
手順
1.曲ごとのLevel SequenceとLevelを作成
2.プロジェクトの直下にJsonというファイル作成、ファイル内にSetList.jsonを作成(ファイル名はなんでも良い)、曲名とスタートポジションを書く。
3.各所イニシャライズを実行するBlue Printを作成
4.プレイヤーの設定
1.曲ごとのLevel SequenceとLevelを作成
どこに作っても良いですが、今回はこのように作りました。
そして作ったLevel SequenceをLevel内に配置しておきます。
Persistent Levelを作って、曲ごとのLevelを入れておきます。
2.プロジェクトの直下にJsonというファイル作成、ファイル内にSetList.jsonを作成(ファイル名はなんでも良い)、曲名とスタートポジションを書く。
今回は使用しませんがタイムコードチェイス時にStart,endのフレームを取得してこのフレーム内にタイムコードが来た場合にシーケンスを呼び出すプログラムを組むためのものです。
今はname,clickの数値が取得できればOKです。
3.各所イニシャライズを実行するBluePrintを作成
ActorからBlueprintを作成し、編集していきます。(BP_PLayerなど)
このような感じでEvent Bigin Playでイニシャライズするマクロを作っていきます。
まずはinitialize(マクロ)で初期化をして、DoChangeSong(マクロ)で曲を呼び出します。
・Initialize マクロ
JsonファイルをParseしてまずはSong NamesというStringの配列(セットリストのようなもの)と各曲のスタート位置の配列(Click)を作ります。
Jsonはこのプラグインを使ってます。
一応イニシャライズ出来たかPrintしておきます。
SongNamesの配列を元にStringとシーケンスを紐づけていきます。
下の方のOSC送っているのはコントローラーのアプリに送って曲名などを表示させるためです。今回は無視してください。
・Do Change Song マクロ
全てのレベルを読み込んで、カレントの曲に指定されているレベル以外はVisibleをオフにします。
レベルの設定はAlways Loadedにしてください。
レベルのロードが終わったらシーケンスプレイヤーを停止の状態で呼び出します。
Set Current Sequenceという関数の中身です
以上で初期化からスタンバイ状態までが完成です。
4.プレイヤーの設定
再生と停止、一時停止はこのような組み方です。
ここで呼び出された曲に対応したスタート位置がJSONから呼び出されます。
クリックのこの位置で再生を開始したいというフレーム番号を控えておき、何回か練習してJSONの値を微調整します。
プレイ速度の調整です。
ここでは0.1ずつ可変していきます。
Set Play Rate関数の中身です。
次曲、前曲の呼び出しです。
5.シーケンサーの設定
シーケンサーはAuto Playのチェックは外す、LoopはDon'tLoopの設定にします。
初期値から変更していなければOK。
フレーム表示などは任意のものをお使いください。
Clock SourseはPlatformにしないと音声と映像がずれてしまいます。
まとめ
以上、色々端折って説明しておりますが、このような流れでシーケンサーをコントロールすることができると思います。
実際にプレイヤーとして使う時にはコンソールとしてMidiコンを使ったり、タイムコードと同期させたり、コントローラーアプリを使ったり、もう少し込み入った技術も必要になってくるかもしれません。コントローラにはOSCで曲名や現在のタイムコードを送ったり、スタートのキューをOSCで受け取ったりともう少し改良が必要です。
次回はその辺りに触れていこうと思います。
Discussion