地形を自動生成したり、掘り進んだり、あるいは自由に積み重ねたり。UEマーケットプレイスアセットから無料でダウンロードできる「VoxelPlugin」を使えば、まるで『Micecraft』のような仕組みをゲームエンジンに簡単に取り込むことが可能です。本記事では無料版の「VoxelPlugin Free」を使用し、ボクセル特有の機能である地形を掘る機能を作成するまでの手順をハンズオン形式で紹介します。
TEXT / 神谷 優斗
EDIT / 神山 大輝
目次
無限大の地形生成や地形に穴を掘る、ボクセルに変換したメッシュの形状をゲーム内で自由に変えるなどの機能をゲームに取り入れたい時に役立つ「VoxelPlugin Free」。
この仕組みを採用すれば、アイデア次第でクリエイティブ系の作品を自分自身で作ることも可能になります。今回のハンズオンを通して、ボクセルの強みを体験してみましょう。
ボクセルとポリゴンの違い
そもそも、ボクセルとはいったいなんなのでしょうか?
アンリアルエンジンなど一般的なゲームエンジンで標準的に扱われる3Dデータは「ポリゴン」と呼ばれる形式です。ポリゴンは頂点と、それを繋いだ面から構成されています。スタティックメッシュやスケルタルメッシュなども、頂点と面によって構成されたポリゴンデータです。
一方で、VoxelPluginでは「ボクセル」形式で3Dデータを扱います。ボクセルは3次元空間上のドット絵のごとく、立方体の積み重ねで形を表現します。ポリゴンにおける頂点や面は体積をもたない(ペラペラ)のに対し、ボクセルは体積を持つのが特徴です。
「ボクセル」だからできることとは
ゲームにおいて、ボクセルデータを使用する最大のメリットは『動的な(リアルタイム)編集が可能』であるということです。
例えば、ポリゴンの頂点を一つ消してみたときを考えてみましょう。その頂点を使っていた面も同時に消えてしまい、メッシュに穴が開いてしまいます。そのままではゲーム的に破綻しているため、「メッシュを作り直す」という必要に迫られますが、処理が難しくゲームではほとんど採用されません。
同様に、ボクセルを一つ消したときを考えましょう。
個々のボクセルは独立した存在であり、消したり増やしたりしても他のボクセルに影響はありません。また、ボクセルは積み重ねであるため、下図のように中身のデータを持っておくことが可能です。
編集に柔軟に対応できるボクセルであれば、ポリゴンでは困難なゲーム中に物体の形を編集する機能を簡単に実現できるのです。
VoxelPluginで洞窟を掘り進んでみよう
ボクセルの特徴が分かったところで、ここからは実際にVoxelPluginを使って、目の前の地形を掘る処理の実装手順を解説していきます。
プラグインの導入
最初に、VoxelPlugin Freeを使用するためにプロジェクトにプラグインを導入しましょう。マーケットプレイスからVoxelPlugin Freeを入手し、任意のバージョンのアンリアルエンジンにインストールします。
プロジェクトを開き、プラグインメニューからVoxelPlugin Freeのチェックボックスにチェックを入れましょう。
指示に従い再起動すれば、VoxelPluginの導入は完了です。
新規レベルを作成する
次に、ボクセルの地形を追加するためのレベルを作成します。エディタ左上の「ファイル」タブから「新規レベル」をクリックします。
「Basic」を選択し、「作成」をクリックして新規レベルを作成します。
VoxelWorldアクタを配置する
VoxelPluginでは、「VoxelWorld」というアクタがボクセル空間を生み出しています。作成したレベルにVoxelWorldを追加し、元々ある「Floor」アクタを削除しましょう。
これで、VoxelWorldによってボクセルの地面が生成されます。
VoxelWorldアクタの設定を変更する
VoxelWorldアクタの設定を少し変更し、ワールドの見た目をデフォルトからガラッと変えてみましょう。以下のように設定を変更します。
サンプルキャラクターの改造
ここまで準備が済んだところで、地面を採掘するキャラクターを作っていきましょう。今回は、プラグインのサンプルコンテンツに存在するキャラクターを改造する形で採掘機能を実装していきます。
サンプルキャラクターのブループリントを開く
コンテンツブラウザに追加されているVoxelPluginのコンテンツフォルダ「Voxel コンテンツ」から「Example」→「CubicDestruction」を開きましょう。
「CubicDestruction_FirstPersonCharacter」というキャラクターBPが存在するので、「コンテンツ」へドラッグアンドドロップし、「ここにコピー」でブループリントをコピーします。
コンテンツフォルダに移動し、先程コピーしたブループリントを開きましょう。この際、もとのブループリントと区別をつけるため、リネームしておくと良いでしょう。
インプットアクションを修正する
ブループリント内のインプットアクションが上手く紐づけられておらずエラーが発生しているため、修正します。
エディタ左上の「編集」タブから「プロジェクト設定」を開きます。「エンジン – インプット」設定から、既にブループリントにあるものと同じ名前(JumpやMoveForwardなど)のインプットアクションを作成します。その後、同じく「エンジン-インプット」画面上で操作方法を割り当てていきます。
射撃をフルオートにする
入力がある間は継続的に採掘してもらいたいので、今回は簡易的なフルオート射撃を実装します。
下図のように新しくBool変数を作り、インプットアクション「Fire」でトグルするようにします。射撃処理の部分にはTickを繋ぎ、Fireが押されているときのみ処理が走るようにします。仕組みが分からなくても、下図のブループリントを真似すれば実装できるはずです。
なお、射撃処理の中にあるPlay Soundは毎Tick再生すると非常にうるさいため、消してしまっても構いません。
採掘範囲を決める
もとのブループリントでは削除範囲がランダムに設定されていますが、このままだと範囲が狭く形も歪になってしまうため、定数に置き換えます。「Random Range Float」関数を「Make Literal Float」に置き換え、Valueを300程度にしてみます。
破片のマテリアルを変更する
射撃処理の後に、岩が砕けたようなビジュアル表現としてCubeのスタティックメッシュがいくつかスポーンするようになっています。現在は違和感のある表現になっているため、修正しましょう。
「Create Dynamic Material Instance」関数のParentに、地面と同じ「MI_AerialGrassRock_BrownMudRocks」マテリアルを設定します。
次に、メッシュのスポーン判定処理の回数を減らすため、「For loop」のLast Indexを20程度に指定します。そして、メッシュのサイズを小さくするために「Voxel Size」を除算している部分を250程度の値に指定しておきましょう。
これで、採掘時に破片として現れるメッシュが自然な表現になります。以上でキャラクターブループリントの編集は完了です。
作成したキャラクターをデフォルトのポーンクラスに設定する
このままではプレイしてもキャラクターがスポーンしてくれません。コンテンツドロワーを右クリック(もしくは+追加)からブループリントクラスを追加し、新規にGameModeクラスを作成します。続いて、作成したGameModeをダブルクリックし、画面右側にある「Default Pawn Class」に先程編集したキャラクタークラスを設定しましょう。
最後に「ワールドセッティング」のゲームモードオーバーライドに先ほど作成したGameModeクラスを指定すれば、プレイ時に作成したキャラクターがスポーンしてくれます。
完成!
以上で今回の作業は完了です。エディタでプレイして実際に動くか確かめてみましょう。
作ったゲームを発展させる方法
今回実装したのはボクセルデータを消去する処理のみですが、それ以外にも様々な機能が用意されています。皆さんの想像力を発揮させて、ゲームをさらに発展させてみましょう。以下にその例をいくつか提案します。
VoxelWorldアクタの設定を変えてみよう
「VoxelWorld」の設定を少し変えるだけでも面白い変化が見られます。
爆発する敵キャラクターを作ってみよう
今回使用した「Remove Sphere」関数は、球形の範囲内のボクセルを消去する関数です。採掘以外に、爆発のVFXなどと組み合わせてみても面白い表現ができるでしょう。AIの知識がある方は、爆発して周囲の地形を破壊する敵キャラクターを作ってみても良いかも知れません。
地形を盛る処理を作ろう
ボクセルを消す(Remove)処理と同様に、ボクセルを生成する(Add)処理も当然用意されています。キャラクターに追加で、地形を盛る機能を持たせてみましょう。
「VoxelPlugin」でできること
これまで見てきたように、VoxelPluginを使えばアンリアルエンジンにボクセルの概念を取り入れることができます。通常の機能では実装が難しい、ダイナミックな地形編集が容易に実現できます。
最後に、VoxelPluginの主な機能をいくつか紹介します。
地形のリアルタイム編集
今回実装した機能のように、地形の動的な編集はボクセルの得意とするところです。工夫次第で創造的なプレイを促すゲームを生み出せるでしょう。
地形のリアルタイム編集
今回実装した機能のように、地形の動的な編集はボクセルの得意とするところです。工夫次第で創造的なプレイを促すゲームを生み出せるでしょう。
また、VoxelWorldのデータはセーブ&ロードできるため、ゲーム内でせっかく編集したデータが残せない、といったことはありません。
Minecraftのような自動ワールド生成
独自のアルゴリズムを与えることで、Minecraftと同じように無限に広がる地形を自動生成する機能が提供されています。オープンワールドを作成する際の土台として活用するなど、これだけでも導入する価値があると言えます。
生成した地形にZ座標などに応じてアクタをスポーンさせる設定もあり、工夫すれば地面に木を生やすような表現も可能です。工夫次第で創造的なプレイを促すゲームを生み出せるでしょう。
マテリアルのブレンド
VoxelWorldでは、異なるマテリアルを5段階でブレンドする独自のマテリアルを使用できます。バイオームの継ぎ目などでも違和感のないマテリアル遷移が実現できるでしょう。
VoxelPluginは現在も精力的な開発が進められており、今後のアップデートにも期待できます。皆さんも是非、VoxelPluginでボクセル世界を作ってみましょう!
コーヒーがゲームデザインと同じくらい好きです
関連記事
注目記事ランキング
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
連載・特集ピックアップ
西川善司が語る“ゲームの仕組み”の記事をまとめました。
Blenderを初めて使う人に向けたチュートリアル記事。モデル制作からUE5へのインポートまで幅広く解説。
アークライトの野澤 邦仁(のざわ くにひと)氏が、ボードゲームの企画から制作・出展方法まで解説。
ゲーム制作の定番ツールやイベント情報をまとめました。
東京ゲームショウ2024で展示された作品のプレイレポートやインタビューをまとめました。
CEDEC2024で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブル2024で行われた講演のアーカイブ動画・スライドをまとめました。
CEDEC2023で行われた講演レポートをまとめました。
東京ゲームショウ2023で展示された作品のプレイレポートやインタビューをまとめました。
UNREAL FEST 2023で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブルで行われた講演のアーカイブ動画・スライドをまとめました。
UNREAL FEST 2022で行われた講演レポートやインタビューをまとめました。
CEDEC2022で行われた講演レポートをまとめました。
今日の用語
プレイアブル(Playable)
- ゲームをプレイすることができる状態。
- 1の状態の実行ファイルのこと。
- プレイヤーの操作が可能な状態。操作可能なキャラクターのことをプレイアブルキャラクター(Playable Character)と呼ぶ。