メモ帳

備忘録

Unity 5.2のInputFieldでカーソル(キャレット)が表示されない場合の対策

問題点

Unity 5.2のInputFieldにはカーソルが表示されないというバグがある。

This was confirmed a bug in Unity 5.2 and will likely be fixed in the next patch (and main) version.

See this forum thread for a script that works as a possible (dirty) workaround in the meantime. You can place it on your Input Field objects (or on any object, as long as you then drag the InputField reference there).

http://answers.unity3d.com/questions/1063644/unity-52-inputfield-missing-caret.html

上の「this forum thread」のリンク先のスレッドに、Unity Technologiesの人によってバグが修正されるまでの一時的な対策が投稿されていたので、ここにも載せておく。

対策

以下の様な内容で、SetInputFieldTextureという名前のスクリプトを作成し、カーソルを表示させたいInputFieldにアタッチする。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class SetInputFieldTexture : UIBehaviour
{

    public InputField inputField = null;

    IEnumerator Start()
    {
        // wait a frame such that the caret GO gets created.

        yield return null;
        if (inputField == null)
            inputField = GetComponent<InputField>();

        if (inputField != null)
        {
            // Find the child by name. This usually isnt good but is the easiest way for the time being.
            Transform caretGO = inputField.transform.FindChild(inputField.transform.name + " Input Caret");
            caretGO.GetComponent<CanvasRenderer>().SetMaterial(Graphic.defaultGraphicMaterial, Texture2D.whiteTexture);
        }
    }
}