Unity

【Unity】Scroll ViewにTextを追加・書き込み・取得する方法

この記事について

この記事ではScroll Viewの選択肢をスクリプトで制御する方法が学べます。

この記事でわかること

  • Scroll View は Content の下に要素を配置して使う
  • Instantiate で Text を生成し、Content に追加できる
  • text.text = “書き込み内容”; で文字を書き換えられる
  • GetComponent<Text>() で内容を取得可能

Scroll Viewとは?

Scroll Viewについては以下の記事を参考にしてください。

Scroll ViewにTextを追加・取得・書き込み

Scroll Viewの準備

まずはヒエラルキーで右クリックをしてDropdownを1つ用意します。
・「右クリック」→「UI」→「Scroll View」

次にスクリプトを作成して先ほどのScroll View にアタッチしてください。

ContentにTextを追加・書き込み

今回はTextを事前にプレハブ化しておいてそのプレハブをScroll ViewのContentに追加していきます。
※スクリプト作成後、インスペクターで「content」と「textPrefab」をアタッチしておいてください。

using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UIElements;

public class ScrollView_Text : MonoBehaviour
{
    [SerializeField] private GameObject text;
    [SerializeField] private Transform testContent;

    void Start()
    {
        // 新しいTextを生成してContentに配置
        GameObject newTextObj = Instantiate(text, testContent);
        TextMeshProUGUI newText = newTextObj.GetComponent<TextMeshProUGUI>();

      // 書き込み
        newText.text = "New Content";
    }
}

実行してみると、Contentの中にTextが複製されましたね。位置調整を行ったらチャットログができそうですね。

Content内のTextの内容を取得する

Textの中身を確認していきたいときにContent内のTextを取得する必要があります。「GetChild(number)」でTextを取得していきましょう。
※Textをインスペクターで事前にContent内に複製しておきます。

using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UIElements;

public class ScrollView_Text : MonoBehaviour
{
    [SerializeField] private Transform testContent;
    private int i; 

    void Start()
    {
        for (i = 0; i < testContent.childCount; i++)
        {
            Debug.Log(i + ":" + testContent.GetChild(i).GetComponent<TextMeshProUGUI>().text);
        }
    }
}

実行してみると、Scroll ViewのContent内のtextがすべて取得できました。

まとめ

  • Instantiate で Text を生成し、Content に追加できる
  • .text で書き込み、GetComponent<Text>().text で取得できる
  • ScrollRect.verticalNormalizedPosition = 0f; で最新ログへ自動スクロール可能