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

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

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

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

Q&A

解決済

1回答

467閲覧

UnityでEditor状態のときに、TextMeshProのInputFieldを使ったときに日本語のリアルタイム変換イベントを取得したいです。

kaji

総合スコア648

Unity

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

0グッド

0クリップ

投稿2023/04/23 17:46

編集2023/05/10 12:13

実現したいこと

  • UnityでEditor状態のときに、TextMeshProのInputFieldを使ったときに日本語のリアルタイム変換イベントを取得したいです。

前提

PC用の日本語かなの入力システムのようなものを作ってます。
英語入力時は、問題なくリアルタイム変換を取得できました。
AndroidやiOSでプロジェクト出力時は、日本語入力時に、リアルタイムの変換イベントを取得できましたが、

UnityでEditor状態のときに
日本語入力時に、リアルタイムの変換イベントを取得できませんでした。

Unityのmacで、プロジェクトを出力したときにも、
日本語入力時に、リアルタイムの変換イベントを取得できませんでした。

一旦は、UnityでEditor状態のときに
日本語入力時に、リアルタイムの変換イベントを取得できるようにしたいです。

発生している問題・エラーメッセージ

エラーは特に発生してません。

該当のソースコード

UniRxを使わない場合の変換イベント

using UnityEngine; using TMPro; using System; public class DevInputScene : MonoBehaviour { [SerializeField] TMP_InputField wordInputField; void Start() { // 文字の変更があった時 wordInputField.onValueChanged.AddListener(delegate { Debug.Log("OnValueChanged value=" + wordInputField.text); }); } }

UniRxを使った場合の変換イベント

using UnityEngine; using TMPro; using System; using UniRx; public class DevInputScene : MonoBehaviour { [SerializeField] TMP_InputField wordInputField; // 入力ワードが変更された時 public IObservable<string> wordInputFieldOnValueChangedAsObservable; // Start is called before the first frame update void Start() { wordInputFieldOnValueChangedAsObservable = wordInputField.onValueChanged.AsObservable(); // 入力ワードが変更された時 wordInputFieldOnValueChangedAsObservable.Subscribe(value => { Debug.Log("OnValueChanged value=" + value); }).AddTo(gameObject); } }

挙動

イメージ説明

あいえうおと入力すると、おを入力してエンターを押したときに、すべてのイベントが帰ってくるのですが、
それぞれ、あ、い、う、え、おを入力したタイミングで、イベントが、帰ってきてほしいです。
a,i,u,e,oであれば、それぞれ、入力したタイミングでイベントが帰ってきます。

試したこと

  • UniRxを使わない場合もNGでした。
  • UniRxを使った場合もNGでした。
  • TMP_InputFIeldを、レガシー(UnityEngine.UI)のInputFieldにしても、同じNGな挙動になります。

補足情報(FW/ツールのバージョンなど)

Unity2021.3.4f1のEditorモード

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

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

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

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

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

guest

回答1

0

ベストアンサー

多分IMEがまとめて入力イベントを返してるから起きてる挙動なのでInputfieldじゃなくてInputSystemなどを使って物理的なキーボードイベントそのものを監視するしかないのではと思いましたがどうでしょう

投稿2023/04/30 14:46

UnitySoldier

総合スコア204

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

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

kaji

2023/05/09 03:55

InputSystemでの入力を試してみました。以下のようにするとBというキーを取得することができました。 ``` using UnityEngine.InputSystem; void Update() { if (Keyboard.current[Key.B].wasPressedThisFrame) { Debug.Log("B down"); } } ``` やりたいことの、日本語取得の、イメージはこういう感じなのですが、日本語の物理キーなんてないので、実際は無理でした。 ``` if (Keyboard.current["ば"].wasPressedThisFrame) { Debug.Log("ば、入力"); } ``` 他でプロジェクト出力では使えるのに、PCやEditorでのみ、使えないのは、解せなかったのですが、諦めることにします。 ありがとうございました。
UnitySoldier

2023/05/10 03:13

あー確かによく考えたそういう挙動になっちゃいますよね 多分ちゃんとやろうとしたらIMEのイベントをWindowsAPIから直接参照するネイティブプラグインを組んで監視するしかないかもしれません お力添えできず申し訳ない・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問