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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

3回答

641閲覧

文字入力にて゛や゜がつけられない。

legne

総合スコア3

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2022/12/24 14:00

編集2023/01/11 18:44

前提

unityでハンドトラッキングで入力できるフリックキーボードを作成しています。
13個のキューブを使用して入力、削除などができます。
濁音などをつけるキューブもあります。

実現したいこと

スマートフォンのように入力できるようにしたい。

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

濁音などを付けるキューブに触れても変化がありません。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class gg2 : MonoBehaviour 7{ 8 public Text text; 9 private bool aTriggerFlag = true; 10 private bool TextFlag = true; 11 private bool kTriggerFlag = true; 12 private bool sTriggerFlag = true; 13 private bool tTriggerFlag = true; 14 private bool nTriggerFlag = true; 15 private bool hTriggerFlag = true; 16 private bool mTriggerFlag = true; 17 private bool yTriggerFlag = true; 18 private bool rTriggerFlag = true; 19 private bool wTriggerFlag = true; 20 private bool exTriggerFlag = true; 21 private bool dTriggerFlag = true; 22 Vector3 startTouchPos; 23 Vector3 endTouchPos; 24 Vector3 startWorldPos; 25 Vector3 endWorldPos; 26 float flickValue_x; 27 float flickValue_y; 28 float position_x; 29 float position_y; 30 float seconds; 31 32 void Start() 33 { 34 35 } 36 37 void Update() 38 { 39 /*if (text.text.Length >= 11) 40 { 41 text.text = ""; 42 }*/ 43 44 if (TextFlag == false) 45 { 46 seconds += Time.deltaTime; 47 if (seconds >= 0.75) 48 { 49 seconds = 0; 50 TextFlag = true; 51 } 52 } 53 54 } 55 56 void OnTriggerEnter(Collider other) 57 { 58 //(処理を記述) 59 if (other.gameObject.tag == "Agyou") 60 { 61 if (aTriggerFlag == true) 62 { 63 startTouchPos = GameObject.Find("Sphere").transform.position; 64 Debug.Log("接触"); 65 Debug.Log("接触時" + startTouchPos.x); 66 aTriggerFlag = false; 67 } 68 } 69 70 か~わ行、削除は省略 71 72 73 if (other.gameObject.tag == "dakuon") 74 { 75 if (dTriggerFlag == true) 76 { 77 startTouchPos = GameObject.Find("Sphere").transform.position; 78 Debug.Log("接触"); 79 Debug.Log("接触時" + startTouchPos.x); 80 exTriggerFlag = false; 81 } 82 } 83 84 if (other.gameObject.tag == "delete") 85 { 86 if (exTriggerFlag == true) 87 { 88 startTouchPos = GameObject.Find("Sphere").transform.position; 89 Debug.Log("接触"); 90 Debug.Log("接触時" + startTouchPos.x); 91 exTriggerFlag = false; 92 } 93 } 94 } 95 96 void OnTriggerExit(Collider other) 97 { 98 //(処理を記述) 99 if (other.gameObject.tag == "Agyou") 100 { 101 if (TextFlag == true) 102 { 103 if (aTriggerFlag == false) 104 { 105 Debug.Log("離れた"); 106 aTriggerFlag = true; 107 TextFlag = false; 108 endTouchPos = GameObject.Find("Sphere").transform.position; 109 flickValue_x = endTouchPos.x - startTouchPos.x; 110 flickValue_y = endTouchPos.y - startTouchPos.y; 111 if (flickValue_x - flickValue_y < 0.0f && flickValue_x + flickValue_y < 0.0f && flickValue_x < -0.005f) 112 { 113 text.text = text.text + "い"; 114 } 115 else if (flickValue_x - flickValue_y < 0.0f && flickValue_x + flickValue_y > 0.0f && flickValue_y > 0.005f) 116 { 117 text.text = text.text + "う"; 118 } 119 else if (flickValue_x - flickValue_y > 0.0f && flickValue_x + flickValue_y > 0.0f && flickValue_x > 0.005f) 120 { 121 text.text = text.text + "え"; 122 } 123 else if (flickValue_x - flickValue_y > 0.0f && flickValue_x + flickValue_y < 0.0f && flickValue_y < -0.005f) 124 { 125 text.text = text.text + "お"; 126 } 127 else 128 { 129 text.text = text.text + "あ"; 130 } 131 } 132 } 133 } 134 135か~わ行は省略 136 137 138 if (other.gameObject.tag == "sakujo") 139 { 140 if (TextFlag == true) 141 { 142 if (exTriggerFlag == false) 143 { 144 Debug.Log("離れた"); 145 exTriggerFlag = true; 146 TextFlag = false; 147 text.text = text.text.Remove(text.text.Length - 1); 148 } 149 } 150 } 151 152 if (other.gameObject.tag == "delete") 153 { 154 if (TextFlag == true) 155 { 156 if (exTriggerFlag == false) 157 { 158 Debug.Log("離れた"); 159 exTriggerFlag = true; 160 TextFlag = false; 161 text.text = ""; 162 } 163 } 164 } 165 166 if (other.gameObject.tag == "dakuon") 167 { 168 if (TextFlag == true) 169 { 170 if (dTriggerFlag == false) 171 { 172 Debug.Log("離れた"); 173 dTriggerFlag = true; 174 TextFlag = false; 175 //text.text = text.text.Remove(text.text.Length - 1); 176 177 if (text.text.EndsWith("か")) 178 { 179 text.text = text.text.Remove(text.text.Length - 1) + "が"; 180 } 181 if (text.text.EndsWith("が")) 182 { 183 text.text = text.text.Remove(text.text.Length - 1) + "か"; 184 } 185 他の文字は省略 186 } 187 } 188 } 189 } 190} 191 192

試したこと

複数回触れても大丈夫なように0.75秒は再度入力できないようにしました。
濁音については末尾のひらがなを参照するものがEndsWith以外に考えられなかったため現状手詰まりです。
接触自体は認識できているので文字の認識の部分であると考えられます。

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

二つの質問を一気にしていますがどちらかでも構いません。
もし規約違反でしたら教えていただけると助かります。
unity 2020.3.34f1

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

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

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

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

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

ardin

2022/12/25 23:53

ログも2回分出ていますか?
legne

2022/12/26 00:17

ログも2回出ていたと思います。 座標は2回とも変化して入力される文字が1回目と2回目で変わることもありました。
ardin

2022/12/27 00:06

濁点入力について OnTriggerEnterとOnTriggerEndに入ってきますか? 入ってこない場合、他の入力(削除とデリート)は来ますか? 濁点だけ入ってこないのであればイベントが関連付けられていないか単純にハード的問題。 入ってきている場合、濁点の分岐の中に入れないのでしょうか。 その際のother.gameObject.tagの内容は何になっていますか? もう少しどこまで行けているかを書いてもらえると回答が付きやすくなるかと思います。
ardin

2022/12/27 00:07

ごめん >接触自体は認識できている と書いてありましたね。
guest

回答3

0

自己解決

EnterとExitでTriggrFlagを違うものにしていたためでした。

投稿2023/01/11 09:44

legne

総合スコア3

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

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

0

二度入力されてしまう問題についてはアタッチしているスクリプトの数を減らすことで解消しました。
濁点の方は未解決のため解決法を教えていただけるとありがたいです。

投稿2022/12/26 02:49

legne

総合スコア3

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

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

0

VisualStudioを使ってるなら、任意の行にブレークポイントを設定すれば、その行で実行を止め、変数の中身を確認することができます。
また、そこから1行づつ実行させ、どうコードが実行されるのか、変数の変化がどうなるのかってのを見ることができます。
これをやれば、なんかわからんけど動かない、ってことはなくなりますんでがんばってください。

投稿2022/12/25 00:05

y_waiwai

総合スコア87719

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

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

legne

2022/12/25 08:36

visualstudioをあまり使用していないためちゃんとわかっているわけではありませんが、しっかりデバックしろという意味でよいのでしょうか。 私が作成しているものはハンドトラッキングで触れることで処理が行われるものなのでそちらでできるのでしょうか。 また、処理に関してはDebug.Logで行われていることが確認されているので現在聞きたいのは「どうして最初のみ2回行われるのか、どうしてEndsWithで文字が認識されていないのか」です。 意図が伝わっていませんでしたら申し訳ありません。
Zuishin

2022/12/25 10:27

定型文を回答してスコア稼ぎをしているだけなので、気にしなくていいと思います。
vann_2921

2022/12/26 13:44

>「どうして最初のみ2回行われるのか、どうしてEndsWithで文字が認識されていないのか」 デバッグを行えば最初とそれ以降で何が違うのか、なぜEndsWithで文字が認識されていないのか分かるのではないでしょうか? というかデバッグをそれを調べるためのものです。今後のためにもデバッグのやり方は知っておいて損はないでしょう。 Debug.Logのところにブレークポイントを張れば最初の一回目で止まるはずです。まずはそこから調べてみてはどうですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問