MRが楽しい

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

UnityのInspectorビューのフィールド入力をエンターキーを入力したタイミングで確定させる

本日はUnityの小ネタ枠です。
UnityのInspectorビューのフィールド入力をエンターキーを入力したタイミングで確定させる方法です。

DelayedAttribute

DelayedAttributeを指定すると、float/int/string型のフィールドはエンターキーを押したとき、またはフィールドからフォーカスが離れた時に値が確定します。
docs.unity3d.com

OnValidate

OnValidate()関数はInspectorの値が変更されたタイミングで呼び出されます。
これを使ってDelayedAttributeを指定した場合と指定していない場合のフィールドの反映タイミングを確認してみます。
docs.unity3d.com

サンプルスクリプト

Delayed属性を付けたstringフィールドと付けていないフィールドを比較する以下のサンプルスクリプトを作成しました。
・DelayedTest.cs

using UnityEngine;

public class DelayedTest : MonoBehaviour
{
    [SerializeField]
    private string normalField = string.Empty;

    [SerializeField, Delayed]
    private string delayedField = string.Empty;

    void OnValidate()
    {
        Debug.Log($"normalField: {normalField}, delayedField: {delayedField}");
    }
}


Delayed属性を付けていないフィールド

abcdfという文字を入力する際、以下の通り一文字の入力ごとに値の更新が発生します。

Delayed属性を付けたフィールド

abcdfという文字を入力する際、以下の通りエンターキーで入力を確定したタイミングでのみ値の更新が発生します。