日本語は、まず平仮名を入力して、それを漢字混じりに変換して確定させることで入力するのが普通だと思う

この変換する前の未確定文字列をどうやってUnityで入力させるかと考えあぐねた

その結果、文字に対応するローマ字をキーボードで入力する動作をシミュレートすることによって入力を強引に実現させた 


具体的にいうと、

まず、
http://wiki.unity3d.com/index.php/ToggleCapsLock
のように、keybd_event関数を用いるとC#ひいてはUnityからキーストロークを生成できる

そうして、
Joystickの入力から整数(bool[]→int)、
平仮名の単語( int→Dictionary<int,string>→string )、
ローマ字群( string→string.ToCharArray()→char[], char→Dictionary<char,string[]>→string[] )、
キーストロークの実行( (byte)string→keybd_event→void(byte) )、
と変換を経ることで文字を入力できるようになった
(ただし、int→stringで得たstringが{変換}のときは、その段階で直接変換キーを押すvoidを行う)

このvoidで、上の記事のスクリプトをそのまま用いると変換キーが二度押されるなどの不具合が生じていたが、

using UnityEngine;
using System.Runtime.InteropServices;

class hoge{
    [DllImport("user32.dll", EntryPoint = "keybd_event")]
        private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
 
    public void huga(byte n) { //n stands for keycode of keyboard
        if(!Input.GetKeyDown(n)) {
            keybd_event(n, 0x45, (uint)1|0x2 0); 
            keybd_event(n, 0x45, (uint)1|0x0, 0);
        } 
    }
}

のように、上記事のifステートメントの評価式を丸々!Input.GetKeyDownに置き換えると、うまく一回だけ押されるようになった



今後は、Shiftキーの入力に、押される間だけOn、離れたらOff、という形で対応していきたい

アサインするとしたらDAOコンのSTART・SELECTボタンあたりかなあ



また、GameObjectの名前を変更するときに、スクリプトでGameObejct.Find("name")とてオブジェクトを判別している現状では、そちらも変更せざるを得ず、かなり厄介
なので、ゲーム開始時に一つのGameObjectが他の全てのを生成して、それぞれにスクリプトやコンポーネントを付与するようなことができたらいいな、と考えてる