12
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QualiArtsAdvent Calendar 2024

Day 12

【Unity】UI Toolkitでデジタルサイネージを作ってみよう

Last updated at Posted at 2024-12-11

画面収録 2024-12-11 19.42.19.gif

はじめに

本記事は、QualiArts Advent Calender 2024の12日目の記事になります。

Unityで上記画像のようなサイネージを作るとき、どのような方法があるでしょうか?
これはUIを3D空間上に表示すれば実現できます。

Canvasを使用する方法

UIを3D空間に表示する一般的な実現方法はCanvasを使用して、World Spaceで配置する方法だと思われます。

スクリーンショット 2024-12-11 21.36.29.png

しかしこの方法には2つの問題があります。

問題1: ライティングができない

World Space Canvasはライティングができません。

画面収録 2024-12-11 19.35.29.gif

問題2: 平面以外の描画ができない

World Space Canvasは平面に描画されるため、曲面に描画するようなことができません。

画面収録 2024-12-11 19.40.20-lossy.gif

解決: メッシュに描画する

これらの問題を解決するための方法として、メッシュに描画する方法があります。
メッシュのマテリアルにテクスチャを指定するだけの一般的な方法です。
マテリアルにはRenderTextureも指定することができるため、UIをRenderTextureにレンダリングして、メッシュに描画することで、上記の問題を解決することができます。

スクリーンショット 2024-12-11 21.21.55.png

UI ToolkitでRenderTextureに描画する

UI ToolkitではUIをRenderTextureにレンダリングすることができます。

これを活用してクリスマスまでカウントするシンプルオブジェクトを作成しましょう。

必要なアセット

UI ToolkitでUIをRenderTextureに描画するには3つのアセットと1つのシーン上のコンポーネントが必要になります

名称 配置場所 説明
UI Documentアセット アセット UIの内容を定義するアセット
RenderTexture アセット UIを描画するRenderTexture
Panel Setting Asset アセット UI Documentの描画方法を設定するアセット
UI Document シーン UI Toolkitを実際に描画するコンポーネント

UI Documentアセットの作成

Projectを右クリックしてCreate→ UI Toolkit → UI DocumentからUI Documentを作成します。

スクリーンショット 2024-12-11 19.53.34.png

解像度の設定

作成したUI DocumentをダブルクリックするとUI Builderが立ち上がるのでSizeを1200x400にします。

スクリーンショット 2024-12-11 19.54.46.png

UIの作成

ラベルを使って以下のUIを作成します。
カウントダウン秒数の部分は後ほスクリプトから設定するため、一旦適当な文字列を入れておきます。

UI Builderの使い方に関しては、以下のマニュアルを参考にしてください。
https://docs.unity3d.com/6000.0/Documentation/Manual/UIBuilder.html

スクリーンショット 2024-12-11 20.54.55.png

RenderTextureの作成

UIを描画するRenderTextureを作成します。

Projectを右クリックしてCreate→ Rendering → Render TextureからRenderTextureを作成します。

スクリーンショット 2024-12-11 19.58.18.png

解像度はUI Builderと合わせて1200x400に設定します。
スクリーンショット 2024-12-11 19.59.55.png

Panel Settings Assetの作成

Panel Settingsを作成して
Projectを右クリックしてCreate→ UI Toolkit → Panel Settings AssetからPanel Settings Assetを作成します。

スクリーンショット 2024-12-11 20.42.06.png

  • Target TextureにRender Textureを指定
  • Scale ModeをConstant Pixel Sizeに設定
  • ScaleMode ParametersのReference Sprite Pixel Per Unitを100に設定
    スクリーンショット 2024-12-11 20.44.10.png

シーンにUI Documetを配置

適当なオブジェクトにUI Documentを追加し、先ほど作ったPanel SettingsUI Documentを指定します。

スクリーンショット 2024-12-11 21.58.09.png

これで作成したRenderTextureにUI Documentの内容が表示されます。

スクリーンショット 2024-12-11 20.50.33.png

このRenderTextureをPlaneのEmissionMapに指定するとPlaneにカウントダウンが表示されます。

スクリーンショット 2024-12-11 20.52.19.png

Runtime Bindings APIでUI Toolkitの表示をコントロールする。

カウントダウンを行うため、Labelとデータのバインドを行います。
今回はUnity 2023.2で追加されたRuntime Bindings APIを使います。

Runtime Bindings APIの概要はこちらの動画が参考になります。
https://learning.unity3d.jp/10438/

まずはバインドするクラスを作成します。

public class CountdownData
{
    public string text;
}

次にUI Builderからカウントダウンを表示するラベルのTextのAdd Bindingを選択

スクリーンショット 2024-12-11 21.12.45.png

表示されたWindowで

  • Data SourceをTypeに設定
  • Select Typeボタンを押しCountdownDataを選択
  • DataSourcePathでtextを選択

画面収録 2024-12-11 21.09.56-lossy.gif

これでカウントダウンの文字はCountdownData.textを参照するようになります。

バインドする

最後にMonoBehaviourからVisualElementのdataSourceとしてCountdownDataのインスタンスを設定します。

using UnityEngine;
using UnityEngine.UIElements;

public class CountdownBehaviour : MonoBehaviour
{
    public UIDocument uiDocument;
    private CountdownData _countdownData;

    private void Start()
    {
        // CountdownDataの作成
        _countdownData = new CountdownData();

        // VisualElementの取得
        var root = uiDocument.rootVisualElement;

        // VisualElementにCountdownDataをバインド
        root.dataSource = _countdownData;
    }

    private void Update()
    {
        // カウントダウンの計算
        var now = System.DateTime.Now;
        var target = new System.DateTime(now.Year, 12, 24, 0, 0, 0);
        var diff = target - now;
        _countdownData.text = $"{diff.Days}{diff.Hours:00}時間{diff.Minutes:00}{diff.Seconds:00}秒";
    }
}

完成

Unityを実行するとクリスマスまでのカウントが始まります。

画面収録 2024-12-11 19.42.19.gif

12
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?