MRが楽しい

MRやVRについて学習したことを書き残す

TextMeshProのInputFieldの入力が完了したときに処理を実行する

本日は TextMeshPro の小ネタ枠です。
TextMeshPro の InputField に入力があったときに処理を実行する方法を記事にします。

OnEndEdit

OnEndEdit は InputField の文字列入力が完了したときに実行されるイベントです。
本イベントを利用することでユーザが文字列の入力を終えたときに実行する処理を設定できます。
docs.unity3d.com

srcInputField.onEndEdit.AddListener(text => 
{
    // ユーザの文字列の入力が完了したときの処理
});

サンプルスクリプト

以下のコピー元の InputField が更新されると、自動でコピー先の InputField に同じ文字列を入力するサンプルスクリプトを作成しました。
・TextCopyEndEdit.cs

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class TextCopyEndEdit : MonoBehaviour
{
    /// <summary>
    /// コピー元テキスト
    /// </summary>
    [Header("コピー元テキスト"), SerializeField]
    private TMP_InputField srcInputField;
    
    /// <summary>
    /// コピー先テキスト
    /// </summary>
    [Header("コピー先テキスト"), SerializeField]
    private TMP_InputField destInputField;

    private void Start()
    {
        // コピー元テキストが入力完了したときに同期する
        srcInputField.onEndEdit.AddListener(text => destInputField.text = text);
    }
}

2つの InputField があるサンプルシーンを作りました。
それぞれ上側をコピー元、下側をコピー先として参照を設定します。

シーンを再生して確認します。
上側の InputField の入力中には更新が実行されず、入力を完了(Enter)したタイミングで下側の InputField に同じ文字列が入力されるようになりました。