(资料图)
我其实1年前就开始尝试Visual Scripting了,首先说说我为什么要用它。
其实原因不复杂,你一旦接触了可视化编程,其开发潜力就会让你不能自拔,然而我其实首先接触的是行为树,以前没有接触过AI方面,后来自己简单够用的状态机折腾,到摸不清头脑的状态各种bug,决定想办法让状态机可视化,由于一直崇拜行为树,所以就决定转向行为树,一旦接触到这种可视化操作,就觉得这才是编程的未来。为什么呢?如果你有足够的开发经验,你就会知道,编码永远不是最难的环节,最难的其实是调试(Debug)。很多喜欢吹牛皮的程序员,就天天说一周完成一个游戏云云,实际上是:一周可展示,上线现原形。回炉又重造,又等大半年。偏偏很多老板就信这一套,这种老板趁早远离。扯远了。
可视化可视化,问题都看得见了自然修起来比去黑箱里面打断点打日志方便得多,为此我立马开始去了解,生怕错过最新的技术,然而现实再一次告诉我,没有10年以上的技术,不要碰,尤其是免费的!你只会浪费更多的时间。收费的东西好歹可能会根据用户的反馈不断改进。
首先的问题是,没有搜索。当你的事件满天飞的时候,你很难找到它。也不是没有办法,那就是自己手动记录一下每个事件的位置。有些人可能觉得这是你自己的问题,代码(图形)没管理好,管理好的一目了然。可是我想说的是,作为一个工具,成熟完备最重要,否则你写代码为什么要找好友的IDE而不是用系统自带文本编辑工具。用过everything的同学肯定知道搜索能带来多大的便利和效率,它可以直接改变文件管理方式。
再来是界面不完善。比如没有折叠功能,不能把大片代码折叠起来,除了不停缩小放大去找没有什么好方法。除了这个还有很恶心的就是状态机的条件节点不能复制粘贴,我真的挺无语的,你只能进入节点里面去复制所有节点再到目标节点里面去粘贴。其实实际还有很多操作不便的细节不一一举例。
和C#沟通很费劲。虽然调用C#较为简单,但是反过来就抓狂了,为此我还专门包装一下,以便可以从C#发送事件到UVS。如果用过xLua的应该都知道,xLua之所以好用就在于便利,不需要执行包装过程就可以通过反射直接执行C#代码,这方面UVS就是很原始的存在,它只能直接去调用MonoBehavior的对象方法,如果你的类不是MonoBehavior就需要添加到列表再执行一次生成包装才能用。你可能会说,那你全部用UVS写不就好了。那就要引出下一个问题。
代码功能不完备。首先是执行效率,且不说在UVS中for循环有多难,每次我都想转到C#里面写。其实最要命的是没有函数指针或者同类功能的东西。要知道程序里面很多常用的东西都是靠它,比如Sort,Select,Where,First,实际上C#靠这些函数大大减少了需要做for循环的情况,简洁美观,Python虽然通过语法让for看起来更加简洁,但是实际上可读性很差,而且排序还是需要函数指针。而UVS不能给C#传递函数指针,自己的数据结构也不完备,操作列表的时候简直抓狂。顺便就是列表中的元素不会折叠显示而是全部展示,当你的元素很多的时候你点进去看简直哭笑不得。还有遇到错误的时候不告诉你哪个gameobject,得一个一个找。这来回一抵消,开发变得没有效率了。
最后,更新缓慢看不到未来。如果说每年都有一个新版本好歹学了以后可能还不亏,说不定以后问题都解决了,问题就是自2021版本后就再无更新,感觉像是官方是要放弃了的样子。我还专门为了用最新版本更新到2021,版本绑定也是一个问题。就算没有根本解决问题,好歹一年一版才有诚意吧。
其实UVS这玩意本身就是个冷门技术,有的地方有用确实有帮助,比如当作可视化的状态机就不错,但是想要通过它绕过编程,看起来像个捷径,最后却走到沟里,想找人帮忙发现没几个人真的了解。关键是不要浪费时间,时间太宝贵了,想想那些AS3程序员,Flash死亡后他们只能改学别的东西,之前所精通的技术付之东流。可行的技术必须经受时间的考验。某些UP也不要为了流量去宣传自己都不会用在实际项目上的东西(纯UVS开发)。
关键词: