【Unity】条件を満たしたら1回だけ処理を実行する方法

この記事は約3分で読めます。
今回やること

・5回ボタンが押されたら、1回だけ処理を走らせる

・Updateとかboolとか使わないでスッキリ完結に記述する

・UniRxというアセットを使います

ゲーム画面です

こんなんです。

真ん中にボタンが1個ある、すごくシンプルなゲーム

このボタンを5回押したら処理が1回走ります。(コンソールに”発火”と表示する)

こんなオブジェクトを配置しました

ヒエラルキーで見ていきましょう。

  • CountManagerオブジェクト → CountManagerスクリプトをアタッチしています。
  • Buttonオブジェクト → クリック時に呼ばれるメソッドとしてCountManagerのAddCountをセット(下の画像を参照)
  • Textオブジェクト → テキストに”加算”と書いています。

コードはこんな感じです

UniRxというアセットを使用しています。

Start時に1度設定してあげると、条件を満たす時が来るまで監視してくれます。

条件を満たすと処理が走ります。

(今回の条件は _maxCount == _currentCount という部分になります)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniRx;
using UniRx.Triggers;

public class CountManager : MonoBehaviour
{
    private int _maxCount = 5;
    public int _currentCount = 0;

    void Start()
    {

        this.UpdateAsObservable()  // 1度セットするとUpdate同様に毎フレーム監視
            .First(_ => _maxCount == _currentCount)  // 条件を満たしたら1回だけ処理が走る
            .Subscribe(_ => Debug.Log("発火"))
            .AddTo(this);
    }

    public void AddCount()
    {
        _currentCount++;
    }
}

AddCountメソッドはボタンを押すたびにintに1加算します。

ボタンと連動しています。

ボタンを5回してみました

“発火” と1度だけ表示されました。

成功です。

条件を変更したり、「.Subscribe(_ => ●●)」この●部分を別の処理に変更することで色々なことに応用できそうです。

コメント

タイトルとURLをコピーしました