はじめに
今回はUnityのUI制作ツールの使い分けについて、記事を書きました。
皆さんはゲームのUIについてどう考えているでしょうか?もちろん、ゲームそのものが大事なのは言うまでもないんですが、私はかなりUI(とUX)を意識しています。だって、手触り悪いゲームを続けたいとは思わないからです。
ゲームの見た目はやはり重要なわけですが、こだわるといっても、できるだけ便利に、素早く作りたい、というのはあると思います。なので、今までのUnityの主流であった「uGUI」と最近公式が推している「UIToolKit」について、それぞれの利点や、使い方についてまとめていきます。
ところで、見た目が重要ってことは、絵とか音とかの方が大事みたいな感じになってしまいそうですが、悲しみなので今回は触れません。
uGUI
皆さんお馴染みの方です。具体的には、GameObjectとコンポーネント(Transform)ベースのUIシステムです。
主な特徴として、
○圧倒的な情報量とアセットの豊富さを持つ
○直感的なビジュアル編集ができ、非プログラマでも扱いやすい
○既存システムやアセットとの親和性が大きい
×再ビルドによるパフォーマンスのボトルネックがある(UI要素が1つでも動くと、その所属するCanvas全体を再描画する仕様があるため)
×コンフリクトが起きやすく、複数人開発に向かない
×アスペクト比や解像度の異なるスマホなどの端末に対応させるのが難しい(アンカーなどを使えばある程度は軽減可能)
があります。性質上、演出重視のACTやRPGなどのゲームやデザイナーが主導する少人数開発のゲームに向いています。
UIToolkit
Web標準技術であるHTMLとCSSの思想を取り入れた、Unityの次世代UIシステムです。まだ、正統後継者と言えるかは微妙です。
主な特徴として、
○内部的に描画が高度に最適化されているので、圧倒的なパフォーマンスを持つ
○テキストベースのUXMLとUSSで管理されているので、データと見た目が分離されており、コンフリクトが起きにくく、複数人開発に強い
○自動レイアウトにより、画面サイズやデバイスに合わせた配置やリストの自動折り返しが容易にできる(Flexbox)
×3D空間や演出との連動が苦手
×伝統から外れているために学習コストが高い
×サードパーティ製のアセットが少なく、魅力的なテンプレートやアニメーションをあまり使えない
があります。性質上、情報量重視のSLGやカードゲームなどのゲームやプログラマーが主導する大規模なゲームに向いています。
なお、UIToolkit自体はこのようなイメージです。
<ui:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" noNamespaceSchemaLocation="../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
<ui:Label text="halloworld" name="text" style="color: rgb(255, 0, 0); font-size: 20px;"/>
</ui:UXML>
おわりに
それぞれに利点と欠点があるので、現在のUnity開発における現実的なアプローチは、「ハイブリッド」だと考えています。
例えば、ゲーム全体のベース(メニュー画面、設定、インベントリなど)はデータ管理しやすく軽量なUIToolkitで構築し、特にリッチな演出が必要なバトル中のHUDやガチャ画面、3D空間上のUIにはuGUIを部分的に組み込む、という設計があり得るでしょう。
うまく使い分けて、良いUIに仕上げましょう。

