DoozyUIとModern UIでUnity(uGUI)臭さを消してみる

最初に

この記事は Unity アセット真夏のアドベントカレンダー 2020 Summer! の8月22日の記事です。
昨日はパルディ博士の助手RDAGさんによる「Vtuberなら時止めくらい軽くこなしてエモを出していこう【AssetAdventCalendar2020】」でした。

あれ、VIVEアンバサダーのRDAGさんじゃないですか。
奇遇ですね私もVIVEアンバサダーです。

概要

皆さんUnityでUI作るときどうしてますか?
まさかuGUIそのまま、って人は流石にいないかと思いますが、毎回PhotoshopIllustratorで作るのはコスパが悪く感じませんか?

あとCanvas管理とかView管理とかイベント管理とか、どうしてますか?
というかわからなくなりませんか?私は一度素のuGUIで頑張ったら無事わからなくなって爆死したことがあります!

こういったUI素材作りやCanvas管理など、面倒で手を抜きがちな要素をそのまま放置していると、いわゆる「Unity臭さ」というのがバリバリ出てしまいます。

f:id:karukaru808:20200820031735p:plain
「Unity臭い」UI

この「Unity臭さ」をDoozyUIとModern UI Packで楽して消そうよ、というのがこの記事の目的です。

DoozyUI とは

assetstore.unity.com
DoozyUIはUI管理やアニメーション、SE、アイコン、デザイン、等々を簡単に管理できるようにした、Unity Editor のネイティブ拡張アセットです。
専用のデータベースをプロジェクト内に持ち、これまた専用のウィンドウからデータを登録・変更・削除といった操作が行えて、UI素材の一括管理ができるようになっています。
またキャンパス間のノードベース遷移図も作成でき、どのキャンパスのどのボタンがどういった遷移を持っているのか、といった情報が一目でわかるようになっています。

これらをうまく活用すると、UI素材を変更しても参照はちゃんと持たれたまま一気に変更するとか、ボタンの持つ遷移を一括で変更する、みたいなことができます。

f:id:karukaru808:20200820003717p:plain
データベース管理画面

f:id:karukaru808:20200820005540p:plain
ノードベース遷移図

Modern UI Pack とは

assetstore.unity.com
シンプルかつモダンなUI素材が沢山入っているアセットです。
ボタン、アイコン、スライダー、プログレスバーセレクター、ドロップダウン、テキストフィールド、チェックボックス、モーダルウィンドウ、等々、本当にこのアセットさえあればUI素材はどうにかなります。

f:id:karukaru808:20200820030533p:plain
サンプルのタイトル画面、もうこの時点でカッコイイ

f:id:karukaru808:20200820030541p:plain
ボタンサンプル

f:id:karukaru808:20200820030543p:plain
プログレスバーサンプル

導入

Modern UIはアセットストアからインポートすればOKです。
DoozyUIに関してはわかりやすいインストール手順を書いていらっしゃる方がいるので割愛します。
とりすーぷさんが公開されているスライドがわかりやすい為、ここに貼らせていただきます。

www.slideshare.net

DoozyUIとModern UIの連携

DoozyUIとModern UIはまったく別の作者さんが作られていますし、相互連携が公式にサポートされているわけではないので、一部機能を使用する上で躓きやすいポイントがいくつかあります。
ここではボタンを例に解決したいと思います。

Button

コンテキストメニューから簡単に生成できますが、DoozyUIのUIButtonではなく、Modern UIのButtonを生成してください。
f:id:karukaru808:20200821125448p:plain
Modern UIのButtonを生成

生成されたボタンに対してDoozyUIのUIButtonコンポーネントを追加します。
f:id:karukaru808:20200821134046p:plain
UIButtonコンポーネントを追加

そしてButtonManagerBasicコンポーネントのSettingsから、UseCustomContentをオンにします。
このコンポーネントはModern UIに付いてくるものなのですが、あくまでもModern UIはUI素材の提供として割り切って管理はDoozyUIに任せたいため、Modern UI側の管理機能は切ってしまいます。
UseCustomContentをオンにすることで、TextMeshProコンポーネントのテキストを直接編集できるようになります。
f:id:karukaru808:20200821135048p:plain
UseCustomContentをオン

最後にButtonの子にあるテキストに対して、DoozyUIのColorTargetTextMeshProコンポーネントと、FontTargetTextMeshProコンポーネントを追加します。
この2つのコンポーネントはTextMeshProのテキストカラー、フォントをDoozyUIのデータベースで指定したものに自動設定してくれるコンポーネントになります。
f:id:karukaru808:20200821134246p:plain
TargetTextMeshProコンポーネントを追加

f:id:karukaru808:20200821141450p:plain
DoozyUIデータベースのThemesタブで一括管理できる

この3つさえ行えばOKです。
あとはDoozyUIデータベースでカラーを変えてみたり、フォントを変えてみたりしてください。変更した直後にその内容が反映されるかと思います。
もし反映されない場合は、データベースのThemesタブにあるDefaultと書かれたボタンを押すと反映されたりします。
f:id:karukaru808:20200821140841p:plain
反映されないときはDefaultボタンを押す

Image

Modern UI関係なくなってしまいますが、ImageコンポーネントのSpriteやカラーも管理できるため、一緒に紹介します。
こちらは普通のuGUIのImageを作成してください。
f:id:karukaru808:20200821143530p:plain
uGUI Imageを作成

これにColorTargetImageコンポーネント、SpriteTargetImageコンポーネントを追加します。
f:id:karukaru808:20200821173628p:plain
TargetImageコンポーネントを追加

こうすることでDoozyUIデータベースに登録された素材が反映されます。
Modern UIにある素材もDoozyUIデータベースに登録してから使用することで、管理が容易になります。

これら以外にもSpriteRendererやParticleSystemに対してUI管理可能なコンポーネントもあります。
だいたい「(管理したい情報)Target(管理対象のコンポーネント)」みたいな名前であるので、必要なときに検索して追加してください。

結果

で結局DoozyUIとModern UIを使うとどういう感じになるの?というところですが、同じようなUIを持った簡単なゲームを、UI作成にuGUIを使用したものとDoozyUIを使用したものの2つ作成してみました。
(UIサンプルという意味で作ったので、ゲーム内容には目を瞑ってほしいです…。)

見比べていただければわかりますが、DoozyUI + Modern UIを組み合わせることでだいぶマシになっているのがわかるかと思います。

unityroom.com
unityroom.com

最後に

ざっくり駆け足でしたが、DoozyUIとModern UIを組み合わせてUnity臭さを消してみました。
まだまだ紹介したいことはたくさんありますが、文章量が大変なことになってしまうのでここで一区切りしたいと思います。

明日はデニキさんによる「『In-Game Debug Log for AR and VR devices』で XR のデバッグを楽にしよう」です。