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

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

ただいまの
回答率

89.63%

スクリプトが正常に動くときと動かないときがある

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 535

scb

score 12

アイテムが買えるボタンを押したら別のボタンも押せるようになるスクリプトと、そのもう一つのボタンのスクリプト(mpを使う)を書きました。しかし、前者のInteractableと、後者のInteractableがスクリプト通りに動作するときとしないときがありmpが足りないのにtrueになったり足りててもfalseになったりします。何故このように運ゲーのようになっているのでしょう?

別のボタンが押せるようになるボタン

Button btn;
public Button mpbtn;
public Coin(スクリプト) coin;

public bool 押した後(int value)
    {
        if (value <= coin.Money)
        {
            mpbtn.interactable = true;
            return true;
        }

        else
        {
            btn.interactable = false;
            return false;
        }

    }

 public void ButtonClick(BaseEventData data)
    {
        押した後(500);
    }

mpを使うボタン

   Button btn;
   public MagicPoint(スクリプト) mp;

       void Start()
    {
        btn = this.GetComponent<Button>();
        btn.interactable = false;
    }


        public bool Boolbtn(int mpvalue)
    {
        if (mpvalue < mp.MP)
        {
            btn.interactable = true;
            return true;
        }

        else
        {
            btn.interactable = false;
            return false;
        }


    }

   void Update()
    {
        Boolbtn(2);
    }

public void ButtonClick(BaseEventData data)
    {
        mp.Pay(3);
    }

・mpが0~2のときはボタンが押せなくなり、3以上のときは押せる
・3mpの対価は一回だけ貰える(まだ途中ですが一回押したボタンはfalseにする予定です)

mpボタンのスクリプトはvoid start内の「btn.interactable = false;」があること以外他のボタンのスクリプトと全く同じで、それらのボタンはしっかり動作します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • izmktr

    2018/12/20 15:31

    ・mpが2未満になると、ボタンが押せなくなるが、ボタンを押したときに消費するmpは3?
    ・mpが一度枯渇すると、回復してもボタンが押せるようにするためには再度購入が必要?
    この辺がおかしそうだけど、ちゃんとした仕様を文章に書き起こせますか?

    キャンセル

回答 2

+1

以下のような挙動になっているかと思います。

mpが足りててもボタンがオフになる

「別のボタンが押せるようになるボタン」のButtonClickが呼ばれた時、value <= coin.Moneyfalseなら(mpに関係無く)MPボタンがオフになる。
これ以外にMPボタンをオンにするところが無いので、MPではなくcoin.Moneyの量でボタンのオンオフが決まってしまう。
→この仕様で合ってますか?

mpが足りなくてもボタンがオンになる

上記と同じく、value <= coin.Moneytrueの時に(mpに関係無く)MPボタンがオンになる。
が、直後の「mpを使うボタン」のUpdateで分岐が入る。(=coin.Moneyの量による条件分岐が無意味になっていますが、この仕様で合ってますか?)

public bool Boolbtn(int mpvalue)内、
if (mpvalue <= mp.MP)は「mp.MPがmpvalue以上ならtrue」なので、MPが2の時はtrueになる。
本来MPが2の時は押せなくする必要があるので、if (mpvalue < mp.MP)が正しい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/20 19:41 編集

    value <= coin.Moneyのelseのところは、mpbtn.intractableとbtn.interactebleを間違えていました。すみません。本当は、elseのときbtnがfalseになります。

    キャンセル

  • 2018/12/20 20:27

    btnとmpbtnに入っているボタンがおかしいということはありませんか?
    また、「mpを使うボタン」内の「public bool Boolbtn(int mpvalue)」の「if (mpvalue < mp.MP)」内に「btn.interactable = true;」がありませんが、これは想定通りですか?

    キャンセル

  • 2018/12/21 11:11

    mpvalue < mp.MPにintaractable=trueが無いのはついうっかりしてて想定通りではなかったです…。助かりました。btnとmpbtnは大丈夫でした。

    キャンセル

check解決した方法

0

「mpを使うボタン」がスクロールビューの中に入っていたので、それで挙動が重くなっていたようです。スクロールビューの代わりにウインドウを表示し、そのページをめくってオブジェクトを全て表示することで必ずtrueになるようになりました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる