UnityのDoozy UIでイベントを待ち合わせる方法

Unityでゲームを制作していると、『カメラの遷移が完了してからUIを表示してほしい』、『アニメーションが完了してからUIを表示してほしい』、といったなにかのイベントを待ち合わせてUIを演出したいシーンは結構あると思います。

UnityのDoozy UIでイベントを待つ方法がちょっとわかりにくかったので、解説します。

Contents

ノードの設定

UIノードを使う

もっとも基本的なノードである、UIノードを追加・クリックします。ノードを選択した状態で、インスペクターのOutput Connectionsから、Game Eventを選択し、イベント名を指定します。これで、イベントが発火したときにそのノードにいると、GameEventに指定された出口から次のノードに遷移できます。

Waitノードを使う

Waitノードには、秒やシーンロードを待つ機能があります。これを使ってもイベントを待つ処理が実装できます。Waitノードを追加するには、Nodyエディター上で右クリックから[Create Node] > [System] > [Wait]で追加します。

Waitノードを追加したら、インスペクターからGameEventをセットして、イベント名を指定します。

イベントをトリガーするには

コンポーネントからトリガーする

UIViewやUIButtonにはそれぞれ、GameEventsという専用のフィールドが用意されているので、ここにイベント名を指定します。これで、UIアクションの開始や完了で、イベントを発火することができます。イベント名の打ち間違いだけには注意しましょう。

Game Eventノードを差し込む

ノードに侵入したらイベントを発火してくれるノードが用意されています。[Create Node] > [Game Event]から、このノードを追加できます。ノードを追加したら、インスペクターからイベント名をセットします。 イベント名の打ち間違いだけ注意しorz….略

スクリプトからトリガーする

UIアクション以外からイベントをトリガーしたい場面は結構あります。たとえば、アニメーションの完了を検知してイベントを発火する場合などです。こうした場合はスクリプトからイベントをトリガーする必要があります。以下のようにGameEventMessage.SendEventからイベントをトリガーできます。

////Doozy.Engineが必要
using Doozy.Engine;

public class DoozyEventTrigger : MonoBehaviour
{
    public void HogeEvent()
    {
        /// <summary>
        /// 一つのイベントを発火する
        /// </summary>
        GameEventMessage.SendEvent("HogeEvent");
        
        /// <summary>
        /// 複数のイベントを発火する
        /// </summary>
        GameEventMessage.SendEvents(new List<string>() { "HogeEvent1", "HogeEvent2" });
    }
}

イベントを受け取ったかチェックする

思ったとおりの挙動にならない場合、イベントが受信されているか確認しましょう。Global SettingのDebugより、Game Event Managerをオンにします。これでDoozy UIのイベントマネジャーがイベントを受信するたびに、コンソールにログを吐くようになります。

もしコンソールにログが出るのにUIが思った動きにならない場合は、ほかの部分でミスを犯している可能性があります。

まとめ

DoozyUIでイベントを待つ方法をまとめてみました。DoozyUIを使うと、UI周りの演出がぐっと楽になるので、UIにイマイチ自信がない方は取り入れてみることをおすすめします。

DoozyUIのアセットストアページはこちらから。

返信を残す

メールアドレスが公開されることはありません。