Unity Visual Scripting 使用隨記


1.Wait Until並不會再執行前面的代碼,而是反復執行獲取bool變量的代碼;需自己拆出來寫。

2.yield return null對應Wait For Next Frame,多用這個避免協程運行中的GC

3.鏈接自定義方法在Project Settings->Visual Scripting的Type Options里,每次修改過點擊Regenerate Units更新。

4.按住Ctrl+鼠標拖拽,可以放置Group框起來。

5.記得創建外部的SuperUnit(SubGraph)而不是用內嵌的,否則每復制一個都相當於一組新的節點。

6.C#端外部傳消息可用CustomEvent.Trigger,接收在事件里找CustomEvent即可。

7.關於狀態機Transition的用法,實際上需要綁一個事件一直監聽:

也可以加一個CustomEvent,通過事件觸發決定跳轉

8.ScriptGraph里協程的句柄不好控制,即使用StopAllCoroutine也不行,感覺開的是全局協程執行的。

重點來了——用StateGraph狀態機;狀態切狀態,協程才可以中斷。AnyState切狀態,是新開的全局協程!

9.StateGraph狀態機的AnyState不支持放在SuperState嵌套狀態里,必須放在根狀態節點,但可以由根節點的AnyState觸發然后傳入到嵌套狀態里。

10.Update、LateUpdate這類事件可以以協程形式執行,但實際上是每一幀開一個新協程。

11.Not boolean節點在VirtualScripting里叫做Negate。

12.用引腳直接前后連接的協程循環會有棧溢出問題,而用While Loop節點組合的協程循環則不會。

13.等待一定秒數之類的異步邏輯可以用Timer節點。

14.自定義Unit中獲得宿主GameObject:

public class Foobar : Unit
{
    protected override void Definition()
    {
        ValueOutput<int>("hello", (flow) =>
        {
            var go = (flow.stack.rootObject as MonoBehaviour).gameObject;
            Debug.Log(go, go);
            return 1;
        });
    }
}

15.非繼承MonoBehaviour或者UnityEngine.Object的類兼容性不好,體現在運行后聲明的變量就沒了,需要自己做一些操作。

16.異步Unit節點模板,目前未發現bug:

public class AsyncNodeTest : WaitUnit
{
    protected override void Definition()
    {
        base.Definition();
    }

    protected override IEnumerator Await(Flow flow)
    {
        yield return new WaitForSeconds(1f);
        yield return exit;
    }
}

 

 

 

官方論壇頁:https://forum.unity.com/forums/visual-scripting.537/

文檔頁:https://docs.unity3d.com/bolt/1.4/manual/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM