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

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

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

Q&A

解決済

1回答

7338閲覧

Unityで1回目は選択、2回目で決定を行うボタンを作成したい。

po_tato

総合スコア97

0グッド

0クリップ

投稿2018/04/11 02:18

編集2018/04/11 02:20

Unity2dゲームの製作をしているのですが、ステージが複数あるので、
ステージセレクト画面を作成したいと考えております。
ステージセレクト自体の実装は済んでいるのですが、ボタンを押してすぐに遷移ではなくて、
1回目は選択で、2回目で初めて遷移をするという作りにしたいです。
今はこのようなソースなのですが、これだとボタンのカウントがどれを押しても1回付いてしまい、
1度目はボタン1、2度目はボタン2を押した時にボタン2は1回しか押されてないにもかかわらず、
遷移してしまうソースになっています。
1回目に押されたボタンと2回目のボタンが違うとカウントを0にするということをしたいです。

ボタンはインスペクター上で引数を設定することができる仕様にしています。(stageNo)
ステージは4ステージで1~4の引数をそれぞれ設定できます。

ソースも冗長的でめちゃくちゃだと思うのですが、
修正や実装案などお聞かせ願えませんでしょうか?

ステージセレクトは"Unityの教科書 Unity2017完全対応版"を参考にさせて頂いています。

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class StageSelectManager : MonoBehaviour { //ステージ選択ボタン配列 public GameObject[] stageButtons; //2回タップ遷移 int buttonTapCount = 0; bool switch1 = false; bool switch2 = false; bool switch3 = false; bool switch4 = false; // Use this for initialization void Start() { //どのステージまでクリアしているのか int clearStageNo = PlayerPrefs.GetInt("CLEAR", 0); //ステージボタンを有効化 for (int i = 0; i <= stageButtons.GetUpperBound(0); i++) { bool b; if (clearStageNo < i) { //前ステージをクリアしていなければ無効 b = false; } else { //クリアしていれば有効 b = true; } //ボタンの有効/無効を設定 stageButtons[i].GetComponent<Button>().interactable = b; } } // Update is called once per frame void Update() { } public void PushStageSelectButton(int stageNo) { switch (stageNo) { case 1: switch1 = true; switch2 = false; switch3 = false; switch4 = false; break; case 2: switch2 = true; switch1 = false; switch3 = false; switch4 = false; break; case 3: switch3 = true; switch1 = false; switch2 = false; switch4 = false; break; case 4: switch4 = true; switch1 = false; switch2 = false; switch3 = false; break; default: switch1 = false; switch2 = false; switch3 = false; switch4 = false; break; } if (switch1 == true) { //ゲームシーンへ SceneManager.LoadScene("GameScene" + stageNo); buttonTapCount = 0; switch1 = false; switch2 = false; switch3 = false; switch4 = false; } if (switch2 == true) { //ゲームシーンへ SceneManager.LoadScene("GameScene" + stageNo); buttonTapCount = 0; switch1 = false; switch2 = false; switch3 = false; switch4 = false; } if (switch3 == true) { //ゲームシーンへ SceneManager.LoadScene("GameScene" + stageNo); buttonTapCount = 0; switch1 = false; switch2 = false; switch3 = false; switch4 = false; } if (switch4 == true) { //ゲームシーンへ SceneManager.LoadScene("GameScene" + stageNo); buttonTapCount = 0; switch1 = false; switch2 = false; switch3 = false; switch4 = false; } buttonTapCount++; } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

(動作未確認なので、エラーやバグがあったらすいません)

C#

1 // 現在選択されているボタンの番号 2 // -1なら何も選択されていない 3 int selectedButtonNo = -1; 4 5 // …(中略) 6 7 public void PushStageSelectButton(int stageNo) 8 { 9 if (selectedButtonNo != stageNo) 10 { 11 // 既に選択されているボタンではないとき(=1回目) 12 // ボタンの選択 13 selectedButtonNo = stageNo; 14 } 15 else 16 { 17 // 既に選択されているボタンのとき(=2回目) 18 // ゲームシーンへ 19 SceneManager.LoadScene("GameScene" + stageNo); 20 selectedButtonNo = -1; 21 } 22 }

投稿2018/04/11 02:41

fiveHundred

総合スコア9796

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

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

po_tato

2018/04/11 03:29

本当にすごいです。 頭が硬いので柔軟に簡潔なソースでこのような考えが出来るのには尊敬致します。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問