【ハルシオンブログ】Unityボタンに連打禁止制御を簡単にかけてみる。もっと簡単な方法あるかもしれませんが・・・
こんにちは。坂内っす。
30度超えの日々が続きますね・・・・
来週末東京ゲームダンジョンなんですが、コロナが再び猛威を振るい過去最高の感染者を出してますが・・・・
行こうと思ってたんだけどどうしようかなぁ・・・やめた方がいいかもなぁ・・・どうしようかなぁ
さて、Unityでゲームを作ってるとボタンって絶対用意しますよね。
そのボタンって連打制御されてますか?
たまに連打制御してなくて、バグが出ちゃうとかありますよね。
そこで、簡単な連打制御についてメモ。
こんな画面を作ってみた。

[Blog20220725.cs]
ボタンを押すと、Imageのオブジェクトが生成され、3秒かけて透明になり、最後はオブジェクトを削除する。
ただこれだけの動きをします。

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

オブジェクトが押すたびに増えてしまいます。
連打制御をいれてみましょう。
といっても、ただフラグで制御するだけですけどね。
[Blog20220725.cs]
これで連打しても処理が終わるまで次の処理が発生しません。

こんな感じ。
これくらいの処理での連打なら問題ないかもしれませんが、シーン遷移とかのボタンで連打されるとまずバグりますよね。
ということで、以外と大事なのに忘れがちな連打制御についてでした。
もっと簡単にできる方法もあると思いますが、手軽に制御する方法でした。
では、あでゅ~ノシ
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)
« 【ハルシオンシステム】TextMeshProのStyleSheetを使ってみた | 【ハルシオンブログ】Jsonの書き出し読み込みの時の文字コード »
コメント
| h o m e |