ソフトウェアキーボード処理

TouchScreenKeyboardクラスを使えばOSがサポートしているソフトウェアキーボードを使うことが出来ます。

// 処理サンプル
class Program
{
    // 状態。
    enum E_STEP
    {
        WAIT,
        INPUT_START,
        INPUT_WAIT,
    };
    private E_STEP m_eStep = E_STEP.WAIT;
 
    void SoftwareKeyboardAction()
    {
        switch (m_eStep)
        {
            case E_STEP.WAIT:
                break;
 
            case E_STEP.INPUT_START:
                SoftwareKeyboard.Start("default string");
                m_eStep = E_STEP.INPUT_WAIT;
                break;
 
            case E_STEP.INPUT_WAIT:
                // ソフトウェアキーボード終了待ち。
                if (!SoftwareKeyboard.IsEnd())
                {
                    return;
                }
 
                // 結果受け取り。
                switch (SoftwareKeyboard.GetResult())
                {
                    case SoftwareKeyboard.E_RESULT.DONE:
                        Debug.Log("DONE !!!! TEXT = " + SoftwareKeyboard.GetText());
                        break;
 
                    case SoftwareKeyboard.E_RESULT.CANCEL:
                        Debug.Log("CANCEL !!!! TEXT = " + SoftwareKeyboard.GetText());
                        break;
                }
                m_eStep = E_STEP.WAIT;
                break;
        };
    }
}
// SoftwareKeyboard.cs
using UnityEngine;
 
public class SoftwareKeyboard
{
    // 入力結果。
    public enum E_RESULT
    {
        NONE = -1,
        DONE,       //!< 入力処理が終了した。
        CANCEL,     //!< 入力処理がキャンセルされた。
    };
 
    private static TouchScreenKeyboard m_touchScreenKeyboard = null;
 
    //-------------------------------------------------------------
    //! ソフトウェアキーボードオープン.
    //-------------------------------------------------------------
    public static void Start(string _initString, TouchScreenKeyboardType _type = TouchScreenKeyboardType.Default)
    {
        // ソフトウェアキーボードをサポートしているか?
        if (!TouchScreenKeyboard.isSupported)
        {
            // サポートしていない。
            return;
        }
 
        // 既に表示されているか?
        if (TouchScreenKeyboard.visible)
        {
        	Debug.Log(false, "Software keyboard already exists.");
            return;
        }
 
        // ソフトウェアキーボードオープン
        m_touchScreenKeyboard = TouchScreenKeyboard.Open(_initString, _type);
    }
 
    //-------------------------------------------------------------
    //! ソフトウェアキーボード終了確認.
    //-------------------------------------------------------------
    public static bool IsEnd()
    {
        if (m_touchScreenKeyboard == null)
        {
            return true;
        };
 
        if (m_touchScreenKeyboard.done || m_touchScreenKeyboard.wasCanceled)
        {
            return true;
        }
        return false;
    }
 
    //-------------------------------------------------------------
    //! 入力結果を返す.
    //-------------------------------------------------------------
    public static E_RESULT GetResult()
    {
        if (m_touchScreenKeyboard == null)
        {
            return E_RESULT.NONE;
        };
 
        // 入力の処理が終了したか
        if (m_touchScreenKeyboard.done)
        {
            Debug.Log("SoftwareKeyboard Done.");
            return E_RESULT.DONE;
        }
        // 入力処理がキャンセルされたかどうか
        else if (m_touchScreenKeyboard.wasCanceled)
        {
            Debug.Log("SoftwareKeyboard wasCanceled.");
            return E_RESULT.CANCEL;
        }
        else
        {
            Debug.Assert(false, "Software keyboard invalid status.");
        }
        return E_RESULT.NONE;
    }
 
    //-------------------------------------------------------------
    //! 入力文字列を返す.
    //-------------------------------------------------------------
    public static string GetText()
    {
        if (m_touchScreenKeyboard == null)
        {
            return string.Empty;
        };
        return m_touchScreenKeyboard.text;
    }
}