FC2ブログ
    05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Unityボタンに連打禁止制御を簡単にかけてみる。もっと簡単な方法あるかもしれませんが・・・ 

    こんにちは。坂内っす。
    30度超えの日々が続きますね・・・・
    来週末東京ゲームダンジョンなんですが、コロナが再び猛威を振るい過去最高の感染者を出してますが・・・・
    行こうと思ってたんだけどどうしようかなぁ・・・やめた方がいいかもなぁ・・・どうしようかなぁ

    さて、Unityでゲームを作ってるとボタンって絶対用意しますよね。
    そのボタンって連打制御されてますか?

    たまに連打制御してなくて、バグが出ちゃうとかありますよね。

    そこで、簡単な連打制御についてメモ。

    こんな画面を作ってみた。


    [Blog20220725.cs]

    using System.Collections;
    using DG.Tweening;
    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20220725 : MonoBehaviour
    {
    [SerializeField] Button btnStart;
    [SerializeField] GameObject objImage;


    void Start()
    {
    btnStart.onClick.AddListener(() => StartCoroutine(MakeImage()));
    }

    IEnumerator MakeImage() {
    Image image = Instantiate(objImage, transform, false).GetComponent<Image>();
    image.DOFade(0f, 3f);
    yield return new WaitForSeconds(3f);
    Destroy(image.gameObject);
    }
    }



    ボタンを押すと、Imageのオブジェクトが生成され、3秒かけて透明になり、最後はオブジェクトを削除する。

    ただこれだけの動きをします。


    このままだと連打制御を入れてないので、連打をするとこうなってしまう。



    オブジェクトが押すたびに増えてしまいます。

    連打制御をいれてみましょう。

    といっても、ただフラグで制御するだけですけどね。

    [Blog20220725.cs]

    using System.Collections;
    using DG.Tweening;
    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20220725 : MonoBehaviour
    {
    [SerializeField] Button btnStart;
    [SerializeField] GameObject objImage;

    bool isProc;

    void Start()
    {
    btnStart.onClick.AddListener(() => StartCoroutine(MakeImage()));
    }

    IEnumerator MakeImage() {
    if (isProc) {
    yield break;
    }
    isProc = true;

    Image image = Instantiate(objImage, transform, false).GetComponent<Image>();
    image.DOFade(0f, 3f);
    yield return new WaitForSeconds(3f);
    Destroy(image.gameObject);
    isProc = false;
    }
    }



    これで連打しても処理が終わるまで次の処理が発生しません。



    こんな感じ。

    これくらいの処理での連打なら問題ないかもしれませんが、シーン遷移とかのボタンで連打されるとまずバグりますよね。

    ということで、以外と大事なのに忘れがちな連打制御についてでした。

    もっと簡単にできる方法もあると思いますが、手軽に制御する方法でした。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/906-96005db5
    この記事にトラックバックする(FC2ブログユーザー)