概要
脱出ゲームでよく使う、アルファベットを合わせて解錠するやつ。
タップでAから順番に変わり、ZまできたらAに戻る。
でもZまでタップするのは大変なので、長押ししたら早送りみたいに切り替わるようにしたい!
ボタンの配置
ボタンの配置はこんな感じ。
ボタン画像の上に、テキストを被せて配置。
テキストには最初の文字となる”A”を入力しておく。
スクリプト
//メンバ変数 public Text[] alphabet_text; bool down = false; float speed = 0.2f; float passtime; string alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int target; //Down時のメソッド public void AlphabetBtnDown (int i) { target = i; down = true; } //Update void Update () { if (down) { passtime -= Time.deltaTime; if (passtime <= 0.0) { passtime = speed; SetAlphabet (); AudioManager.instance.PlaySE (0);//効果音 } } } //Up時のメソッド public void AlphabetBtnUp () { passtime = speed; down = false; } //タップ時のメソッド public void AlphabetBtnClick () { AudioManager.instance.PlaySE (0); SetAlphabet (); } void SetAlphabet () { int i = alphabets.IndexOf (alphabet_text [target].text); i++; if (i == alphabets.Length) { i = 0; } alphabet_text [target].text = alphabets.Substring (i, 1); Global.instance.drawer_answer [target] = i; Global.instance.OnSave (); } //Enterボタンのメソッド public void AlphabetEnter () { if (alphabet_text [0].text == "R" && alphabet_text [1].text == "O" && alphabet_text [2].text == "B" && alphabet_text [3].text == "A") { //解錠 } else { //間違っていた場合 } }
設定
テキスト配列を作成し、テキストを割り当てる。
各ボタンにDown / Up / Clickを設定する。
Down時のメソッドには引数があるので、ボタンの番号を設定する。(左から0〜)
これは、押されたボタンに該当するテキストを判定するためのint変数になる。
説明
長押しとタップの判定
アルファベットを、clickなら一つずつ、Downなら順番に送り、Upで止まるようにしたい。
順番にアルファベットを表示する処理をUpdate関数で行うことにした。
イベントの感知はUnityのほうでやってくれるのだが、Updateは毎フレーム処理を繰り返すため、長押しなのかタップなのかをUpdate内で判定する必要がある。
単純にフラグで判定してみることにした。
変数downが、そのフラグとなる。
Down時 : down = true;
Up時 : down = false;
変数passtimeは、DownしてからUpdateの処理を実行するまでの秒数になる。
この値を設定するための変数がspeedになる。
サンプルでは0.2fに設定されている。
このタイムラグの間にUpが実行されれば、クリックということになる。
Downイベント発生
↓
down=true
↓
passtimeのカウントダウン開始
↓
0.0以下になったら、passtimeを初期値に戻して、次のアルファベットを表示する
↓
down=trueの間は、再びカウントダウンを開始する。
↓
Upイベント発生
↓
down=false;
passtimeを初期値に戻しておく。