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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理