今回はゲームエンジンのUnityに関する話題で、タイトルの通り
Unityの弱点や欠点、標準のままだと不足している機能
を一通りまとめてみるという内容になっております。
Unityについて調べるとメリット・良い部分に関しては色々な情報がわんさか出てくるのですが、逆にUnityの弱点・欠点については情報が少ないためきちんと調べないと全然分からないのが実情です。そこでここではUnity歴6年以上の私がその辺について詳しくご紹介し、どうすれば弱点を補えるのかを解説していきますね。
Unityの主な弱点・欠点
では早速ですがUnityの主な弱点や欠点は次のとおりです。
- 標準のセーブ機能が信じられないほど貧弱
- 大量のデータを管理する機能がない
- フラグ管理機能もない
- グラフィックの描画システムが3種類もあり分かりづらい上に、それぞれ互換性がない
- 新しいバージョンのUnityがバグまみれで困ることがある
- Unityのバージョンを新しくするとアセットが動かなくなることがよくある
それぞれ詳しく見ていきましょう。
標準のセーブ機能が信じられないほど貧弱
まず一つ目にして最大の欠点はUnityの標準のセーブ機能はとんでもなくショボいということです。
Unityには「PlayerPrefs」というセーブ機能が一応あります。しかしこれには
- 複雑なデータや大量のデータを扱うことができない
- 保存できるデータの型が限られている
- 動作が遅い
- 暗号化などデータ改ざん対策なし
- Windows用ゲームの場合、データの保存先がなぜかレジストリ(←最悪)
といったかなり重大な欠点があるためこのセーブ機能は全く実用に耐えるものではなく、あくまでも試作用にしか使えません。
現代のゲームでセーブ機能が必要ないゲームなんてほとんど無いも同然なのに、ユーザー数が多いゲームエンジンであるUnityがこんなショボいセーブ機能しか搭載していないのは正直いかがなものかと思っています。私はUnityは好きですがこの点についてはまったく呆れるばかりであり、変な新機能を追加する暇があったらちゃんとしたセーブ機能を搭載してくれよ!といつも思っています。
大量のデータを管理する機能がない
次に二つ目に不便な点として、Unityには大量のデータを管理する機能がありません。
いちおうデータを格納できるファイル(=ScriptableObject)を作る機能は搭載されていますが、データベース的なものではないので大量のデータを扱うのには向いていないです。
大量のデータを扱えないとどうなるのかというと、例えばRPGなどデータ量の多いゲームを作るハードルがものすごく高くなります。Unityでアクションゲームがたくさん作られているのにRPGはめったに見ないのはそのせいだと思います。
フラグ管理機能もない
三つ目は↑に関連した弱点でUnityにはフラグ管理機能もありません。
フラグ管理機能が標準搭載されていないため、やはりUnityではRPGなど大量のフラグを扱うゲームを作るのはかなり難しいです。また、RPGほどではなくてもローグライクゲームのように「新しいアイテムや能力をアンロックする」とか、収集ゲームのように「図鑑の新しい項目をアンロックする」といった機能が欲しい場合も自作するかアセットを使うしかないので面倒になります。
フラグ管理も現代的なゲームであれば絶対に必要なはずなのですが、なぜかUnityにはそのような機能が搭載されておらずその点は不可解だというほかありません。
グラフィックの描画システムが3種類もあり分かりづらい上に、それぞれ互換性がない
四つ目として、現行のUnityにはグラフィックの描画システムが3種類もあって分かりづらい上に、それぞれ互換性がない点も明確な欠点です。
具体的に言うと現行のUnityの描画システムの種類は次のようになっています。
- ビルトインRP:
旧式の描画システム。新機能は追加されない上に描画処理が最適化されていないなど固有の弱点があるが、未だに使っている人が多い - SRP
- URP:
幅広い端末をサポートする描画システム。登場から何年も経っているにもかかわらずイマイチ浸透していない感じがある - HDRP:
ハイエンド向けのリアルなグラフィック描画を得意とするシステム。アンリアルエンジンに対抗するために作られた感があるが、使っている人をほとんど見かけない(リアルさが欲しい人はアンリアルのほうを使うから?)
- URP:
なんか種類が多くて分かりづらいだけでなく、一番の問題点としてそれぞれの描画システムに互換性がないことが挙げられます。
例えばビルトインRP用のシェーダーはURP用として使えないですしその逆もまた然りです。なのでアセットストアで買ったビルトインRP用の3DモデルをURPのプロジェクトに入れたらピンク色(シェーダーエラー)になっちゃった!なんてことが頻発します。一応、標準のマテリアルであればビルトインRP用→URP用に変換する機能があるのですが、使い方がわかりづらい上に標準のシェーダーを使っているマテリアルしか変換できないので依然としてめちゃくちゃ不便です。
ちなみにUnityさん的には新しい描画システム(URPとHDRP)を広く普及させたかったっぽいのですが、VRChatなどの人気コンテンツがビルトインRPにしか対応していないといったこともあって未だに旧式の描画システムを使っている人が多いのがかなり残念なところです。
新しいバージョンのUnityがバグまみれで困ることがある
五つ目の欠点は、新しいバージョンのUnityがバグまみれで困ることがよくある点です。
Unityは大まかに分けると
- 安定版(=LTS)
- 最新の機能を搭載したTECHストリーム
という2種類のバージョンがあります。TECHストリームのほうは新機能が追加される分、不安定になることもあってそれはそれで仕方ないと思うのですが…問題は安定版とされるLTSバージョンも出始めのときはバグまみれの場合があるということです。
個人的な経験談ですがUnity2022は特にひどかったです。安定版が出て「やったー!」と思って飛びついたらバグだらけで全く使い物にならず、しばらくゲーム開発がストップした記憶があります。
このようにUnityは安定版と言いつつバグてんこ盛りのままリリースされることがあるので、すぐに最新版に飛びつかず何か月か様子を見たほうが安全でしょう…。
Unityのバージョンを新しくするとアセットが動かなくなることがよくある
最後に六つ目として、Unityのバージョンを新しくするとせっかく買ったアセットが動かなくなることがよくある点が挙げられます。
Unityでは新機能の追加や仕様変更が割と頻繁に行われます。それ自体はありがたいのですが、副作用として「バージョンを上げたら今まで使えていたアセットが動かなくなっちゃった!」なんてことは日常茶飯事です。
もちろんアセット作者の方が対応してくれることもあります…が、やる気のないアセット作者の方や古いアセットの場合はそもそも更新してくれる可能性が低いので「アセットが最新版に対応してくれたらラッキー」と思うほかありません。運悪く対応してもらえなかったら泣き寝入りです。
このようなことがあるので、Unityでゲームを作る場合はよほどのことがない限りは同じバージョンを使い続ける(=あるゲームを作っている途中でUnityのバージョンを変更しない)のが正解です。
Unityの弱点・欠点を上手く補う方法
では最後に、上記を踏まえたうえでUnityの弱点・欠点を上手く補うためのポイントをいくつかまとめておきます。
セーブ機能・データ管理機能・フラグ管理機能などの必須機能は自分で作るか素直にアセットを買う
まずセーブ機能・データ管理機能・フラグ管理機能など、ゲーム開発には必須だけどUnityの標準機能として搭載されていないものについては自作するか素直にアセットを使うようにしましょう。私はその辺の機能は全部自作していますが、自作が難しい初心者の方の場合は(少々高価ではありますが)アセットを買って使ったほうが圧倒的に快適です。
例えば、便利なセーブ機能を追加するアセットとしては「Easy Save」が有名です。
またデータ管理機能を追加するなら「Databrain」というアセットがあります。
有名なアセットはたまに割引を行っている場合があるので、そういったタイミングを逃さずに購入するとよいでしょう。
グラフィックの描画システムの違いをきちんと理解する
次に二つ目として、Unityを使うならグラフィック描画システムの違いをきちんと理解しておいた方がいいです。違いが分からないままだと混乱の元になり、間違ったアセットを買ってしまうなど損する結果になりがちですので気をつけましょう。
ビルトインRP・URP・HDRPの違いや比較については下記の記事で詳しく解説していますので、よくわかんないなという方は是非そちらもご覧ください。
Unityのバージョンは必ず「バグ修正が進んだ安定版」を使う
最後に三つ目のポイントは、Unityのバージョンは必ずバグ修正が進んだ安定版を使うようにすることです。
安定版ではないTECHストリームを本命のプロジェクトに使うのは初心者の方にはお勧めできませんし、安定版であるLTSもリリース直後は不安定なことがあるのですぐに飛びつかないほうがいいです。最新の安定版が出たらしばらく様子見してから使うようにしましょう。
また、先ほども書きましたがゲームを作りかけている状態でUnityのバージョンを変更するのも(よほどの理由がない限りは)やめたほうがいいです。もちろんUnityのバグが酷いから修正版を使う、といった理由なら仕方ありませんが、新機能を試したいとか何となく新しいバージョンを使いたいから…といった理由の場合はやめといたほうが無難です。
おわりに
以上、Unityの主な弱点・欠点とそれを上手く補う方法について書きました。Unityは素晴らしいゲームエンジンですが色々な弱点もあるので、上記の内容を参考にしていただき弱点と上手く付き合っていただきたいなと思います。
この記事がUnityでのゲーム開発のお役に立てば幸いです。