/// <summary> /// ジェスチャーに対応するAudioClipを取得する /// </summary> /// <param name="args"></param> /// <returns></returns> private AudioClip GetAudioClipOrNull(UDRLGestureDetector.GestureEventArgs args) { Func <AudioClip> clipFunc; return(AudioClipDic.TryGetValue(args.Direction, out clipFunc) ? clipFunc() : null); }
void GestureDetected(object sender, UDRLGestureDetector.GestureEventArgs args) { // ジェスチャー中:現在選択中の入力を表示する if (args.Type == UDRLGestureDetector.GestureEventType.DETECTING) { KeyCode keyCode = GetKeyCode(args); // 選択中の表示を更新 if (!IsValidInput(this.ipText, keyCode)) { IpText.text = PROMPT + this.ipText + "[]"; } else { if (keyCode == KeyCode.Delete) { IpText.text = PROMPT + this.ipText + "[DEL]"; } else { IpText.text = PROMPT + this.ipText + "[" + (char)keyCode + "]"; } } // TODO: 現在認識しているジェスチャーを視覚的に表示する // ジェスチャーが認識されたタイミングを、効果音で通知する AudioClip clip = GetAudioClipOrNull(args); if (clip != null) { AudioSource.PlayClipAtPoint(clip, this.transform.position, 0.8f); } } // ジェスチャー確定:入力を確定する else if (args.Type == UDRLGestureDetector.GestureEventType.DETECTED) { KeyCode keyCode = GetKeyCode(args); if (!IsValidInput(this.ipText, keyCode)) { IpText.text = PROMPT + this.ipText; return; } // 削除処理 if (keyCode == KeyCode.Delete) { // 直前の文字が.の場合2文字消す if (this.ipText.EndsWith(".") && this.ipText.Length > 1) { this.ipText = this.ipText.Remove(this.ipText.Length - 2); } // 通常は1文字 else if (this.ipText.Length > 0) { this.ipText = this.ipText.Remove(this.ipText.Length - 1); } } else if (keyCode == KeyCode.Period) { var blocks = this.ipText.Split('.'); if (blocks.Length == 4) { // IP 入力完了 this.InputCompleted(); } else { this.ipText += '.'; } } // 文字入力 else { this.ipText += (char)keyCode; var blocks = this.ipText.Split('.'); var editingBlock = blocks.LastOrDefault() ?? string.Empty; // . を自動保管 if (editingBlock.Length == 3) { if (blocks.Length != 4) { this.ipText += "."; } else { this.InputCompleted(); } } } IpText.text = PROMPT + this.ipText; } }
/// <summary> /// ジェスチャーに対応するKeyCodeを取得する /// 対応するものがなければKeyCode.None /// </summary> /// <param name="args"></param> /// <returns></returns> private static KeyCode GetKeyCode(UDRLGestureDetector.GestureEventArgs args) { KeyCode value; return(GesturePatternDic.TryGetValue(args.Pattern, out value) ? value : KeyCode.None); }