前提
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

回答3件
あなたの回答
tips
プレビュー