【はじめに】
ソフトウェアを開発する際、繰り返し使うUI(ボタン、ヘッダー、カードなど)や機能的な部分を「部品(コンポーネント)」化して再利用できるように意識すると思いますが、プロジェクトを跨いで再利用をすることについて考えたことはありますでしょうか?Unreal Engineでは「プラグイン」機能を使用することで、プロジェクトを跨いだ再利用が可能です。
しかし、外部のプラグインは導入したことがあっても、自作でプラグインを作成したことがある人は少ないのではないでしょうか?そこで、今回はUnreal Engine経験者向けに、自作プラグインの作り方やコツなどを紹介いたします。
【Unreal Engineとは】
Unreal EngineはEpic Games社が開発した、高品質な映像表現と多機能性を備えたゲームエンジンで、Windows用やMac用など、複数の異なるOSやデバイスのアプリを1つのプロジェクトを元に作成できます。またゲーム開発だけでなく、自動車、建築、映像制作、シミュレーションなど幅広い業界で活用されています。
主な特徴は以下です。
-
高品質なビジュアル表現
リアルな質感や光の反射を再現でき、製品や空間のイメージを正確に伝えることが可能 -
即時反映できる編集環境
設定を変更するとその場で画面に反映されるため、試作や検証のスピードが向上 -
ノーコード開発を支援するBlueprint
「Blueprint」というビジュアルスクリプティングでプログラミング知識がなくても、ブロックを組み合わせる感覚で動作を設定可能
【Unreal Engineにおけるプラグインとは】
プラグインとは、“機能を拡張するソフトウェアコンポーネント”です。
プラグインを導入することで、プロジェクト内のコードを変更しなくても新しい機能が利用できたり、標準で搭載されている開発ツールを独自で変更したりできる便利な拡張機能となっています。
プラグインの主な特徴は以下です。
- 使用者が有効化、無効化を自在に選べるため自由度が高い
- Unreal Engine側で標準搭載されているため簡単に導入可能
- 自作でカスタムしたプラグインが作成可能
【プラグインの活用タイミング】
複数のプロジェクトで汎用的に使用したい実装がある際、Unreal Engine内で作成したBlueprintやC++をそのまま別プロジェクトにファイルごと移植することも可能ですが、移植する際にファイルの依存関係やファイルパスの問題で移植がスムーズにできず、再度実装が必要になり、二度手間が発生することがあります。
プラグインとして予め機能を切り出しておけば、プラグインごと移植するだけで簡単に、再実装することなく活用できます。
【既存のプラグイン例】
試しにUnreal Engineに標準搭載されているプラグインを導入してみました。
今回導入したのは「Modeling Tools Editor Mode」という、Unreal Engine内で直接スタティックメッシュ(※1)という3Dモデルを自分で作成することができるプラグインです。これを導入することで、立方体や円柱、三角錐などの基本的な形状のモデルや、面をへこませたり膨らませたりして地形などを作成することができます。
導入した結果、簡単に階段の3Dモデルを生成することができました。
※1:スタティックメッシュ
ゲームエンジンなどで使われる「形状が固定された(変形しない)3Dモデル」のことで、建物、家具、岩、木などの背景オブジェクトや小物を表現するのに使われ、移動・拡大縮小・回転はできても、メッシュ自体がポーズを変えるような変形(骨格アニメーション)はしないのが特徴
【自作のプラグインの作り方】
次に自作プラグインの作成方法を説明します。
①プラグインフォルダを作成する
まずは、中身のコンポーネント等を入れるための入れ物に当たる、プラグインフォルダを作っていきます。
エディター上部の編集 > プラグインからプラグインの作成画面を開きます。
移動するとプラグインの選択画面ページが出ますので、左上の追加ボタンを押します。
以下のページが表示されますので、プラグインテンプレートを選択し、プラグイン名を記入します。
テンプレートには多数の種類がありますので、目的に合ったテンプレートを選びましょう。
例えば、先ほど例に挙げた「Modeling Tools Editor Mode」は以下のプラグインテンプレートの中だと、「エディターモード」に該当します。
プラグインフォルダを作成し終わると、コンテンツブラウザに“Plugins“というフォルダが作成され、その中に今作ったプラグインが格納されます。
②プラグインの機能を作成
①のプラグインフォルダの作成が完了したら今度は自分が作りたい機能をプラグイン内に作っていきます。
ここの実装の仕方は、普段Unreal Engineで実装しているときと変わりません。自身が作成したプラグインフォルダ内に移動し、右クリックで各アセットが作成できます。
プラグインを作成する際のコツとしては、以下2点です。
✓ どの範囲までの機能をプラグイン内にまとめると実際に使いやすいか、事前によく検討すること
✓ プラグイン内の処理が、プラグイン外の処理に依存しないように設計すること
これらを意識して作成することで、他のプロジェクトに移植しても問題なく活用でき、また手戻りも発生しにくくなります。
【実際にプラグインを作成してみた】
今回は、「コンテンツのみ」のテンプレートを使用して、キーボード入力を受け付けた際に、あるオブジェクト周辺の指定位置から、別のオブジェクトが出現するという機能を含んだプラグインを作成してみました。
このプラグインを使用すると、例えば以下のようにキー入力を受け付けるたびに、アバターの頭上からハンバーガーを落下させるというようなこともできます。
【今回作成したプラグインを再利用してみた】
今回は機能本体を「アクターコンポーネント」というマップ上に配置できるオブジェクトに、機能や特性を追加するためのクラスで作成したため、キャラクター以外のオブジェクトにもこのクラスを持たせるだけで、プラグインの機能を簡単に使用することができます。
そのため、以下のようにプラグインを別のオブジェクトであるレンガのブロックにも汎用的に使いまわすことができました。
【さいごに】
1案件で2つ以上のプロジェクトを管理する際や、特定の汎用性の高い機能をプロジェクトに拡張機能として持たせたい際に、プラグインは非常に効果的です。また、プラグインを活用することによって、各機能の依存関係などが明確になるというのもメリットの一つだと思います。
本資料が皆様のお役に立てば幸いです。
また、当社ではUnreal EngineやUnity、NVIDIA Omniverseを活用した開発やデジタルツイン、xRの取り組みを活かしたアプリケーションの開発も行っております。
詳しい内容については、当社までお気軽にお問い合わせください。
Edge IoT事業部 第1システム部
吉武 美来
※Unreal Engine®は、Epic Games, Inc.の米国およびその他の国における商標または登録商標です。
※Unityは、Unity Technologiesの米国およびその他の国における商標または登録商標です。
※NVIDIA®、Omniverse® は、米国およびその他の国における NVIDIA Corporation の登録商標または商標です。
※本ページに記載されている製品名、サービス名、会社名などは、それぞれの企業の登録商標または商標です。
【公式X(旧Twitter)】