GameLab開発日誌:魚のFPS制作スタート。「3D Characters – Fish」で海の世界を構築する

プログラマーが、巨大な透明カーブディスプレイに映る、鮮やかで可愛い「魚の世界」を指さして、ワクワクしている様子。

こんにちは、GameLabの管理人『くんちゃん』です。

前回の記事で「Unityでのゲーム開発と、Flutterでのツール開発の両輪でいく」と宣言しました。 そして、「次は魚のFPS(一人称視点シューティング)を作りたい」と書いたからには、さっそく行動に移さねばなりません。

しかし、相変わらず私には「ゲームの具体的なアイデア」も「3Dモデルを作る技術」もありません。 そこで今回は、「とりあえず良さそうな素材(アセット)を買って、そこからインスピレーションを得る」という作戦に出ることにしました。

目次

購入したアセット:「3D Characters – Fish」

今回、Unity Asset Storeで購入したのは、LAYERLABさんの「3D Characters – Fish」というアセットです。(ちょうどセール中だったのも背中を押してくれました!)

3D Characters - Fishのアセットストアの画像

画像引用元:Unity Asset Store「3D Characters – Fish」(パブリッシャー:LAYERLAB)

https://assetstore.unity.com/packages/3d/characters/animals/fish/3d-characters-fish-282104

このアセット、ローポリゴン(カクカクした立体)で作られているのですが、デザインが本当に秀逸です。 サメ、イルカ、ウミガメ、そして色鮮やかな熱帯魚たち……。多種多様な海の生き物がパッケージになっていて、見ているだけでワクワクしてきます。

「これなら、私の思い描く海の世界が作れるかもしれない!」と、一気にテンションが上がりました。

業務系プログラマー、Unityの「Scene」に感動する

プログラマーがデスクに座り、目の前のマルチモニター(の1枚)を見つめている。モニターには、完璧にクリアに整えられた、鮮やかで美しいアニメ海中シーンが映っている。

さっそくUnityを開き、購入したアセットをインポートしてみました。 普段、Visual Studioで業務システムを作っている私にとって、画面作りといえば「コードを書いてフォームを配置する」という、論理的で少し無骨な作業です。しかし、Unityの世界は違います。

……と言いたいところですが、すんなりとは進みませんでした。Unity初心者の私を待ち受けていたのは、画面が真っピンクに染まる「ピンクの洗礼」です。

画面上のオブジェクトがピンク色に染まっている画像

調べてみると、プロジェクトの描画方式(URP)とアセットの古い素材の仕様が合っていないことが原因でした。業務アプリの「コンパイルエラー」とは違い、「プログラムは間違っていないのに物理的な見た目がおかしくなる」という感覚は勝手が違い、早くもゲームエンジンの洗礼を浴びました。

カメの沈没と、魚群を操る「SeaControl」の大発見

数クリックでピンク色を修正し、気を取り直してアセットをドラッグ&ドロップで「Scene(シーン)」ビューに配置していきます。何もない空間にサンゴ礁ができ、魚たちが配置され、あっという間に「色鮮やかな海の世界」が構築されていきました。

よし、これで綺麗な海ができた!と思い、試しにウミガメを泳がせてみました。 ところが今度は、カメが斜め下を向いたまま、スーーッと地面(砂浜)にめり込んで沈んでいくではありませんか。

業務システムなら「入力値のチェック」で防ぐようなエラーも、3D空間では「当たり判定(Collider)」や「空間の座標」という概念で解決しなければなりません。

そこで、カメに設定されているC#のスクリプトを開いてみることにしました。VS使いの私にとって、C#のコードは唯一の安全地帯です。

コードを読み解くと、どうやら SeaControl という透明なオブジェクトの座標を基準にして、カメが泳ぐ目標地点を計算していることが分かりました。カメが沈んでいたのは、この目標地点が地面より下に設定されてしまっていたからです。

ここで、プログラマーとしての一つの大発見がありました。 「目標座標になっているなら、この SeaControl 自体を動かせば、魚たちを自由に誘導できるのでは?」

魚が泳いでいるサンプルの画像

実際にSeaControlをマウスで動かしてみると、見事に魚たちが後をついてきます! ただの「遊泳範囲の枠」だと思っていたものが、プレイヤーの操作で「魚群を操るルアー」に変わった瞬間でした。

変数の数値を書き換えるだけでなく、座標を動かすだけで画面全体がダイナミックに変化する。この面白さは、まさにゲーム開発の醍醐味です。

自分ではまだ1行もコードを書いていない(既存のものを読んだだけ)のに、目の前には立派な3Dの海が広がり、魚の群れを操るシステムまで動いている。

Visual Studio使いとしては、「マウス操作と少しのコード解読だけで、こんな世界が作れるのか…!」と、改めてゲームエンジンの凄さに感動してしまいました。

浮上した最大の課題:「FPSにするには平和すぎる」

プログラマー(困惑顔)が、美しいアニメの海中シーンをデザインしている。

さて、海の世界はできました。 当初の目標は、ここを舞台にした「魚のFPS(シューティングゲーム)」を作ることです。

しかし、大きな問題に直面しました。 配置した魚たちが可愛すぎて、とても銃で撃つ気になれないのです。

こんなに平和で癒やされる水族館のような空間で、バンバンと弾を撃ち合うゲームを作って良いのだろうか……?

  • サメだけを敵にして戦うサバイバルにする?
  • 自分が魚になって、泡(バブル)を撃ち出すようなほのぼの系にする?
  • いっそFPSは諦めて、ただ海を眺めるだけの「環境ソフト」にする?

アセットのクオリティが高すぎたゆえに、ゲームの方向性について嬉しい悲鳴を上げてしまいました。

おわりに:次回の実験に向けて

海に向かって立ち、VRゴーグル(ヘッドセット)を装着しようとしている。海は静かで、これからの冒険を予感させる。

今回は「海の世界を構築する」という第一歩を踏み出しました。 ゲームのルールはまだフワフワしていますが、この「GameLab(実験室)」で色々試しながら形にしていこうと思います。

次回の目標は、「プレイヤー(カメラ)を動かして、この海の中を自由に散歩できるようにする」ことです。 スクリプト(C#)を書いて、自分がこの綺麗な海に潜っているような感覚を作れるか実験してみます。

業務系PGのゲーム開発への挑戦、次回もよろしくお願いします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次