【Unity】オープンワールドゲームの作り方まとめ

オープンワールドの作り方まとめ ゲーム制作メモ

今回はタイトルの通りで「Unityを使ったオープンワールドゲームの作り方」のまとめをしていく記事です。

私は(執筆時点で)オープンワールドゲームを4作品完成させたほか、現在また新しいオープンワールドゲームを制作しているのですが、その中で「このジャンルのゲームを作るうえでこの知識はぜひ知っておきたかった!」ということがいくつもあります。

そこでここでは「オープンワールドゲームを作りたい!」と思っている方のために、私が今までの活動で得た知見を元にオープンワールドゲームの作り方に必要な知識を一通りまとめていきますね。


※以下、かなりの長文です。

スポンサーリンク

オープンワールドゲームとは?

でははじめに「そもそもオープンワールドゲームとは何か?」「どんな特徴があるのか?」という部分を簡潔に説明しようと思います。

オープンワールドゲームの定義

まず、オープンワールドゲームとは一言でいえば「広大なフィールドを、ロードを挟まずに自由に移動できる3Dゲーム」のことです(※定義には諸説あります。これは私なりの解釈です)。

なので基本的には見えるところにはロードなしで行くことができるのがこのジャンルのゲームとしての最低条件となります。

…とはいえ、正直なところ定義が曖昧なので

  • 具体的にフィールドがどのくらい広ければオープンワールドなのか?
  • フィールドが広くても行動可能な範囲が狭ければ違うのか?
  • 広いフィールドが2個以上あって、そこの行き来にはロードが必要な場合は違うのか?

などといった部分は人それぞれだと思います。この辺は作者とプレイヤーさんのイメージが食い違う可能性があるので注意した方が良いかもしれません。

オープンワールドゲームの特徴

次に、オープンワールドという形式は最近の大作ゲームではよく採用されているわけですが、いったいなぜこの形式が人気なのでしょうか?その理由はオープンワールドには次の2つの特徴があるからです。

  1. ゲームの自由度を高くすることができる。
  2. ゲームへの没入感を高めることができる。

特徴1:ゲームの自由度を高くすることができる

1つ目はゲームをオープンワールド形式にすることで、ゲームの自由度を高くすることができるからです。

定義のところに書いた通りオープンワールドゲームではフィールドを自由に動き回ることができます。したがってゲームによっては最初からラスボスのところへ行けたり、作者が意図しなかった場所に入り込んだりすることができる場合もあります。つまりゲーム的には移動の自由度がとても高いというわけですね。

そして色々な場所に好き勝手に行けるということは、プレイヤーの「やらされている感」を薄める効果があります。その結果としてプレイヤーは「自分の好きなように楽しんでいいんだな」と感じるようになり、主体性が刺激されて本来の遊び方とは違う楽しみ方を見つけたりするきっかけになるのです。

このようにプレイヤーの主体性を引き出し、自由に楽しんでもらいやすい点はオープンワールドの大きな魅力の一つだと思います。

特徴2:ゲームへの没入感を高めることができる

次に2つ目はロードがないことでゲームへの没入感を高めることができるからです。

こちらの話は単純で、フィールドを移動したときにロードや暗転があると「ああ、やっぱゲームやってるんだな」という感じがありますが、ロードがないオープンワールドではそこで萎えることがありません。これによってプレイヤーは広い世界を冒険する主人公になりきることができ、高い没入感を得ることができます。

オープンワールドゲームを作るうえで知っておくべきこと

ではオープンワールドゲームの概要はこのくらいにして、ここから本題である「オープンワールドゲームの作り方」について説明していきます。

まずはオープンワールドゲームを作るうえで是非知っておいていただきたいことを2つご紹介しますね。

  1. 処理が重くならないように徹底的に最適化する必要がある
  2. オープンワールドはストーリーとの相性が悪い

処理が重くならないように徹底的に最適化する必要がある

1つ目は、オープンワールドゲームでは最適化の知識が必須だということです(※最適化=無駄な処理を省いてゲームを高速化すること)。

ではなぜ最適化が必要なのでしょうか?その理由はオープンワールドゲームでは大量のオブジェクトを描画する場合が多いからです。当然ながらオブジェクトをたくさん描画するほど処理が重くなるので、何も考えずに作るとあっという間に「重いゲーム」になってしまいます。したがってオープンワールドゲームの制作では徹底的な最適化が必要です。

ちなみに、余談ですが個人的な失敗談を紹介しておきます。私は1作目のオープンワールドゲームで最適化のことを全く知らずにゲームを作り、「なんか重いけど動くからまあいいか」と安易な気持ちで公開しました。するとどうでしょう?すぐに「重くてゲームが動かない!」というクレームが何件も届くようになってしまいました。もし最適化していればもっとずっとサクサク動くはずだったのに、それを知らずに作ったためにプレイヤーさんに残念な思いをさせてしまったのです。これは私としてはゲーム制作でワースト3に入るような手痛い失敗でした。

このようなことを振り返ると、この記事をご覧の皆さんにはぜひ最適化の手法を知っていただき、最大限活用してもらいたいなと思います(※具体的なやり方は後述します)。

オープンワールドはストーリーとの相性が悪い

次に2つ目は、意外かもしれませんがオープンワールドゲームはストーリーとの相性が悪いということです。

この理由はオープンワールドに明確なストーリーが入ることでせっかくの自由度が制限されてしまうからです。ゲームのストーリーって決まった物語をなぞるように進むのが普通だと思うのですが、それをオープンワールドに導入すると結局は普通のゲームと同じようにストーリーをなぞって決まった場所に行くだけになりがちで自由度がつぶれてしまいます。これではオープンワールドの意味がないので台無しです。

実はこの問題は超大作ゲームでも見過ごされがちで、「作りこみがすごいオープンワールドなのに全然自由に感じられない」場合があるのはこの相性問題によるものだと私は思います。もちろん「広大な世界を自由に歩けるんだから壮大なストーリーを入れたいよね」という気持ちはわかりますが、それで自由度がなくなってしまっては元も子もありません。

Unityでオープンワールドゲームを作るときのポイント

次に、以上の内容を踏まえてUnityでオープンワールドゲームを作るときのポイントを詳しく説明していきますね。

  1. Unityで描画負荷を減らすための最適化テクニック
  2. オープンワールドゲームのフィールドの作り方のポイント

Unityで描画負荷を軽くするための最適化テクニック

まずはUnityで「描画負荷を減らし、ゲームを軽くするための最適化テクニック」を5つご紹介します。

  1. Terrainの設定を調整する
  2. LODグループを活用する
  3. カメラのカリング設定を調整する
  4. メッシュを結合して最適化する
  5. なるべく同じマテリアルを使う

Terrainの設定を調整する

一つ目はTerrainの設定を調整して描画の負荷を軽くする方法です。これについては以前の記事「【Unity】重いTerrainの描画処理を少しでも軽くする方法」に詳しい話を書いたのでそちらもご覧いただきたいのですが、ザックリ言うと

  • 巷では「Terrain=重い」などと言われるが、それは設定が悪いせいでTerrainのせいではない
  • ピクセル許容誤差やハイトマップ解像度、ディティール密度等をうまく調整することで見栄えと描画負荷のバランスをとることができる

という感じです。Unityでオープンワールドを作る際にはほぼ確実にTerrainのお世話になると思うので、Terrainの癖をうまく理解して設定できるようにしましょう。

LODグループを活用する

次に二つ目はLODグループというメッシュ表示機能を活用する方法です。この機能を使うことで

  • 近くのゲームオブジェクトのメッシュは滑らかに
  • 遠くのゲームオブジェクトのメッシュは雑にしたり、非表示に

することができ描画負荷の削減に役立ちます。

なお、こちらも以前の記事「【Unity】LODグループを使ってゲームの描画負荷を下げる方法」に詳しいやり方を書いたので、併せてごらんいただければと思います。

カメラのカリング設定を調整する

三つめはカメラのカリング設定を調整して遠くのメッシュを非表示にする方法です。やり方はとても簡単で、カメラコンポーネントの「クリップ面」の「ファー」の値を小さくするだけです。

カメラのカリング設定

例えば、上の画像なら「ファー」が500なので、500mよりも遠くのメッシュは表示されなくなります。こうすることで遠くの小さく表示されるゲームオブジェクトの描画を省略して処理を軽くすることができます。

メッシュを結合して最適化する

四つ目はメッシュを結合して最適化する方法です。

Unityでは基本的に別々のメッシュは1つずつ描画処理が走ります。つまりばらばらのメッシュが大量にあると処理が重くなってしまうのです。そこでメッシュをひとまとめにすると描画処理を軽くすることができます。

ただしこの方法はUnityの標準機能だと実現が難しいため、アセットを使うなどして対処しましょう。

なるべく同じマテリアルを使う

五つ目はなるべく同じマテリアルを使う方法です。

先ほど「別々のメッシュは1つずつ描画処理が走る」と書きましたが、例外として別々のメッシュでも同じマテリアルを使うことで描画処理を削減できる場合があります(これを「バッチング」といいます)。つまり、フィールドの岩など大して重要ではないオブジェクトの場合は同じマテリアルを使いまわした方が処理的には軽くなると言えます。


※なおバッチングについての説明は株式会社ロジカルビート様のブログが詳しいのでそちらを参考になさってください。

オープンワールドゲームのフィールドの作り方のポイント

さて描画負荷を軽くする方法はこのくらいにして、次はフィールドの作り方のポイントをご紹介していきます。主なポイントは次の3つです。

  1. 無料のTerrain Toolsを活用する
  2. 世界の端が見えないようにする
  3. フォグ(霧)を活用して遠くを自然に隠す

無料のTerrain Toolsを活用する

まず一つ目のポイントとして、オープンワールドのフィールドをUnityで作るときは無料のTerrain ToolsというUnity公式パッケージを活用すると便利です。

Terrain Toolsは標準のTerrainエディタの機能を拡張するパッケージで、

  • 地形を「スタンプ」のように型押しできる機能
  • 浸食をシミュレーションする機能
  • 穴を掘る機能

などが追加されています。また、インストールはパッケージマネージャから簡単に行うことが可能です(※執筆時点ではプレビュー版なので、「Show Preview Packages」を選択しないと一覧に出てこないことに注意)。ここでは使い方の紹介は割愛しますが、標準のTerrainエディタと比べるとかなり思い通りの地形を作れるようになるのでお勧めです。

なお以前の記事「【Unity】オープンワールドの風景の作り方」では有料のアセットを使った方法をご紹介しました。もちろんそちらの方法を採用するのも良いのですが、最近ではTerrain Toolsも実用的になってきましたし、何より無料かつ軽いのは魅力的なのでこれを使わない手はありません。ぜひ活用してみてください。

世界の端が見えないようにする

次に二つ目のポイントは、オープンワールドのフィールドを作るときは「世界の端」が見えないように作ると良いです。

いくらオープンワールドが広いとはいえ、隅々まで探索していたら

  • 世界の端が見えてしまった
  • なぜか見えない壁があって進めない
  • 「この先には何もない」などのメッセージが表示され、強制的に戻される

なんてことがあったら興ざめですよね。なのでそこはプレイヤーが登れない山脈で囲うといった自然な工夫が必要だと思います。

フォグ(霧)を活用して遠くを自然に隠す

さて、最後に三つ目のポイントは「フォグ」(=霧)を使って遠くを自然に隠すと見栄えを保ちつつ描画処理をカットできるのでお勧めです。

これは例えばの話ですが、上の方で紹介した「カメラのカリング機能」を使うと地形やオブジェクトが途中でブツッと切れて表示されてしまうことがあり不自然に見えてしまいます。そこでフォグをかけることでそのような不自然になってしまった部分を自然に隠すことが可能です。

ただしUnity標準のフォグだとあまり良い見栄えにならないことが多いため、アセットも併用することをお勧めします。

おわりに

以上、長文になってしまいましたが「オープンワールドゲームの作り方」について必要な知識を一通りまとめてみました。特に最適化の部分は非常に重要なので覚えて帰っていただければ嬉しいです。

それにしても、今までオープンワールドゲームを何作も作ってきて分かったのは「オープンワールドゲームは奥が深くて作るのが楽しい」ということです。せっかくUnityを使っているならこんなに楽しいジャンルを作らないのはもったいないと思うので、皆さんもぜひオープンワールドゲームの制作にチャレンジしてみてください。

この記事がゲーム制作のお役に立てば幸いです。