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のアセットストアページはこちらから。