CA.unityはサイバーエージェントが運営するUnityをテーマにした勉強会です。サイバーエージェントのサービス開発者と社外の開発者を交えて、Unityに関する知見を共有する場となります。CA.unity #9では、ユニティ・テクノロジーズ・ジャパン株式会社様とサイバーエージェントが登壇いたします。

※CA.unityは、Unity Technologiesまたはその関連会社がスポンサーとなっているものでも、提携しているものでもありません。Unityは、米国およびその他の国におけるUnity Technologiesまたはその関連会社の商標または登録商標です。

本記事は、2025年01月08(水)に開催した「CA.unity #9」において発表された「Unity6世代のアップデートをサラッとまとめ」に対して、社内の生成AI議事録ツール「コエログ」を活用して書き起こし、登壇者本人が監修役として加筆修正しました。


黒河 優介(ユニティ・テクノロジーズ・ジャパン株式会社 パートナーエンジニア)

アーケードやモバイルゲームのクライアントやサーバーの開発に従事後、2016年にユニティ・テクノロジーズ・ジャパンに入社。今はサポートの仕事を行っています。

X:https://x.com/wotakuro

GitHub:https://github.com/wotakuro


ユニティ・テクノロジーズ・ジャパンの黒川と申します。よろしくお願いいたします。まずはじめに、これからお話しする内容は急に変わる可能性がありますが、一部は変わらない場合もございます。すでにリリースされたUnityについて、まずUnity 6に入る前に現状を振り返りたいと思います。

Unity 2021と2022のサポート期間についてですが、ProのライセンスとEnterpriseのライセンスでサポート期間が異なっております。2021は、Proユーザーに対してはバージョンサポートが停止され、パッチが提供されません。一方、Enterpriseのお客様には2025年10月までパッチが提供されます。2022に関しては、今年の5月までパッチが提供され、Enterpriseのお客様には来年の5月まで提供される形となっております。

Unity 6以前では2021.3 LTSがリリースされ、LTSと表記されており、その後、マイナーバージョンが順次アップデートされる形となっていました。しかし、Unity 6になると、少し変わってきました。

現在、6.0で、6.1アルファがリリースされております。6.0のパッチバージョンは1,2,3,4,5,6と続いており、現在は約40までリリースされています。しかし、6.1がリリースされた瞬間に、たとえば6.0が45になった場合、6.1がリリースされた時点以降はその45からの更新が行われず、パッチが提供されなくなります。そのため、6.1をご利用いただくというスタンスとなっております。

一応、開発側の意向としては、追加する機能はごく僅かであり、従来のLTSと変わらない形で運用していくつもりであるとのことですが、やはり断絶が生じる点については、今後Unity 6をご利用いただく際に注意が必要かと思われます。

6.0はすでにリリース済みで、6.1は現在アルファバージョンとなっており、まもなくベータへ移行し、今年の4月にリリースされる予定です。先ほども申し上げましたが、6.1がリリースされると6.0にはパッチが提供されなくなりますので、6.0から6.1への移行が必要となります。

なお、6.0で修正された内容はすべて6.1に反映される予定で、さらに新機能が追加される見込みです。また、今後のリリースについては、仮に6.2が登場した場合、6.1のパッチは終了され、6.1をご利用のお客様は6.2へ移行していただく形となります。このように、従来のLTSとは少し異なる運用となります。

6.xのリリース回数に関しては、現時点では社内でもまだ決定されておりません。

6.0、6.1という形で順次アップデートしていくため、6で何が変わったのかを簡単にご紹介いたします。

6になってから、ビルド時の手順が少し変わりました。以前はBuild Settingsが使用されていましたが、現在はBuild Profileに変更されています。これはポジティブな変化で、従来、Android向けにビルドする際に自前でスクリプトを作成するなどの手間がありましたが、UI上でAndroidのデバッグ用、開発用、お客様向けやプレス向けの先行バージョンなど、複数の設定でビルドが行えるようになりました。

また、多くのお客様から強いご要望をいただいておりましたスマホのWebGLのWebサポートについてですが、従来は公式には動作しないものの、何となく動作する状態でした。しかし、今回、正式にサポートする旨をお伝えし、実際に動作するようにいたしました。条件につきましては、記載されている通りです。

また、皆様ご覧になったことがあるかもしれませんが、レンダリング周りに関してかなりの改善を実施いたしました。ただし、条件が限られており、左2つがForward+と呼ばれるレンダリングパイプラインを選択する必要があるため、使用可能な状況はユーザーによって大きく異なる可能性がございます。

また、STPと呼ばれるアンチエイリアスの高度なバージョンにつきましては、後ほど詳細な発表を行う方がおられますので、そちらをご参照いただければと存じます。ただし、いずれもコンピュートシェーダーに対応していない場合は動作しませんので、Androidでミドルまたはローエンドの環境を対象とする場合は、これらの機能が使用できない可能性がございます。

また、ライティング周りも向上いたしました。従来あったLight Probe機能は、配置が非常に煩雑であったため、Adaptive Probe Volumesという、配置しやすい新機能を追加いたしました。

また、これまでエクスペリメンタルな実験的機能として実施していた、ライトマップを焼く際にGPUで処理する機能が、ついに正式にリリースされました。CPUで実行する場合に比べ、全体の処理が大幅に高速化される見込みです。実は、私自身はUnity Japan Officeにおいて、アセットストアの更新を業務から外れた形で取り組んでおりますが、初めはライトを焼く際にCPUを使用していたために24時間ほどかかっていたところ、GPUに変更した結果、約1時間でアセットのライトの処理が完了するようになりました。ライト待ちの方には嬉しいお話だと考えております。

また、Multiplayerのゲームに関してですが、UnityでNetCodeなどの機能を利用する際、これまで複数のMultiplayerパッケージが存在し、どのパッケージを利用すべきかや、目的に合わせたサンプルコードの入手に苦労されることが多々ありました。しかし、エディター上で「こういったゲームを作りたい」と選択するだけで、Multiplayer Centerという機能が登場し、マルチプレイのゲーム制作の敷居が下がったと感じております。

さらに、Multiplayer Playmodeにより、同一プロジェクト内で複数のエディターを立ち上げることが可能となりました。これまではビルドして.exeに書き出すなどの手間がありましたが、現在では、同一プロジェクトでエディターを複数起動し、プレイボタンを押すとプレイ画面が3つ表示され、マルチプレイのデバッグが容易になっております。なお、この機能はUnityのNetCodeを使用していないお客様でもご利用いただける技術となっております。

ここまでの発表は大きな変更の紹介でした。次にご紹介するのは、少し地味な変更となります。TextMeshProと呼ばれる機能がuGUIに統合されました。

これまでTextMeshProは独立したパッケージであり、複数のバージョンが存在して選択に悩む状況でしたが、一本化され、uGUIの2.0.0にアップデートしていただく形となりました。もしTextMeshProに更新があった場合は、uGUIが更新されますが、uGUIのパッケージが更新されていても、基本的にはTextMeshProの更新であるとご理解ください。

あと、これは結構マニアックな方しか刺さらないかもしれませんが、地味に重要な改善点としてMemoryProfilerが向上しました。今までUnityの管理外のメモリを見ることができましたが、実際の物理メモリではなく、OSから返ってきた数値をそのまま表示していました。実は、OSがこんなに使っていると言いつつ、実際には物理メモリに乗っけていない部分があったのですが、今回、OS側から物理メモリの使用量を正確に取得できるようになったため、Unity以外の、Unity管理外のメモリについて把握がより正確になりました。

このように6.0のアップデートについてお話ししてきましたので、次に6.1以降の内容についてご紹介させていただきます。6.1に含まれる内容もあれば、6.2もしくはその先になるものがあるかもしれません。

こちらはDefferd+と呼ばれるもので、ほぼ6.1に内定しており、これまでForward+でしか実現できなかった機能を、Defferdを使いたいというお客様のために、新たな選択肢として追加しました。Defferdを前提としながら、Forward+にあったような機能が利用できる形となっています。

BuildProfileについてですが、先ほどお話ししたように、設定ごとにAndroid向けに様々な変更が可能になったという点で更新がありました。これまでは、PlayerSettingsしか書き換えができず、PlayerSettings用のビルド設定は複数作成できたものの、GraphicsSettingsやQualitySettingsを書き換えてビルドすることができなかったため、今回、その対応を行いました。また、推奨のVRの場合などに推奨パッケージを出すといった機能も追加されています。これらの変更も、6.1に含まれる内容です。

また、Androidで一部の方にしか刺さらないかもですが、折りたたみスマホについて。こちらも正式に対応を進めています。実は6.0で既にかなり対応が進んでいるのですが、正式には6.1で対応される予定です。Androidの折りたたみ状態において、どのくらい折りたたんでいるかという角度も取得できるようになっており、そのような点に取り組んでいます。

さらに、BuildProfileの流れに関連して、Meta Questを利用される方には嬉しい、Meta Quest専用のビルドが可能となる機能も追加されています。

また、Webについてですが、モバイルのWebGLに対応したという点で、Web GPUという次世代のWebテクノロジーにも対応しています。Web GPUはブラウザによって対応状況が異なるという状況ではありますが、Unity側でWeb GPUに対応しており、6.0でも実は対応していました。ただ、6.0ではProjectSettingsのファイルを直接書き換える隠し設定になっていたため、6.1ではエクスペリメンタルと表示されるものの、有効にするボタンが正式に追加されました。

何が嬉しいかというと、一番はCompute ShaderがWebプラットフォームでも動作するようになるため、VFX GraphのようなものがWeb向けのゲームでも利用できるようになる点です。Androidについても、Chromeの最新例などに合わせた対応状況になっていると思います。こちらも6.1に含まれる内容です。

次にご紹介するのは、今後追加される予定の機能です。Multiplayerにおいて、現在はホストがゲーム終了する際、何らかのプログラムエラー等で終了してしまうとNetplayも終了してしまいます。しかし、ホストと呼ばれる管理者を別のユーザーに移譲し、そのままマルチプレイを継続できるようにする仕組みを検討中です。この機能は6.1には含まれず、その先で追加される予定です。

これも6.1で入らないものなんですが、Mesh LODと呼ばれるものです。今までLODという、距離に応じたモデルを生成する機能がUnityにはなかったのですが、ついにUnity側に入りました。インポート時にチェックボックスを1個入れると自動で作ってくれます。

これが面白いのは、ゲームオブジェクトなどは一切追加する必要がなく、チェックボックスを入れてMeshRendererとSkinned Mesh Rendererなどが対応しており、側のエンジンコードも書き換わっているので、ポチっと押すとなんとなく勝手に反映される、というぐらい手軽に使えるものになっています。

ちょっと技術的な話をすると、Vertex Bufferには一切手を付けず、LODごとに専用のインデックスバッファーを新規で追加するという作りになっているので、ここの三角形スキップのような感じで作っていくという仕組みです。初期設定だとなんとなくLODを自動で選択してくれるようになりますし、MeshRendererに設定項目が増えているので、スクリプト経由で「今はこのLODを出してください」といった指定もできるようになっています。なお、Skinned Mesh Rendererにも対応しています。

Skinned Mesh Rendererも対応しており、こんな感じで、まあ6ぐらいになるとクオリティがガクガクと変化します。チェックボックスを1個付けて、インポートするだけで自動で作られ、プレビューも可能です。人のメッシュは元々細かい感じなので、5ぐらいでも遠目に見れば、56でも遠目に見れば、これでかなり描画ポリゴン数を減らすことができた、という感じです。

特に遠い対象に対して有効であるという点が特徴です。

すごい駆け足ではありましたが、これにて私の発表を終わります。ありがとうございました.