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

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

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

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

2081閲覧

Btttonを押した後5秒間UIのスライダーの減少量を2倍にしたい

yuukuriuttto

総合スコア24

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2018/06/11 08:33

編集2018/06/11 08:55

前提・実現したいこと

Unityで3Dのゲームを制作しているのですが、Buttonを押した後5秒間スライダーの減る量を2倍する、といったものを実装したいのですが思うように動きません

発生している問題・エラーメッセージ

個人的にButtonを押した後、UIのスライダーの減少量を増やす処理は書けたつもりなのですが減る量は変わりませんでした  正しいやり方やよい方法などがあれば教えていただきたいです

該当のソースコード

C#

1using UnityEngine; 2using System.Collections; 3using UnityEngine.UI; 4 5public class ActionButton : MonoBehaviour 6{ 7 public float _mb; 8 public GameObject NotFixed; 9 public GameObject DestroyButton; 10 public GameObject GatheringButton; 11 //public GameObject Coniferous; 12 public GameObject Branches; 13 14 15 private float waitTime = 5.0f; 16 Slider _slider; 17 18 void Start() 19 { 20 // スライダーを取得する 21 _slider = GameObject.Find("MoistureSlider").GetComponent<Slider>(); 22 } 23 24 void Update() 25 { 26 27 } 28 29 30  //クリック後5~0秒後まで減らす量を二倍にする 31 public void OnClick() 32 { 33 waitTime -= Time.deltaTime; 34 StartCoroutine("ExecutionTime"); 35 36 if(waitTime <= 0) 37 { 38 Debug.Log("start"); 39 _mb -= Time.deltaTime * 2.0f; 40 _slider.value = _mb; 41 } 42 43 if(waitTime == 0) 44 { 45 Debug.Log("end"); 46 _mb -= Time.deltaTime * 1.0f; 47 _slider.value = _mb; 48 } 49 50 51 } 52 53 IEnumerator ExecutionTime() 54 { 55 56    //5秒後に木を削除 57 yield return new WaitForSeconds(5.0f); 58 59 //Debug.Log("ok"); 60 61 //GameObject.Find("DestroyButton").GetComponent<UnityEngine.UI.Image>().enabled = false; 62 gameObject.SetActive(false); 63 } 64}

試したこと

これで実装できるであろうと思う処理は書けたと思うが思うように動きません

補足情報(FW/ツールのバージョンなど)

Unity 2018.1.0f2

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、定義されているOnClick()がButtonのonClickに紐づけられているか確認してください。その上でコードに修正が必要です。

いまいち質問者さんの目指している動作が汲み取れないので、少々憶測を混ぜての回答になりますが、

・Sliderの値は毎フレーム減少する
・ボタンを押すと5秒間Sliderが2倍の速度で減少する

という前提として回答します。
まず、OnClickはボタンを押された1回しか作動しません。ですので減少処理はUpdate()内に書きます。
次に、5秒間のタイマー計測と、減少処理を連動させる必要があります。このためには、「ボタンを押した時にコルーチンを開始し、2倍の減少期間の開始を示すフラグを立てる」「5秒間待機する」「フラグを外す」とします。そしてUpdate内ではフラグの状態に応じた減少処理を行います。
以上を踏まえたコードは以下の通りです。

csharp

1using UnityEngine; 2using System.Collections; 3using UnityEngine.UI; 4 5public class ActionButton : MonoBehaviour 6{ 7 public float _mb; 8 public GameObject NotFixed; 9 public GameObject DestroyButton; 10 public GameObject GatheringButton; 11 //public GameObject Coniferous; 12 public GameObject Branches; 13 14//2倍減少中かのフラグ 15 private bool boost = false; 16//標準の減少量 17 private float decreaseSpeed = 0.1f; 18 19 //private float waitTime = 5.0f; 20 Slider _slider; 21 22 void Start() 23 { 24 // スライダーを取得する 25 _slider = GameObject.Find("MoistureSlider").GetComponent<Slider>(); 26 } 27 28 void Update() 29 { 30 if(boost) 31 { 32 _slider.value -= Time.deltaTime * decreaseSpeed * 2.0f; 33 } 34 else 35 { 36 _slider.value -= Time.deltaTime * decreaseSpeed; 37 } 38 } 39 40 public void OnClick() 41 { 42 43 StartCoroutine("ExecutionTime"); 44 45 } 46 47 IEnumerator ExecutionTime() 48 { 49 boost = true; 50    //5秒後に削除 51 yield return new WaitForSeconds(5.0f); 52 boost = false; 53 //Debug.Log("ok"); 54 55 //GameObject.Find("DestroyButton").GetComponent<UnityEngine.UI.Image>().enabled = false; 56 //gameObject.SetActive(false); 57 } 58}

投稿2018/06/11 09:06

ruccho

総合スコア285

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問