いつものように前口上書いているうちにテンション下がるので本題から。
理由がなければ LTS
- 最新メジャーバージョンは Experimental*1。どうしても最新機能を使いたい理由が無い限り、LTS が出ているメジャーバージョンを使う。
- LTS は2年間のサポートが保証されるだけでなく、以後のバージョンで修正された不具合も遡って修正されることがあるので、名目上は最も安定している。
- 初期ほどの不安定さはないものの、Unity 自体が様々な機能を持ち、様々なプラットフォームで動作する巨大なプロダクトであるため、最新バージョンには結構な確率でとんでもない不具合が潜んでいる。
できるかぎり最新のメジャーバージョン
- メジャーバージョンが上がるとエディタの使い勝手が結構変わったりして、ユーザ的にはお気に入りのバージョン、あんまりお気に入らないバージョンがあるとは思うが、そんなことを言っていられるほど開発環境というのは甘くない。
- なぜなら、PC 以外のほぼすべてのプラットフォームで、リリースできる Unity バージョンは極めて狭く制限されているからである。
- コンシューマではマスター提出可能バージョンなどと言われており、マスターアップ時に必ず指定されたバージョンでなければ QA で弾かれる。
- 一度出してしまえば、パッチ等で更新する時に古いバージョンの開発環境のままであっても不問申請が可能。
- モバイルでは時折唐突に更新されるガイドラインに従って、ROMを更新する必要があり、その要件を満たすために新しいバージョンの Unity を求められることがある。
- そもそもゲーム制作が2年以上に及んだ場合、作っているうちにマスター提出できないバージョンになってしまったりするので、更新の必要は出てきたりするのだが……。
- (幸い、Unity5->Unity2017の時に起きたような壊滅的なプロジェクト破壊は最近はあまり起きないのでバージョンアップくらいなら割となんとかなる)
できる限り古いマイナーバージョン
- 例えばバージョンが 2021.3.20f1 であったら、この「20」にあたるのがマイナーバージョンだが、ここはできる限り古い値にしておきたい。なぜかというと……
- 残念なことに、Unity の LTS は LTS であるにもかかわらずに結構な不具合が潜んでいることがあり、バージョンが一つ違うと修正される、あるいは発現する不具合がある。
- コンシューマにおいては更にその足並みは混沌を極める。例えばゲーム機 A の◯◯という機能を使った場合に起こる不具合が 3.10f1 で修正された一方で、別の□□という機能を使った場合に起こる不具合が 3.16f1 から発現し、それがいまだ修正されていない、みたいなことがままある。
- しかたないから 3.15f1 で開発していると、ゲーム機 B では 3.14f1 から発生したとある不具合が致命的でマスターできなくなる、なんてことが起きる。最近の Unity では比較的安定しているとはいえ、基本的に開発環境のダウングレードは避けたい。
- なので、マイナーバージョンはできる限り古いものを利用し*2、自分のプロダクトにクリティカルな不具合が出た場合のみ、それが修正されたバージョンへと上げるべきである。英語のリリースノートとにらめっこしながら最適なマイナーバージョンを選ぼう。地獄である。
開発中はあんまり更新するな!
- 「そういえば最近、ここの表示おかしいな……いつからだ……?」と追ってみると、なぜか実装時のリビジョンからおかしくなっており、辿ってみれば結局 Unity のバグだったということが結構ある。Unity もマイナーバージョン一つ上げるのに何千とあるアセットやシェーダとの整合性を確認することは難しく、多少の不具合は仕方ない。
- が、最新が出たから更新シヨーみたいな気持ちで更新しまくると、自分が世界で初めて見つける不具合にもまあまあ出会う。お前が報告するんだよ!
- というわけで、開発中にあんまり更新するのはやめよう。マスターを見据えるようになった時期に、最適なマイナーバージョンを選び、あとは祈るのみである。幸あれ。
まとめ
- できるかぎり最新の LTS を使い、マイナーバージョンは古いものにする
- 開発中はあんまり更新しない
- アップデートする時は祈れ
以上!