かつて代官山らへんで働いてたengineerのUnityブログ

サーバサイドやってきたエンジニアがUnityとか触って遊ぶだけのブログ

【Unity】ボタンを押下させる間隔を制限する【連打防止】

ボタン押下時にデータをリストで取得するなどの重めの通信を走らせてたりすると、連打制限したいなって時ありますよね 絶対連打する人いるし....
最低限で簡単な実装ですが、今後も使いまわせそうなので載せておきます
アレンジして使っていきましょう

// ボタン押下許可フラグ
private bool isPushReloadButton = false;

// ボタンが押されてから次にまた押せるまでの時間(秒)
private TimeSpan allowTime = new TimeSpan(0, 0, 3);

// 前回ボタンが押された時点と現在時間との差分を格納
private TimeSpan pastTime;




void Update ()
{
	// 3秒後にボタン押下を許可
	if (isPushReloadButton) {
		pastTime = DateTime.Now - this.reloadTime;
		if(pastTime > allowTime){
			isPushReloadButton = false;
		}
	}
}

//ボタンイベント
public void OnClickButton ()
{
	if ( isPushReloadButton ) return;
	isPushReloadButton = true;
		
	// ここに通信処理などを書く

	//現在の時間をセット
	this.reloadTime = DateTime.Now;
}

もちろんですが、端末の時間を利用して秒をカウントしているので
動作が重い端末だと時間が変わってしまうのかも
そこは要検証ですが、ボタン連打制限ならアバウトでもきっとだいじょうぶでしょ