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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

458閲覧

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

scb

総合スコア18

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/12/20 05:43

編集2018/12/21 02:24

アイテムが買えるボタンを押したら別のボタンも押せるようになるスクリプトと、そのもう一つのボタンのスクリプト(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;」があること以外他のボタンのスクリプトと全く同じで、それらのボタンはしっかり動作します。

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

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

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

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

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

izmktr

2018/12/20 06:31

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

回答2

0

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

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 09:27

sakura_hana

総合スコア11427

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

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

scb

2018/12/20 10:49 編集

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

2018/12/20 11:27

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

2018/12/21 02:11

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

0

自己解決

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

投稿2018/12/24 07:36

編集2018/12/24 07:44
scb

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問