下記の数字ボタンのアルファベットバージョンになります。
使い方などの詳細は、数字ボタンバージョンにて。
robamemo.hatenablog.com
配置
Dectionaryの作成
Global(シングルトン)に作成。
[HideInInspector] public Dictionary<string,int[]> AlphabetButtonDictionary = new Dictionary<string,int[]> { };
スクリプト
using UnityEngine; using System.Collections; using UnityEngine.UI; public class AlphabetButton : MonoBehaviour { [SerializeField][Header ("答え")]string answer; [SerializeField][Header ("ボタン識別番号 0〜")]int btnNumber; [SerializeField][Header ("長押し判定するまでの秒数")]float longPress = 0.5f; [SerializeField][Header ("文字を送る速度")]float speed = 0.2f; [SerializeField][Header ("Dictionary Key")]string keyName; string alphabet = "ABCDEFGIHJKLMNOPQRSTUVWXYZ"; Text[] texts; bool flag = false; float passtime; bool next = false; void Awake () { texts = new Text[3]; for (int i = 0; i < texts.Length; i++) { texts [i] = transform.Find ("mask/Text" + i).GetComponent<Text> (); } passtime = longPress; } void Start () { //Dictionaryに追加 if (!Global.instance.AlphabetButtonDictionary.ContainsKey (keyName)) { int[] array = new int[answer.Length]; for (int i = 0; i < array.Length; i++) { array [i] = 25; } Global.instance.AlphabetButtonDictionary.Add (keyName, array); } int index = Global.instance.AlphabetButtonDictionary [keyName] [btnNumber]; for (int i = 0; i < texts.Length; i++) { texts [i].text = alphabet.Substring (index, 1); index++; if (index == alphabet.Length) { index = 0; } } } void Update () { if (flag) { passtime -= Time.deltaTime; if (passtime <= 0.0) { passtime = speed; SetAlphabet (); } } } public void OnDown (bool nextFlag) { flag = true; next = nextFlag; SetAlphabet (); } public void OnUp () { flag = false; passtime = longPress; next = false; } void SetAlphabet () { if (next) { int index = alphabet.IndexOf (texts [0].text); for (int i = 0; i < texts.Length; i++) { index++; if (index == alphabet.Length) { index = 0; } texts [i].text = alphabet.Substring (index, 1); if (i == 0) { Global.instance.AlphabetButtonDictionary [keyName] [btnNumber] = index; PlayerPrefs.SetInt ("alphabet_input" + btnNumber, index); } } } else { int index = alphabet.IndexOf (texts [2].text); for (int i = texts.Length - 1; i >= 0; i--) { index--; if (index == -1) { index = alphabet.Length - 1; } texts [i].text = alphabet.Substring (index, 1); if (i == 0) { Global.instance.AlphabetButtonDictionary [keyName] [btnNumber] = index; PlayerPrefs.SetInt ("alphabet_input" + btnNumber, index); } } } } public bool OnEnter () { bool ans = false; string str = ""; foreach (int value in Global.instance.AlphabetButtonDictionary[keyName]) { int index = value + 1; if (index == alphabet.Length) { index = 0; } str += alphabet.Substring (index, 1); } if (answer == str) { //正解 ans = true; } return ans; } }
Enterボタンのスクリプト
[SerializeField]AlphabetButton AB; public void OnEnterButton () { if (AB.OnEnter ()) { Debug.Log ("正解"); } else { Debug.Log ("不正解"); } }
Keyを追加
先に作成していたDictionaryにキーを追加する。
このキーが、施錠ごとの識別子になる。
書式は、
{ "キー名", new int[桁数]{ 値は25で、桁数と同じ数をつくる } }
複数使う場合は、カンマで区切る。
[HideInInspector]public Dictionary<string,int[]> AlphabetButtonDictionary = new Dictionary<string,int[]> { { "door_lock",new int[4]{ 25, 25, 25, 25 } }, { "drawer_lock",new int[4]{ 25, 25, 25, 25 } }, };
上の画像のように、Key Nameに作成したキーの名前を入れる。