UnityでUIアプリ:3つの方法

Unity での UI開発 には3種類の方式があります。割と常識的な事柄かと思いますが、最初私はこのあたりよくわからず戸惑ったので記載します。

① Unity UI
 以前はuGUI と呼ばれていたようです。
 後述の② UI Toolkit よりも古い方式ですが、現状はまだ主流ではないでしょうか。
 通常の方法で Unity を導入すると標準ではこの方式になります。例えば、Unity画面の Hierarchy で Scene を右クリック > GameObject > UI > Canvas を挿入した後、同様に UI の下の Button とかを挿入して画面を作っていくのはこの Unity UI です
 現状、私はこれで UI を作っています。

② UI Toolkit
 新しい方式です。
 以前はUIElements と呼ばれていたようです。
 現状はまだ “preview” と呼ばれるベータ版的なステータスで、開発途中です。(2021/8時点)
 とはいえ今後はこの方式になるとUnityは言っています。
 UI Toolkit でアプリを開発するには、現状はUnity へ UI toolkit package を手動で追加する必要があります。
 Web画面のGUIと似た考え方で、USS (Unity style Sheets) と呼ばれる css みたいなのもあります。Web画面開発に慣れている人は比較的とっつきやすいのだと思います。
 UI Toolkitで画面開発する場合、UXML と呼ばれる XML形式のテキストファイルへ画面要素を定義していくことになりますが、wyswyg的に定義できる UI Builder というツールもあります。(これも使うには手動で追加する。)

③ IMGUI ( Immediate Mode GUI )
 開発者用のGUIを作ったりするもので、通常のアプリの画面処理には原則使わないようです。
 私は使ったことがなくよく知りませんので、この IMGUI については特に記述しません。

で、Unityとしては今後 ② UI Toolkit を主流としたいようで、このせいで ① Unity UI にバグがあってもあまり対応される気配がない気がします。
では今から新しいアプリを作る人はどちらを使えばいいのでしょうか?正直私は分かりません。
一応、比較ページ もありますが、これ見てもよくわかりません。
① Unity UI で開発している画面に、② UI Toolkit のコンポーネントを加えることもできるらしく共存できるとのことで、最悪そういう手もあるのかもですね。

namespaceは、
① Unity UI は UnityEngine.UI
② UI Toolkit は UnityEngine.UIElements
です。中には同じ名前のコンポーネントがたくさんあるので注意してください。(例: Button)
例えばUnity の ドキュメントの Scripting API で Button を見ている場合、上部に、class in UnityEngine.UIElements と書いてあれば UI Toolkit のコンポーネントを見ています。
Unity UI の方を見たい場合は、 UnityEngine.UI のnamespaceを見る必要があります。ところが最近のUnity ドキュメントには ① Unity UI の記載がありません。
Unity UI を見たい場合は、2019.1以前のドキュメント を見るかまたは Unity UIパッケージのページを見ます。 ちなみに2019.1(~2018.3)の Scirpting API ドキュメントには、① Unity UI と ② UI Toolkit の両方が掲載されているので注意して参照してください。(要は ① Unity UI の Button と、② UI Toolkit の Button の両方が掲載されている)

ちなみに私は通常 2019.1 の ドキュメントを参照しています。これであれば ① Unity UI もその他のnamespaceも参照可能なためです。但し最新情報ではないことに注意が必要があります。例えば Unity.UI.Graphic の プロパティ raycastPadding は 2020.1あたりから追加されたらしく 2019.1 のドキュメントには当然載ってないので注意。

以上