2024年7月19日(金)から9月8日(日)にわたって開催された、アンリアルエンジンの学習を目的としたゲーム制作コンテスト「第22回UE5ぷちコン」。今回は「遊園地」をテーマに373作品の応募がありました。
本記事では、最優秀賞を受賞した『ワンオペ遊園地』の制作チーム「ポッピノン」の菱田さん/岸さんに、企画から実装に至るまでの工夫やこだわりについて伺いました。
2024年7月19日(金)から9月8日(日)にわたって開催された、アンリアルエンジンの学習を目的としたゲーム制作コンテスト「第22回UE5ぷちコン」。今回は「遊園地」をテーマに373作品の応募がありました。
本記事では、最優秀賞を受賞した『ワンオペ遊園地』の制作チーム「ポッピノン」の菱田さん/岸さんに、企画から実装に至るまでの工夫やこだわりについて伺いました。
TEXT / 浜井 智史
INTERVIEW&EDIT / 神山 大輝
PHOTO&EDIT / 神谷 優斗
ポッピノン 菱田さん
アプリケーションプログラマーとしてコンシューマーゲームの開発に携わっている。「第22回UE5ぷちコン」では「ポッピノン」として岸さんと2人で参加し、応募作『ワンオペ遊園地』が最優秀賞を受賞。
『ワンオペ遊園地』では企画・プログラミングを担当する。
ポッピノン 岸さん
美術系大学を卒業後、現在はVFXアーティストとして菱田さんと同じゲーム会社で働いている。菱田さんから「第22回UE5ぷちコン」に誘われ、ゲーム制作に初挑戦。応募作『ワンオペ遊園地』が最優秀賞を受賞。
『ワンオペ遊園地』ではアートワーク全般を担当する。
――まずは自己紹介として、ご経歴や『ワンオペ遊園地』でご担当された箇所を教えてください。
菱田:ポッピノンの菱田です。『ワンオペ遊園地』ではプログラミングを担当したほか、企画立案やディレクター的な動きもしていました。
本業はゲーム会社のアプリケーションプログラマーで、コンシューマーゲーム開発に携わっています。個人制作としては、学生時代にUnityでパズルゲームを1本と、就職の際にC++の勉強として縦スクロールシューティングを作った経験があります。
岸:ポッピノンの岸です。菱田と同じゲーム会社でVFXアーティストとして働いており、2人とも今年で6年目となります。『ワンオペ遊園地』ではアートワーク全般を担当しました。大学は美術系で、映像関係のコースを専攻していましたが、個人ゲーム制作は今回が初めてです。
――お2人は本業でもアンリアルエンジン(以下、UE)を使われているのでしょうか?
菱田:プロジェクトの手伝いで3か月ほど使ったり、以前アンリアルクエスト(※)に参加したことがあったりと、ひとまず操作はできる状況でしたが、実質初めてのような気持ちでした。今回はちょうど大きな休みが取れたため、UEの勉強もかねてぷちコンに挑戦しました。
※ エピック ゲームズ ジャパンが主催し、ヒストリアが運営するユーザー参加型イベント。課題を通して、アンリアルエンジンを使ったゲーム開発を学ぶことができる
岸:私はほとんどUE未経験で、しいて言えば学生時代に3ds Maxで作ったモデルをUEで出力したことがある程度です。今回はUE5のNiagaraでエフェクトを作る勉強がしたいと思って参加しました。また、インゲームで使われる全ての3Dモデルの自作にも挑戦しました。
――ここからは最優秀賞作品『ワンオペ遊園地』についてお伺いします。まずは、簡単にゲームの紹介をお願いします。
菱田:その名の通り、プレイヤーがワンオペで遊園地を運営するゲームです。制限時間内になるべく多くのお客さんをアトラクションに乗せて「いいね」をもらい、ハイスコアを目指します。
ステージ終了後、獲得した「いいね」の数に従い最終評価が与えられます。最低クリア条件を満たせば次ステージに進出できる仕様ですが、最高評価を得る難易度は高く設定しています。
「いいね」をもらえるタイミングは、アトラクション搭乗時/終了時の2回。時間内にちゃんと案内できればおのずと「いいね」が溜まっていく仕様ですが、お客さんを待たせすぎると途中で帰られてしまいます。
また、アトラクションは電力が切れると一斉に停止してしまうので、合間を見て発電機で充電が必要です。これらのタスクをいかに効率よく捌けるかが高得点につながります。
――企画はお2人で一緒に立ち上げたのでしょうか?
菱田:もともとは僕1人で応募するつもりでしたが、途中で岸に企画原案を伝えたとき「せっかくだから一緒にやろうか」となりました。
岸:私が企画を聞いた頃には、既にゲームの大枠は完成していましたね。「ワンオペ遊園地ってどう?」と聞かれたとき、めちゃくちゃいいじゃんと思いました。ゲーム性が伝わりやすいワードで、とても気に入りました。
――今回のぷちコンのテーマは、従来のように広い意味合いで取れる言葉ではなく、「遊園地」というダイレクトな一般名詞でした。これを受けてどのように企画をイメージしましたか?
菱田:当初はシューティングゲームや写真を撮るゲームなど全く異なる方向も模索していましたが、最終的にはシンプルにそのまま遊園地を使う企画に落ち着きました。
――そこから遊園地全体を使った経営ゲームの路線に進んだんですね。
菱田:岸が『Overcooked』などの経営シミュレーションゲームが好きなので、その印象も頭にあったのかもしれません。
2人で企画を相談する中で「より大きなゲームにしたい」と構想が膨らんでいきました。ゲームを朝パート/夜パートに分割して、日中に稼いだ資金で夜中に遊園地を増設し、来場者数を増やしていくという、今より大規模なゲームを考えていました。
岸:夢は大きく持ったほうがいいということで、いろいろと発想を広げてみました。ただ、時間的にも全てを盛り込むのは厳しいため、最低限面白さに必要なものだけに要素を絞った結果、今のゲームデザインになりました。
菱田:効率よくお客さんを捌き、たくさん楽しませて「いいね」をもらう。「忙しさと効率」という部分が最後に残りましたね。
――限られたリソースの中で実現可能な面白さの核を突き詰めたということですね。開発はどのくらいの期間で行いましたか?
菱田:7月末から1週間で企画を考え、8月初頭に岸が合流し、そこから約1か月間ぶっ通しで制作していました。また、開発初期は企画を詰めるのと同時にUE5の勉強も行っていました。
岸:私は当初コンテンツブラウザの場所もわからない状態から勉強を始めて、UE5の操作に慣れるまで、少なくとも1週間ほどかかった記憶があります。
――ラーニングはどのように進めていったのでしょうか?
岸:公式チュートリアルや有志の方が書いた記事などを参考に勉強しました。
同時に、3Dモデルを自作するためにBlenderも勉強しました。エフェクト用のメッシュをHoudiniで作ったことはあるのですが、Blenderは初めて使ったので、テクスチャやUV展開などの知識もなく苦戦しました。
UE5については、マテリアルを作る方法やインポート周りの操作手順などを勉強する必要がありました。法線がひっくり返ってモデルの見た目がぐちゃぐちゃになったときは、原因を探るのが大変でしたね。
――岸さんはアートワーク全般をご担当されたとのことですが、Blenderのほかにはどのようなツールを使いましたか?
岸:UIのテクスチャなど2D素材全般では使い慣れているCLIP STUDIO PAINTを、それ以外だとAdobe After Effectsも使用しています。
――菱田さんはプログラミングや企画などでどのようなツールを活用しましたか?
菱田:企画では、口頭で話し合った内容をDiscord上にメモする程度で、特にツールなどは使っていません。
開発では、C++のコーディングにVisual Studioを使っています。本作では、読みやすさの観点から極力C++で実装を行い、ブループリントは簡単な動作の実装などに使う方針をとりました。そのほか、バージョン管理ではTortoiseSVNを使いました。
――企画をゲームに落とし込むにあたり、基盤のシステムはどこから作り始めましたか?
菱田:まずはキャラクターの動きやインタラクトのシステムを作りました。その後はアトラクションの仕組みのベースを作り、岸のモデルが完成したら都度対応させるといった流れです。
――アトラクションはどのような基準で選定したのでしょうか?
菱田:「遊園地にありそうかどうか」と「バリエーションに幅を持たせられるかどうか」を基準に選びました。搭乗人数や所要時間などを加味して、なるべく異なるタイプのアトラクションが揃うよう意識しています。
岸:アトラクションの配置は、菱田が設定した条件をもとに私がおおよその位置を決めました。まずラフを描いた後、レベル上に各アトラクションを仮置きし、相談しながら位置を決めていきました。
――具体的にはどのような条件が設けられたのでしょうか?
菱田:モデリングの工数が高いジェットコースターと水流アトラクションは、園内の端に配置して、画面に映る乗り場の付近のみを作成しました。乗り場だけでも乗り物の種類が伝わるため、画面外のコースを作成する必要がなく、工数を削減できていました。
菱田:また、発電機はどのアトラクションからも均等な距離にするため、必ずステージ中央に配置したいとお願いしました。
岸:ただ、発電機の滑車が目立つ位置に置かれていると、浮いて見える懸念もありました。花壇や噴水でカモフラージュできないかと頭を悩ませた結果、最終的には滑車を可愛い小屋で覆い隠すようにして、中央への配置と違和感のない見た目を両立させました。
――お客さんの待ち時間や搭乗人数などもレベルデザインと密接に関係する要素だと思いますが、どのように調整を施しましたか?
菱田:一巡あたりの「いいね」数や電力あたりの「いいね」数などをExcelで計算して、アトラクションごとに異なる特徴を持つように調整しました。
また、お客さんの出現数や頻度などをカーブデータで制作し、クリアするために複数のアトラクションを行き来する必要性が生まれるようコントロールしています。
菱田:構想段階では、その日の天候や客層に対応したカーブデータを作り、「今日はお子さん連れが多いから水流アトラクションが人気」のように変化を付ける案もありましたが、工数などの兼ね合いから、ステージごと・アトラクションごとに固有のデータを1つずつ作成しました。
岸:お客さんの性格も、モデルの色によって「赤は怒りっぽい」「青はかなり待ってくれる」とバリエーションを持たせようと考えていました。また、迷子の子どもを助けるといった要素の追加も構想にありました。
――難易度調整においてはテストプレイも重要ですが、開発期間が短いと優先度が下げられがちだと思います。本作ではお2人自らテストプレイをされたのでしょうか?
菱田:ぷちコン応募用ROMの制作中は、僕が調整したものを岸にテストしてもらう流れが基本でした。その後は、「UNREAL FEST 2024 TOKYO」で本作を展示するにあたって、Steam Deckに入れたROMを家族や会社の人に遊んでもらいました。
岸:坂道のコリジョンに引っかかって登れない箇所や詰まりやすいポイントを発見でき、いただいたフィードバックがとても参考になりました。難易度に関しては、私の母や5歳の姪も問題なくクリアできたので、良いバランスにはできていたのだと安心しました。
菱田:ステージをクリアしなければ次に進めない仕様なので、最低基準は緩めに設定しました。その代わり、最高ランクに到達する難易度は相当ハードにしてあります。
――続いてはアートコンセプトについてお聞かせください。本作は3Dモデルなどのビジュアルに統一感があり、非常に作り込まれた印象を受けました。
岸:「遊園地」というテーマに合った、皆が楽しめる鮮やかなビジュアルを目指しました。シンプルなモデルで可愛らしい見た目を作ることを意識して、『Overcooked』や『ヒューマン フォール フラット』、『Untitled Goose Game 〜いたずらガチョウがやって来た!〜』などのアートスタイルを参考にしています。
全体的な見た目のバランスを整えるため、開発冒頭では木のモデルを作成し、これをビジュアルの指針として他のモデルを作っていきました。
岸:床以外のすべてのマテリアルは、1種類のマスターマテリアルをマテリアルインスタンス化して作成しています。これにより、見た目に統一感が生まれ、工数削減にもつながりました。また、岩やコンクリートのような質感を表現するため、マスターマテリアルにはQuixel Megascansでお借りしたノーマルマップを適用しています。
岸:床には、マスターマテリアルにダイヤ柄のテクスチャを加えたマテリアルを使っています。
――水流アトラクションでは、水面の動きがシミュレーションされていますね。
岸:こちらも私が制作しています。1カ所だけなら負荷にも余裕があるだろうということで、「Niagara Fluids」で流体シミュレーションを使っています。
岸:少しでもNiagaraの勉強がしたかったので、積極的にエフェクトを使うよう心がけました。
水面のほかに、一部のアトラクションがスタートする際の紙吹雪が舞う演出や、リザルト画面のお風呂に入っているシーンの湯気もNiagaraで作成しています。リザルト画面のお風呂は、ゲームを昼パート/夜パートに分ける構想をしていた頃の名残で、1日の区切りを付けたかったので挿入しました。
――続いて実装面の話に移ります。C++とブループリントの使い分け方について教えてください。
菱田:基本的にはC++で実装を行っていますが、クリックイベントなどUI周りの処理とステージの遷移などはブループリントも併用しています。
菱田:また、3Dモデルのアウトライン表示切り替えやアトラクションの挙動、サウンドやNiagaraの呼び出しにもブループリントを使用しています。アトラクションの挙動にブループリントを採用した理由は、Delayなどの非同期処理が使いやすかったためです。
また、インタラクトの機能は、C++で宣言したインターフェースをブループリント側で継承し、実際の挙動はブループリントで定義しています。
――お客さんやアトラクションの動きはどのように作りましたか?
菱田:お客さんなど人のアニメーションは岸に作ってもらい、アトラクションの動きは僕が実装しています。例えば、ジェットコースターはスプラインで動かしており、コーヒーカップはカップ本体とカップの土台を別々に回転させ、2軸の回転にしています。
うさぎ型の乗り物が飛び跳ねる「ジャンピングアトラクション」では、サインカーブを使用して、うさぎとそれを支える棒を連動させています。
――C++でコードを書く際、コンパイル後に再度起動する手間がかかる印象ですが、何か効率化のために行ったことはありますか?
菱田:エディタを起動したままC++コードの更新を反映できる、ホットリロード機能を使っています。
――ほかにも実装面で工夫した点があれば教えてください。
菱田:起動中の観覧車と水流アトラクションは、乗り物が乗り場に着いている時にのみお客さんを乗せられます。乗り場に搭乗できる乗り物があるかどうかは、コリジョンを使って判定しています。
――この規模のゲームを約1か月で、ラーニングしながら開発するのは苦労も多かったと思います。
菱田:最適化の作業は特に大変でしたね。最適化前は、Steam Deckではとても遊べる状態ではありませんでした。最適化ではアンチエイリアス処理の変更がとても効果的でした。また、Lumenを切ったり、Naniteの設定を見直したりしました。
岸:モデルの軽量化も行いました。例えば、園の外周に配置する柵の紐は、縄のねじれを表現するためにポリゴン数がかさんでいました。また、ヤシの木には意図せず不要なメッシュを入れてしまい、気づけば20,000ポリゴンまで膨れ上がっていたこともありました。
――最適化のほかに苦労点などはありましたか?
岸:左下に配置した電力ゲージが時間経過で減っていくことに気づかない人が多く、UIを通してプレイヤーに情報を伝えることの難しさを実感しました。
待ち時間をカウントするタイマーの表示方法や、電力が切れたときに画面全体が赤くなる警告演出などは、遊んでいく中で「ここは見せ方を改善しよう」と気づき、都度修正を加えていきました。
――企画段階で広げたという「夢」のアイデアについて、今後の展望などがあればお聞かせください。
菱田:本作では実装していない、2人で膨らませたアイデアはたくさんあります。本作とは完全に別物の大規模な作品になるとは思いますが、いつか全てを実現したゲームを完成させてみたいですね。
岸:インディーゲームが好きなので、Steamなどで1本リリースできたら嬉しいです。本作の「夢」の部分には、私がやりたい理想の経営シミュレーションゲームの要素が詰め込まれているので、作品にできたらいいなと思っています。
――これからのご活躍も楽しみにしています。本日はありがとうございました。
ゲームメーカーズで編集や諸業務に携わっています。『星のカービィ』シリーズと『ポケモン不思議のダンジョン』シリーズが好きです。
西川善司が語る“ゲームの仕組み”の記事をまとめました。
Blenderを初めて使う人に向けたチュートリアル記事。モデル制作からUE5へのインポートまで幅広く解説。
アークライトの野澤 邦仁(のざわ くにひと)氏が、ボードゲームの企画から制作・出展方法まで解説。
ゲーム制作の定番ツールやイベント情報をまとめました。
東京ゲームショウ2024で展示された作品のプレイレポートやインタビューをまとめました。
CEDEC2024で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブル2024で行われた講演のアーカイブ動画・スライドをまとめました。
CEDEC2023で行われた講演レポートをまとめました。
東京ゲームショウ2023で展示された作品のプレイレポートやインタビューをまとめました。
UNREAL FEST 2023で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブルで行われた講演のアーカイブ動画・スライドをまとめました。
UNREAL FEST 2022で行われた講演レポートやインタビューをまとめました。
CEDEC2022で行われた講演レポートをまとめました。