VRChatでゾンビゲームワールドを制作した話【既プレイヤー向け】

お久しぶりです
ムシコロリです

10月21日にVRChatにてゾンビゲームワールド『ヴードゥーキングダム:ゼロ』を製作いたしました。
https://vrchat.com/home/world/wrld_9f2fcd4d-822f-4b64-a417-b858e08fb8a7

もし機会があれば遊んでいただけると嬉しいです

今回の記事は、ゲームを既にプレイした方向けに、簡単な技術面を書いていこうと思います。
気分で書いているため、何回かに分けられるかと思います。

1.ワールド構成について
2.ライティングおよび各フロアのエフェクトについて
3.ゾンビAIについて

1.ワールド構成について
今回のワールドの構成は以下のようになっております。
一応起承転結になっていますが、最初の設計より大幅に増えてしまっています

◆起(導入、チュートリアル)
・警察署
・管理棟(一~二階)

ここは監督の采配に任せました。
このゲーム単体では主人公が香港警察で、怪しい製薬研究所に行く……というストーリーがわかればいいのですが、それに至るまでの調査内容や他に調べていることなどを盛り込んでいます。(警察署は監督製作)
管理棟の方は結構直しがありましたね……

◆承(ゾンビが出てきて実際のゲームが始まる)
・研究棟(二階、地下一階)

ゾンビが出てきます。
最初のゾンビ、もう少し劇的な出会い方はないものか……

◆転(科学的な施設から様変わりする)
・隠し通路
・実験部屋
・拷問部屋

お気に入りポイントです。
完全に好きに作らせてもらいました。不死の研究が科学→宗教的、呪術的になったアプローチの変化がわかればいいので大変楽に進みました。チェンソーマン(チェンソーマンではない)とそのペットは、某人気漫画のアニメが始まるからと捻じ込ませていただきました
たぶん「そこまでやれとは言ってない」部分の一つです。

◆結(サポートキャラの結末およびプレイヤーの結末)
・研究棟一階
・駐車場

ラッシュモード、みんな途中で死んでしまって悲しいぜ

2.ライティングおよび各フロアのエフェクトについて
ライティングはBakeryを使用しております
各フロアごとに分け、Bakery LightMap Group Selector内に各フロアを一つずつ入れて、一フロアに一枚のライトマップができるように設定しました。
広いマップと狭いマップでライトマップの大きさが変えられるのと、単純にグループ分けができて見やすいというメリットがあります。

各フロアの見た目や明るさは、ほとんどポストプロセスでの変更を行っています。
マップ移動ごとに入る画面の暗転や、サイレン音とともに照明が落ちる演出など、急に画面が変わるものに関してはポストプロセスを使用しています

唯一リアルタイムライトを使用したのは研究棟地下一階の蛍光灯の点滅部分です。
最初はRealtime GIで切り替えようと思ったのですが、期待していたような速度感(点滅感?)が出なかったため、リアルタイムライトのアニメーション制御に移行しました。
リアルタイムライトは重いので、リアルタイムライトを使う分他の置物系をアトラス化したりメッシュを極限まで減らしたりして極端に重くなることがなくなるようにしてあります。

この通り難しいことは何もしておらず、基礎技術だけでどうにかしました。

3.ゾンビAIについて
navmeshを使用しています。ゾンビのNavMeshAgent.destinationとオブジェクトオーナーのみを同期してゾンビの位置をプレイヤーに共有しています。
ゾンビは大きく分けて四種類います。
①通常配置のゾンビ(停止~プレイヤーを見つけると襲ってくる)
プレイヤーの銃声や接近に反応して攻撃状態に移行します。ヘッドショット判定もあります

銃声に反応するギミックは、単純に銃を撃つときにSphereCastAll(GCAllocが発生するので実際に使用したのは個数制限つきのPhysics.RaycastNonAlloc)を飛ばして、範囲内にいるゾンビAIの敵対度を上げる仕組みを取っています。この処理は重いのですが、レイヤーを切ってしまえばある程度の負荷軽減ができました。

②背景賑やかしのための周回ゾンビ
背景が動いていると、その場で停止しているゾンビがいても画面が賑やかに見える手法を取りました
映像でよく使われますね

③何もしないゾンビ
サーバールームに配置してあります
「サーバールームで暴れるなよ」という強い思想が反映されています(ストーリー的な文脈はさておき、ゲーム的には本当にそれだけです)

③ボス
ボスはヘッドショット時にガードモーションを入れています。アニメーションコントローラーの扱いが下手すぎてガード時にスライド移動してしまうという不具合がありますが、ガードモーションに歩きモーションを足すだけで解決できると思われます

自分は「ボスにしては弱すぎるなあ……」と思っていたのですが、10人くらいの配信を見たら皆さん相当苦戦していました。
製作者の難易度調整はアテにならないから、別で人を用意した方がいいな……と思いました。

撃破時のストップモーションは入れたかった
入れたかったが、間に合わなかった……!

この記事が気に入ったらサポートをしてみませんか?