はじめに
おはようございます。Sigcomのleicoです。今回は Unreal Engine Advent Calendar 2024 に参加させていただきました。
この記事では、UE5.5で作成したMIDIを再生するプラグインの紹介と、今後の展望についてお話しします。
製作の背景
Sigcomでは、BEAT AIMER! というリズムシューティングゲームを開発・発売しています。
このゲームの譜面制御にMIDIファイルを使用していますが、以下のような課題がありました。
-
プラグインがUE5非対応
利用していた外部プラグインがUE5に対応しておらず、移行が困難でした -
Harmonixの制約
UE5から公式プラグインでHarmonixが提供されていますが、以下の理由で要件を満たせませんでした:- Beta版のため、既存のMIDI譜面の再生が不安定
- MetaSoundプラグインであるため、MetaSound外での操作が制限され、オブジェクト制御が煩雑
これらの課題を解決するため、自社でMIDIプラグインの製作をすることとなりました。
プラグインの配布場所
Fab.comの審査通りました🙌
こちらから入手できます↓↓↓
https://fab.com/s/8d448a873b22
プラグインの概要
本プラグインは、MidiFile ライブラリを使用してMIDIファイルの読み込みとメッセージ処理を実現しています。
プラグインでは、以下の7つのBlueprintノードを提供しています。
以下は、このプラグインを使用してMIDIの再生からNoteOn
/NoteOff
/CC
メッセージをパースし、デバッグ出力するまでのサンプルです。
このプログラムで、Web上で配布されているMidiを無作為に選んで再生してみました。
フリーのBGM用音楽素材[MIDI]からアイネ・クライネ・ナハトムジークを再生した時の画像です。
この例ではレベルブループリントで実行していますが、アクターブループリントやその他のブループリントでも同様に、MIDIファイルの読み込みや再生が可能です。
プラグイン製作で得られた知見
多くの断片化された情報を集約しながら実装を進める必要がありましたが、結果的にUnreal Engineプラグイン開発に必要となる以下の知識を網羅的に習得できたのではと思っています。
- サードパーティライブラリの統合
プロジェクトに外部ライブラリを組み込み、利用可能にする手順 - エディタ機能の拡張
- MIDIファイルをインポートし、
uasset
としてプロジェクトに保持する - インポートした
uasset
を読み込み、Blueprintで利用する
- MIDIファイルをインポートし、
- ランタイム機能の拡張
- MIDIの再生機能を実装
- 以下のようなBlueprintノードを実装する:
- 複数の戻り値を持つ
- 複数の実行ピンを持つ
- 配列を戻り値とする
- モジュール化
各機能をモジュール化し、一つのプラグインとして統合
本来、クラスが別れていればよい程度の構造化で済む内容だと思うのですが、
4.のモジュール化は2.のエディタ拡張と3.のランタイム拡張を1つのプラグインに統合するためには必須の知識と実装方法でした。
「作って覚えるUnreal Engineプラグイン開発」執筆計画
作り終えて、Midiプラグイン開発は一般的なプラグイン開発の知識に加えて
- 断片化されてまとまっていない
- リファレンスにも書かれてない
- ほとんどのプラグイン開発には不要
- だが年1くらい必要になる
知識をちょうどいい難易度で学習できる良い機会になるのでは? と感じました。
Zenn辺りで、このMidiプラグインを実際に作りながら学べる「UE5作って覚えるUnreal Engineプラグイン開発(仮)」を書こうかと計画中です。
進展ありましたらこちらにまた追記します。
SigcomのXアカウント でもポストすると思いますので、興味ありましたらフォローいただけるとありがたいです。
プラグイン開発に関する質問や相談もお気軽に、可能な範囲でお答えします。
開発のご依頼やコラボレーションのご提案も大歓迎です。お気軽にお問い合わせください。