Unity(ver:2020.3.12f1)で、ScrollViewを使ってテキストを表示します。

Scroll Viewの作成

プロジェクト「ScrollViewTest」を作成し、メニュー「GameObject」から「UI」→「Scroll View」を選択します。

Hierarchyから「Canvas」以下に配置された「Scrollbar Horizontal」を削除します。

Hierarchyには次のように表示されます。

Scroll Viewの設定

Hierarchyで「Scroll View」を選択し、Inspectorから次のように設定します。

  • Rect Transform
  • 「Width」:200
    「Height」:200
    「Anchor Presets」アイコン(十字シンボル)クリック:center・middle

  • Scroll Rect
  • 「Horizontal」:チェックを外す
    「Horizontal Scrollbar」:「None」

設定した結果を次に示します。

Contentの設定

Hierarchyで「Content」を選択し、Inspectorから次のように設定します。

  • 「Add Component」ボタンをクリックして、次のコンポーネントの追加
  • UI → Text
    Layout → Content Size Fitter

  • Rect Transform
  • 「Text」:「1」~「18」
    「Color」:黒

  • Content Size Fitter
  • 「Vertical Fit」:「Preferred Size」

設定した結果を次に示します。

スクリプトの作成

ログを保存するスクリプトを作成します。ログの最大保存数を「100」とし、超えると古いログから捨てます。

Unityのスクリプトテンプレートを次のように作成します。

作成したスクリプトを次に示します。作成したスクリプト「NewBehaviourScript.cs」は、HierarchyのMainCameraにドラッグ&ドロップします。

  • 47行目でGameObject「Content」のComponent「Text」をアクセスし、48行目でテキストをブランクに設定します。

NewBehaviourScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Text;
using UnityEngine.UI;
using System;


public class NewBehaviourScript : MonoBehaviour
{
    private Text logText;
    private List<string> allLogs;
    private int allLogDataNum = 100;
    private StringBuilder logTextStringBuilder;

    int num = 0;

    // ログテキストの追加
    void AddLogText(string logdata)
    {
        // ログテキストの追加
        allLogs.Add(logdata);
        // ログの最大保存数を超えたら古いログを削除
        if (allLogs.Count > allLogDataNum)
        {
            allLogs.RemoveRange(0, allLogs.Count - allLogDataNum);
        }
        // ログテキストの表示

        logTextStringBuilder.Clear();
        List<string> selectedLogs = new List<string>();
        selectedLogs = allLogs;
        foreach (var log in selectedLogs)
        {
            logTextStringBuilder.Insert(0, log + Environment.NewLine);
        }
        logText.text = logTextStringBuilder.ToString().TrimEnd();
    }

    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("Start!!");
        allLogs = new List<string>();
        logTextStringBuilder = new StringBuilder();

        logText = GameObject.Find("Content").GetComponent<Text>();
        logText.text = "";

        AddLogText("Start!!");
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log("Update!!");
        AddLogText("Update!! : " + num);
        num++;
    }
}

Unityの実行

ゲームをプレーすると書き込んだログが次のように表示され、ConsoleにDebug.Logで出力した文字列が表示されます。