【Unity】VisualScripting Events unit について 2

はじめに

toshizabeth.hatenablog.com

これの続き
Event Unit についてのまとめ

Animation Events

アニメーションに付けたイベントトリガーを検知します

試しに実装してみます
以下のようにCubeがスケールするアニメーションを作成して

f:id:toshizabeth:20210927123445g:plain

半分の値のところにアニメーショントリガーを仕込みます

f:id:toshizabeth:20210927123532p:plain

インスペクタから TriggerAnimationEvent を選択します f:id:toshizabeth:20210927123603p:plain

今回は以下ようにパラメータを指定

f:id:toshizabeth:20210927145909p:plain

これでグラフ上からアニメーションイベントを参照できるようになりました。
起動したら速攻アニメーションするように以下のようにEntryから直つなげしています

f:id:toshizabeth:20210927145837p:plain

ユニット

アニメーションユニットは二種類あり Events > Animation

  • AnimationEvent
  • Named AnimationEvent

f:id:toshizabeth:20210927145147p:plain

名前を入れる欄があるユニットは、同じ文字列を持つアニメーションイベントのみを受け入れます
まずは名前がいらない方でテストしてみます。

f:id:toshizabeth:20210927150312p:plain

これで起動することでログが表示されます。

f:id:toshizabeth:20210927150327p:plain

イベントが有るたびに起きるようにしているので、アニメーションイベントを2つ配置した場合 f:id:toshizabeth:20210927150422p:plain

2回ログを出す処理が走ります

f:id:toshizabeth:20210927150449p:plain

Named Animation Event

イベントの区別をするために名前指定の Named Animation Event を使用します。

2つ目のアニメーショントリガーのstringに指定した「イベント2」という文字列を入れて

f:id:toshizabeth:20210927150752p:plain

f:id:toshizabeth:20210927150833p:plain

実行すると

f:id:toshizabeth:20210927150858p:plain

「イベント2」という文字列を入力したイベントトリガーのみにこのユニットが反応します
Named Animation Event は入力で文字列を受け取れるようになっているので条件によってフィルター名を変えることもできそうです

Event API

C#スクリプトからカスタムイベントを呼び出します

以下のような Custom Event (名前は TestEvent としてる)をグラフに配置して f:id:toshizabeth:20210927154104p:plain

スクリプト側からトリガーを叩いてみます
適当にスクリプトを作成して上記のグラフがついているGameObjectにアタッチします

using UnityEngine;
using Unity.VisualScripting;

public class CustomEventTriggerTest : MonoBehaviour
{
    void Start()
    {
        // 第一引数はVisualScriptがあるGameObject
        CustomEvent.Trigger(gameObject, "TestEvent", "スクリプトから呼び出した");
    }
}

f:id:toshizabeth:20210927154215p:plain

VisualScriptingのメソッド群は Unity.VisualScripting 内にあります。

実行すると呼び出されます

f:id:toshizabeth:20210927154319p:plain

終わり

今回はアニメーションイベントとスクリプト側のトリガーの紹介をしました
VisualScriptingを見ていくにつれて、完全にVisualScriptingでゲームをつくるというよりスクリプトとのハイブリットで書く使い方が良いように思えます