isobe_yakiのブログ

ニコ生ゲーム開発者向けの記事を書きます

怖い部屋3D振り返り

今年の4月に開催されていた「ニコ生 自作ゲームパーティー-春-」という企画に怖い部屋3Dというゲームで参加してました。 それから大分空いてますが今回はその振り返りでもしてみようと思います。

ちなみにこんなホラーゲームでした。→リンク先へ飛ぶとすぐにゲームが始まります。

参加しようと思ったきっかけは、たまたま見かけたふんすけさんの配信でした。その日の配信は6月末にサ終するアツマールの話題を中心にニコ生ゲーなどの話をされてたんですが、その中で直近の話題として前述のゲームイベントの話が出ていました。イベントの締め切りが4/16(日)だったんですが、配信を見たのが確か4/11とかで、イベントに参加する気は無かったんですが急に気になりだしたんですよね。

4/11(火) 4/12(水) 4/13(木) 4/14(金) 4/15() 4/16()
ココ

後々気づいたんですが、ゲームイベントはニコ生ゲームのイベントであって別にアツマール終了後も続くんですよね。ただ、その時は何を勘違いしたかラストチャンスなら参加してみるかという気持ちになって参加を決意したのでした(アホ)。


そんなこんなで、翌日から何を作るか考え始めます。

まず圧倒的に時間が無いですから、ある程度ありものを活用する必要があるなと

で、手元にあるものって言うと3D迷路くらいしかない。3D迷路ではPC・スマホで一人称視点のキャラを操作し、フィールドの中を歩き回るという処理まで実装していました。

元々、3Dホラゲー作りたいなという願望はあったんで、迷路を活用したお化け屋敷ゲームの企画を脳内で練り始めます。

まずニコ生ゲーでホラーをやるのってどうなの?ということを考えていました。応募できるのがランキングゲームのみなので数十秒の中でスコアを競うゲームしか作れません。しかも繰り返しプレイされるのが前提なのでホラーって相性悪い気がします。

そこで、とあるゲームのことを思い出します。影廊です。

www.gamespark.jp

一言で説明するならホラーな不思議のダンジョンという感じです。 個人開発らしいんですが、とてもよくできてます。

自分は見る専だったのでプレイしたことは無いですが、このゲームの面白いところは、最初は怖いし慣れてないしで牛歩プレイで死にまくるところから始まって、何度も死んで慣れてくるとプレイヤーの動きが洗練されてきてRTA化してくるところなんですよね。バイオハザードとかもそうだと思うんですが、最初ホラーでビクビクしてるところから蹂躙プレイに変わっていくその落差が痛快で面白いんです。

そう考えたときに影廊で面白かったRTA的要素をゲームのメインにするのはどうかと思いました。つまり、最初は「雰囲気怖いしマップもわからないから全然点取れない」というところから始まって繰り返すうちにプレイヤーが成長して「お化けも無視して頭に叩き込んだマップを最速で駆け抜ける」ところまで持っていけたら楽しそうだしニコ生ゲーになるかなという発想でした。

あとは、何をスコアとしてどういうアクションをさせるかですが、ここは割と見切り発車でした。『一人称で移動しつつ「銃を撃つ」みたいなアクションはさすがに難しすぎるかな』とか『マップのギミックを解いて先へ進むゲームだと進行度をスコアにするのか?プレイヤーごとのスコアの差がつけにくそうだな・・・』とか考えつつも、『まぁいいや最後余った時間で実装出来そうなものを作るだけだ!』って感じで余り物で晩御飯を作る主婦みたいなノリで進めちゃいました。

結果は遊んでもらえばわかりますが、アクションは移動のみ。スコアは"アイテム回収でプラス"&"お化けヒットでマイナス"のみです😅。ほんとは鍵付き扉とか敵撃退アイテムとか影廊っぽい要素も考えてたんですが全く時間足りませんでしたね。


というのも、ゲームの構想とアセットの作り方などの下調べで2日使ってしまって実際にモノづくりに着手できたのって4/14(金)くらいからで〆切まで3日に迫っちゃってたんですよね。

こういう時自分の作業優先順位は見た目作りからになります。体裁さえ整ってればできてるっぽく見えるからっていうのと、自分の中で見た目作りがボトルネックになっているからです。うまく作れる自信が無いところほど先に片付けないと最終的に終わらない確率が上がると思ってます。

というわけで、最低限必要そうなアセットを書き出してみました。

  • 床・天井・壁のテクスチャ
  • フィールドのモデルデータ
  • 敵のグラフィック(画像のみ?3Dモデル?)
  • アイテム(画像のみ?3Dモデル?)
  • BGM・SE

まず、床・壁のテクスチャですが、これはBlenderのテクスチャ生成プラグインを使って作りました。何となくイメージに合うテクスチャが生成できるまでそれぞれ10回くらいやりなおした感じですね。ちゃんと上下左右の柄がつながってループできるので便利です。

天井のテクスチャはGIMPで自作しました。ノイズフィルタとかで適当に気持ち悪いぼつぼつした柄を作ります。イメージとしては結露で黒カビが生えまくった天井という感じで、不潔な不快感が出したかった感じです。

で、これらを張り付けるフィールドですが、フィールドはモデリングまでする時間無いんでプログラムで生成することにしました。以下のマップデータを元にゲーム起動時に3Dメッシュを生成しています。

"wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"
"wwwwwwwhhhhwwwwwwwwwww     wwwwwwwwwMwwwwwwwwww  $  wwww      ww"
"wwwhhhhh~~hhwwwwwww_          wwwwww wwwwwwww         ww www  ww"
"wwwhwwhhhhhhwwwwwww   wwwww    wwwww wwwwwww     M       ww    w"
"wwwhwwwhhhhwwwwwwww   wwwwwwww wwwww wwwwww             www_  _w"
"wwwhwwwwHHwwwwwwww   wwwwwwwww ww@      www      *      www __ w"
"wwwhwwww^^wwwwwww   wwwwwwwwww wwwwwwww ww _    www    _ ww __ w"
"wwwhwwwwhhwwwwwww   wwwwwwwwww wwwwwwww ww     wwwww     ww_  _w"
"whhhhhww  wwwww    wwwwwwwwwww www    w ww     wwwww     wwhhhhw"
"whwwwhww        _ wwwwwwwwwwww www ww   ww     wwwww     wwhhhhw"
"whw~whww       wwwwwwwwwwwwwww*www  wwwwww _    www    _ wwhhhhw"
"whwWwhww  wwwwwwwwwwwwwwwwwww   www      ww      *      wwwhH^hw"
"whhhhhwwllwwwwwwwwwwwwwwwwww  w  wwwwwww ww     _ _     wwwhhhhw"
"wwwwwwwwjjwwwwwwwwwwwwwwwww       wwww   www     _     wwwwhhhhw"
"wwwwwwwwjjwwwwwwwwwwwwwwww  w _ w  www wwwwww         wwwww    w"
"wwwlllllllllllllwwwwwwwww           ww     wwww     wwwwwww    w"
"wwwllwwwwwwwwwllwwwwwwww  w _ w _ w  wwwww wwwww   wwwwwwwww$$ww"
"www  wJlllllJw  wwwwwww               wwww wwwww   wwwwwwwwwwwww"
"www  wwwlllwww  wwwwww* w _ w I w   w *www wwwwwww wwwwwwwwwwwww"
"wwwhhh  ljl  hhhwwwwwww               wwww wwwww   wwwwwwwwwwwww"
"wwwhhh  ljl  hhhwwwwwwww  w _ w _ w  wwwww wwwww wwwwwwwwwwwwwww"
"www  wwwlllwww  wwwwwwwww           www    wwwww   wwwwwwwwwwwww"
"www  wJlllllmw  wwwwwwwwww  w _ w  wwww wwwwwwww   wwwwwwwwwwwww"
"wwwllwwwwwwwwwllwwwwwwwwwww       wwwww wwwwwwww   wwwwwwwwwwwww"
"wwwlllllLLLLllllwwwwwwwwwwww  w  wwwwww                     wwww"
"wwwwwwwwwwwwwwwwwwwwwwwwwwwww   wwwwwww                 w   wwww"
"wwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwww  wwwwwwwwwwhhhwwww"
"wwwwwwwwwwwwwwwwwwwwwwwwwwwwww wMwwwwwwwwwwww  wwwM     whhhwwww"
"wwwwwwwwwwwwwwwwwwwwwwwwwwwwww w wwwwwwwwwwwwllwwwwwwww whhhwwww"
"wwwwwwwwwwwwwwwwwwwwwwwwwwwwww w       llllllllwwwwwwwwhwhhhwwww"
"w   w_w_w_w_w_w_w_ wwwwwwwwwww wwwwww wwwwwwwllwwwwwwwwhwhhhwwww"
"w w w w w w w w w  wwwwwwwwwww w           ww  wwwwwwwwhwhhhwwww"
"w w        M        wwwwwwwwww wwwwww wwwwwww  wwwwwwwwhwhhhwwww"
"w w                 wwwwwwwwww ww___   ___wwwhhwwwwwwwwhwhhhwwww"
"w w    ww     ww    wwwwwwwwww ww*wwwwwww*www^^wwwwwwwwhwhhhwwww"
"w w    ww     ww    wwwwwwwwww wwwwwwwwwwwwwwhhwwwwwwwwhw   wwww"
"w w                 ww          _hhhhhhhhhhhhhhwwwwwwwwhw   wwww"
"w w                 ww  wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwhwlllwwww"
"w wjjjjLLjjjjjLLjjjjww wwwww                    hhhhhhhhwlllwwww"
"w w                 ww wwww       wwwwwwwwwwwwwwwwwwwwwwwljlwwww"
"w w           *_    w_ _www   $                 llllllllljjjwwww"
"w w   _ww     ww    ww wwww       wwwwwwwwwwwwwwwwwwwwwwwljlwwww"
"w w   _ww     ww    ww wwwww     wwwwwwwwwwwwwwwwwwwwwwwwlllwwww"
"w w                 ww wwwwwwwwwwwwwwwww*         wwwwwwwlllwwww"
"w w                 ww wwwwwwwwwwww            ww wwwwwwwlllwwww"
"w w                 ww wwwww               ww  ww wwwwwww   wwww"
"w w                                        wM  ww        ***wwww"
"w wwwwwwwwwwwwwwwwwwww wwwww               ww  wwwwwwwwwwwwwwwww"
"w w                    wwwwwwwwwwww            wwwwwwwwwwwwwwwww"
"w w  wwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwww         _    _   _wwwww"
"w w  w   w   wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwww"
"w w  w w wwwwwwwwwwwwwwwwwwwwwwwwwwww    wwwwwwwwwwwwwwwww wwwww"
"w w    w$wwwww_________wwwwwwwwwwww        wwwwwwwwwwwwwww wwwww"
"w wwwwwwwwwwww_________wwwwwwwwwww   wwww   wwwwwwwwwwwwww wwwww"
"w         wwww_________wwwwwwwwww   wwwwww   wwwwwwwww      _  w"
"w w w w w wwww_________wwwwwwwwww   wwwwww   wwwwwwwww w w w w w"
"w  _ _ _  wwwwwwww wwwwwwwwwwwwwww wwwwwwww_wwwwwwwwww  *      w"
"w w w w w wwwwwwww wwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwww w w w w w"
"w  _ M _                                       wwwwwww_       $w"
"w w w w w www wwwwwwwwwww  wwwwwwwwwwwwwwwwwww wwwwwww w w w w w"
"w  _ _ _  w$w w*www    w       wwww   $ w       wwwwww     *   w"
"w w w w w w w w www M    w  w  wwww @w     w    wwwwww w w w w w"
"w*********w     www    w       wwww   $ w       wwwwww$   M  _ w"
"wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"

細かい最適化の話をすると、上記3つのテクスチャを1つのテクスチャ配列にまとめて、各頂点にはUV座標とテクスチャインデックスを持たせてシェーダーで参照するテクスチャを切り替えるようにしました。これによってフィールドは床・天井・壁まで含めて1ドローコールで描画出来るようにしています。


次に敵のグラフィックですが、これもモデリングはしたくなかったんで、ペラペラの画像で済ますか単純な立方体とか球で済まそうかと考えていました。ただ、いくら雰囲気ホラーと言ってもそこまで雑だとあまりに怖くないなと思ったので初心者ながらにBlenderモデリングをすることにしました。

カオナシではありません!⚠

スカルプティングモードを使って立方体から大まかに切り出し、押し出しツールなどで徐々に形を整えていきました。Blenderはローポリ化とかも手軽でいいですね。モデリングする際に気を付けた点は以下。

  • スキニングはできないので手足は無し
    • キャラクターをアニメーションさせる時に関節部分を滑らかに変形させる処理をスキニングといいますが、機能としてまだ実装していなかったのとそもそもアニメーションを付ける時間も無かったので動かない手足を生やすくらいなら削ぎ落してしまおうということでツルっとしてます。
  • ターンしたり、坂を移動したりするので足元は細く
    • その場で回転する際に接地部分がスライドして見えたり坂で地形とめり込んでほしくないので、接地部分を小さくして違和感を少なくしています。カオナシみたいな下に広がった形状をイメージしてもらえば何がまずいか分かると思います。
  • 円筒状にして回転時のバランスをよく
    • お化けの方向転換は手抜き実装なので単純にY軸回転しているだけです。そのため体が中心線からずれていたり「?」みたいな歪んだ形状だと回転時の見栄えが悪いです。できるだけ円筒に近い方が違和感が少なくなります。

後は顔の部分をやや突き出して接近時の威圧感を出して完成です。

顔のテクスチャですが、こちらはGIMPで1~2時間ででっち上げました。怖い顔の画像といえばやっぱ真っ黒背景に浮かび上がる白塗り顔が定番っしょみたいなノリで描きました。

レイヤーは4枚のみ。よく見るとすごい雑

最後にテクスチャをモデルに張り付けるんですが、ここでうっかりミスをして顔が上下反転に張り付いてしまいます。

「でもあれ?こっちの方が良くない・・・?」

元々正立の状態で張り付けてたんですが、このお化けプレイヤーより背が高いので目を上に剥いてしまうとどこ見てんの状態になってしまってたんですが、倒立で張り付けることで上からプレイヤーをにらみつけているような効果が生まれた上に、首を大きく後ろに反らした姿勢のようになり一気に異形感が出てきました!(個人の感想です)こういう偶然も重なって割と満足のいくお化けが出来上がりました。

最後はアイテムのグラフィックですが、これはもうなんとかなるやろと思って後回しにしてしまいました。

アイテム完成図
まぁ結果を見てもらえば分かる通りあまりなんとかなりませんでした・・・。


と、ひとまず見た目だけは何とか整えたので後は締め切りまでにできるだけ遊びを実装していきました。

結構時間がかかったのが敵の動きとかですね。追跡モードになったらA*とかで経路探索して追いかけるみたいにしたかったんですがそこまで時間足りなかったし、ちょっと心残りがあります。

あとはフィールド関連がとにかく時間食いまくりました。まずフィールドデータの作成ですが、覚えゲーにしたかったのでランダムではなく固定マップにしました。でもすぐには覚えられないように結構広めにしてしまったがためにフィールドを考えるのが大変でした。時間が無くて難易度調整が全くできてなくて、例えば最高報酬の10万点アイテムは2つだけあるんですが、できるだけ離して配置したのでどちらか一方しか取れないつもりでいたんですが、頑張ればギリギリ両方取れるらしく最初チートか?とか思ってしまいましたw。完全に調整不足なだけでした笑。 また、フィールドには3段階の高低差があります。はっきり言ってゲーム性には何の関係も無いんですが、入り組んだ地形にしたいというホラー演出的な意図のみで実装してます。ほんとにそういう効果があったかはわかりませんが・・・高低差のおかげでメッシュ構築処理がやや複雑になって実装もデバッグも時間を食ってしまいました。

BGMとSEに関しては完全に〆切後に入れることになってしまったんですが、アイテム取得音などはやはり大事でグラフィックだけだとアイテムを取得する際アイテムが視界に無かったりするので獲れたかどうかがわからないんですよね。音が付くだけで大分遊びやすくなります。また、これは意図を理解できた人はあまりいなかったと思いますが、とあるタイミングで鳥の鳴き声が鳴るようにしました。単なる環境音ではなさそう、までは感じた人も結構いると思いますが、実はあれは前方以外のお化けに見つかった時に鳴ってたんですよね。自分の視界にお化けがいる状態で気づかれる分にはいいですが、後ろから音もなく近づかれたら全く気づけないのでその合図として流してます。もともとお化けには吐息SEを付ける想定で、影廊のお化けみたいに距離に応じて音量を変えるみたいなことをしようと思ってたんですが、いい吐息も見つからなくて土壇場で「鳥が鳴く方がおしゃれ演出じゃね?このお化けが声とか出すの想像できん!」と思ってしまいあのような分かりにくいことになってしまいました・・・。

まぁ自分の場合は遊んでもらうことがモチベというより、ゲームづくりの実験場と言う感覚が大きいので分かりにくくても思いついた演出を試したい欲求の方が強いんですよね。

そういうとこもあって遊び方の説明はいつもめっちゃ手を抜いてしまうんですが、最初に画像ぺら1枚で済ませちゃってます。チュートリアルってちゃんとやろうと思うとかなり手間なので嫌なとこですよね。


春のイベントに応募されたゲームはニコニコ超会議の配信内で有名配信者達がスコアアタックをするという企画で遊ばれました(イベントの怪しげなサイト)。怖い部屋3Dはもこうがプレイしてましたね。まぁ初見一発目のプレイだったんでグダってましたが何にせよ厳しかったかなとは思います。企画が良くなかったですね。

また、イベント期間中起動された回数が多かったゲームトップ3には賞が与えられるんですが流石に逃してしまいした。作りこみが圧倒的に足りなかったので妥当とは思います。まぁ単に3Dゲームがうまく動かない人や操作苦手な人も弾いてしまうので、遊ばれたいならこの辺りも工夫は必要でしょうね。

一方で一部の方にはホラー要素や3D要素が受けたようなのでそこはやったぜという感じでした笑。