【Unity】VisualScripting Events unit について 1
はじめに
- 画像をクリックしたときに反応する
- ある文字列の通知が投げられたら反応する
- 開始時に一度だけ呼び出される (Start)
- 毎フレーム呼び出される (Update)
などなど
VisualScriptingにはいくつものイベントが存在しており Events unit
と呼ばれるそれらの紹介をしていこうと思います
※ 以下の公式リファレンスを参照します
Events unit | Visual Scripting | 1.7.3
イベントユニットは緑色で表示される
Lifecycle
Events > Lifecycle
グラフにおいて最初に起動される。
ライフサイクルイベントはUnityのMonobehaviourにある Start, Update, OnEnable などを再現している
※ Monobehaviourの挙動と同じなため簡潔に説明します
OnStart
グラフが起動した瞬間に一度だけ呼び出されるユニット
OnUpdate
GameObejctがアクティブな状態の時、毎フレーム呼び出される
OnFixedUpdate
0.02秒ごとに一度呼び出されるUpdate(一秒に50回)
つまり特定の期間に一度呼び出されるUpdate
OnLateUpdate
すべてのUpdate, OnFixedUpdate処理の後に走るUpdate
OnEnable
オブジェクトがアクティブ化されるたびに呼び出される
OnDisable
オブジェクトが非アクティブ化されるたびに呼び出される
OnDestroy
オブジェクトが削除されたときに呼び出される
挙動を確認するには以下のように単純なログ出力を組むとわかりやすいと思います
Inputs & Outputs
- ボタンが押された時
- マウスがクリックされた時
- 通知された時
何らかのトリガーがあった時に開始するユニット群
キーボードで特定の入力があった時
Events > Input > OnKeybordInput
※ マウスの入力も同じ
UGUIのボタンが押された時
画面上に配置したボタンが押された時に反応するようにします
Events > GUI > Button Click
ボタンに Script Machine を取り付けている場合は Button Click ユニットそのままでいいですが
ボタンと違うオブジェクトのScriptMachineが押されたことを検知したい場合は、ボタンを参照するために SceneVariables に登録をします
※ Type は GameObjectでもButtonでも大丈夫です
これでScene全体からこのUGUIボタンが参照できるようになったので
以下画像のように Get Variables
で TestButtonを参照し OnButtonClick
ユニットと結びつけます
UGUI内部にはその他UI変化があった時にトリガーされるユニットが用意されているので見ておくと良さげです
Custom Events
個人的にイベントの中で最も重要だと思うのがCustomEvents
(よく使いそうなため)
あるグラフから別のグラフに対して
「プレイヤーがダメージを受けた」
「スキルを使用した」
などのユーザーがカスタムした通知を送りたい時に使用できる
ユニットの説明
Trigger Custom Event
→ イベントを送るユニット
Custom Event
→ イベントを受け取るユニット
Trigger Custom Event ユニットで特定の名前のイベントを通知して、Custom Event ユニットで名前を指定したイベントを受け取る。
今回はボタンにScriptMachineを付けて、
- ボタンが押された時に"TestButtonClick"というCustomEventを投げる。
- この時 "文字列" と "数値" をセットに送る
- 別のScriptMachineで "TestButtonClick" イベントを受け取って 文字列と数値 をログに出す
処理をしてみようと思います
まず、UGUIのボタンにScriptMachineを付けて中で OnButtonClick
と Trigger Custom Event
を結びつけます
今回は Button コンポーネントに ScriptMachine を付けたので Get Variable する必要はありません。
イベント名は "TestButtonClick" とします
文字列と数値を送るために、Trigger Custom Event
ユニットの Arguments を 2 に変更し
string と integer ユニットを配置して結びつけます (Arg0, Arg1)
これでボタンが押された時にイベントが投げられるようになりました
Trigger Custom Event
にはイベントを受け取る側のオブジェクトを付けることができます
今回は別のScriptMachineにイベントを送りたいため、対象のオブジェクトを Scene に登録して
Get Variable ユニットでつなげます
次にイベントを受け取る方を実装します
イベントを受け取るGameObjectにScriptMachineを付けて以下画像のように組み立てます
Custom Event で TestButtonClick 名のイベントを受け取るようにして
Arg0, 1 を String.Concat
ユニットで連結したものをログで出力します
結果
ボタン押した時にイベントの送受信が確認できます