C# 腳本與Unity Visual Scripting 交互,第一步(使用C# 腳本觸發Script Graph的事件)(Custom Scripting Event)
- 2022 年 9 月 12 日
- 筆記
- c#, Unity, Visual Scripting
寫在前面
感謝Unity 川哥的幫助,解決了單獨調用GameObject的需求
首先 需要在Unity 中創建一個自定義事件腳本(注釋非常重要)
using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; /// <summary> /// UnitTitle 在Script Graph 中展示的名字 /// UnitCategory 在Script Graph 展示的目錄層級 /// EventUnit<int> 泛型 int 是輸出參數的類型 /// </summary> [UnitTitle("TestEvent")] [UnitCategory("Events\\MyEvents")] public class TestEvent : EventUnit<int> { /// <summary> /// 定義參數輸出 /// </summary> [DoNotSerialize] public ValueOutput result { get; private set; }// The Event output data to return when protected override bool register => true; /// <summary> /// 其實 /// </summary> /// <param name="reference"></param> /// <returns></returns> public override EventHook GetHook(GraphReference reference) { // 特別聲明 如果不傳遞 gameObject 則調用時 會調用所有 Script Graph 使用的事件 return new EventHook(nameof(TestEvent),reference.gameObject); } /// <summary> /// 定義函數 展示輸出事件 /// </summary> protected override void Definition() { base.Definition(); // 設置輸出的類型和顯示的名字 result = ValueOutput<int>("output"); } /// <summary> /// 設置參數傳入流中 /// </summary> /// <param name="flow"></param> /// <param name="data"></param> protected override void AssignArguments(Flow flow, int data) { flow.SetValue(result, data); } }
編寫完成後記得保存程式碼,並且在項目設置中點擊刷新一下Visual Scripting的Nodes
還記得在程式碼 寫的目錄和 名稱嗎
- Events\\MyEvents
- TestEvent
成功添加了這個節點 輸出目前是一個int 類型
為了讓大家看的清楚一點 我輸出了
編寫一個觸髮腳本
成功觸發了,這時候我就可以愉快的將 Unity的連連看和自己寫的邏輯聯繫在一起了