質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

7409閲覧

[Unity]スマートフォン上でソフトウェアキーボードのキーが押されたのを検知したい

Waken

総合スコア37

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

2クリップ

投稿2016/06/21 09:32

編集2016/06/22 10:51

###前提・実現したいこと
Unityを使って、スマホでタイピングゲームのようなものを作りたいと思っています。

###発生している問題・エラーメッセージ
キーが押されたことを検知できません。

###試したこと

keyboard = TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, false, true, true);

として、ソフトウェアキーボードを出し、

Input.GetKeyDown(KeyCode.A)

と、してみたり、

Event.current.Equals(Event.KeyboardEvent("a")

などとしてみましたが、PCではうまくいくものの、スマホではキーが押されたことを検知することができませんでした。スマホ上のソフトウェアキーボードのキーが押されたタイミングはこれではうまく取得できないようです。

スマホ上で取得する方法はありますでしょうか?

ご教授お願い致します。

###補足情報(言語/FW/ツール等のバージョンなど)
Unity version 5.3.5f1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

問題の回答になっているか自信がありませんが、手元のAndroidで確認したところInputFieldコンポーネントのOnValueChangedのイベントならば取得できました。
正確にはソフトウェアキーボードの入力をするとテキストが変更するためOnValueChangedが呼ばれていたようなのですが。

ただInputFieldありきなので、TouchScreenKeyboard.Open()では難しいですね。

イメージ説明

なにかの参考になればと思います。

投稿2016/06/22 22:37

urahimono

総合スコア714

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Waken

2016/06/24 03:02

回答有り難うございます。 お教えいただいた方法を試させて頂きました。 お教えいただいた方法で、さらにInputFieldの表示を非表示にすることでも目的は達成できそうだったのですが、キーボードの表示/非表示のコントロール方法がちょっとよくわからなかったので別のアプローチをすることにしました。
guest

0

自己解決

こんな感じにして解決しました。
TouchScreenKeyboardのインスタンスのtextを監視するような形です。

C#

1 private TouchScreenKeyboard keyboard; 2 private char currChar = ' '; 3 private int prevInputLength = 0; 4 5 void Start() 6 { 7 prevInputLength = 0; 8 TouchScreenKeyboard.hideInput = true;//入力画面は非表示にする 9 keyboard = TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, false, true, true); 10 } 11 12 void Update() 13 { 14 if(TouchScreenKeyboard.visible == false) // "完了"を押されてキーボードが一旦非表示にされたら、再度出す 15 { 16 prevInputLength = 0; 17 keyboard = TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, false, true, true); 18 } 19 20 string text = keyboard.text; 21 if( prevInputLength != text.Length )//長さが変わってたら、何か入力があったということ。 22 { 23 currChar = text[ text.Length - 1 ];//末尾の文字を取得 24 prevInputLength = text.Length; 25 } 26 else //それ以外の時は、とりあえずテキトーな文字を入れておく 27 { 28 currChar = ' '; 29 } 30 31 //押されたキーに応じて処理を分ける 32 if( currChar == 'a' ) 33 { 34 ... 35 } 36 ... 37 38 if( 終わりたい時 ) 39 { 40 keyboard.active = false; 41 } 42 }

投稿2016/06/24 03:12

Waken

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問