(資料圖)
我其實1年前就開始嘗試Visual Scripting了,首先說說我為什么要用它。
其實原因不復(fù)雜,你一旦接觸了可視化編程,其開發(fā)潛力就會讓你不能自拔,然而我其實首先接觸的是行為樹,以前沒有接觸過AI方面,后來自己簡單夠用的狀態(tài)機折騰,到摸不清頭腦的狀態(tài)各種bug,決定想辦法讓狀態(tài)機可視化,由于一直崇拜行為樹,所以就決定轉(zhuǎn)向行為樹,一旦接觸到這種可視化操作,就覺得這才是編程的未來。為什么呢?如果你有足夠的開發(fā)經(jīng)驗,你就會知道,編碼永遠不是最難的環(huán)節(jié),最難的其實是調(diào)試(Debug)。很多喜歡吹牛皮的程序員,就天天說一周完成一個游戲云云,實際上是:一周可展示,上線現(xiàn)原形。回爐又重造,又等大半年。偏偏很多老板就信這一套,這種老板趁早遠離。扯遠了。
可視化可視化,問題都看得見了自然修起來比去黑箱里面打斷點打日志方便得多,為此我立馬開始去了解,生怕錯過最新的技術(shù),然而現(xiàn)實再一次告訴我,沒有10年以上的技術(shù),不要碰,尤其是免費的!你只會浪費更多的時間。收費的東西好歹可能會根據(jù)用戶的反饋不斷改進。
首先的問題是,沒有搜索。當你的事件滿天飛的時候,你很難找到它。也不是沒有辦法,那就是自己手動記錄一下每個事件的位置。有些人可能覺得這是你自己的問題,代碼(圖形)沒管理好,管理好的一目了然??墒俏蚁胝f的是,作為一個工具,成熟完備最重要,否則你寫代碼為什么要找好友的IDE而不是用系統(tǒng)自帶文本編輯工具。用過everything的同學(xué)肯定知道搜索能帶來多大的便利和效率,它可以直接改變文件管理方式。
再來是界面不完善。比如沒有折疊功能,不能把大片代碼折疊起來,除了不??s小放大去找沒有什么好方法。除了這個還有很惡心的就是狀態(tài)機的條件節(jié)點不能復(fù)制粘貼,我真的挺無語的,你只能進入節(jié)點里面去復(fù)制所有節(jié)點再到目標節(jié)點里面去粘貼。其實實際還有很多操作不便的細節(jié)不一一舉例。
和C#溝通很費勁。雖然調(diào)用C#較為簡單,但是反過來就抓狂了,為此我還專門包裝一下,以便可以從C#發(fā)送事件到UVS。如果用過xLua的應(yīng)該都知道,xLua之所以好用就在于便利,不需要執(zhí)行包裝過程就可以通過反射直接執(zhí)行C#代碼,這方面UVS就是很原始的存在,它只能直接去調(diào)用MonoBehavior的對象方法,如果你的類不是MonoBehavior就需要添加到列表再執(zhí)行一次生成包裝才能用。你可能會說,那你全部用UVS寫不就好了。那就要引出下一個問題。
代碼功能不完備。首先是執(zhí)行效率,且不說在UVS中for循環(huán)有多難,每次我都想轉(zhuǎn)到C#里面寫。其實最要命的是沒有函數(shù)指針或者同類功能的東西。要知道程序里面很多常用的東西都是靠它,比如Sort,Select,Where,F(xiàn)irst,實際上C#靠這些函數(shù)大大減少了需要做for循環(huán)的情況,簡潔美觀,Python雖然通過語法讓for看起來更加簡潔,但是實際上可讀性很差,而且排序還是需要函數(shù)指針。而UVS不能給C#傳遞函數(shù)指針,自己的數(shù)據(jù)結(jié)構(gòu)也不完備,操作列表的時候簡直抓狂。順便就是列表中的元素不會折疊顯示而是全部展示,當你的元素很多的時候你點進去看簡直哭笑不得。還有遇到錯誤的時候不告訴你哪個gameobject,得一個一個找。這來回一抵消,開發(fā)變得沒有效率了。
最后,更新緩慢看不到未來。如果說每年都有一個新版本好歹學(xué)了以后可能還不虧,說不定以后問題都解決了,問題就是自2021版本后就再無更新,感覺像是官方是要放棄了的樣子。我還專門為了用最新版本更新到2021,版本綁定也是一個問題。就算沒有根本解決問題,好歹一年一版才有誠意吧。
其實UVS這玩意本身就是個冷門技術(shù),有的地方有用確實有幫助,比如當作可視化的狀態(tài)機就不錯,但是想要通過它繞過編程,看起來像個捷徑,最后卻走到溝里,想找人幫忙發(fā)現(xiàn)沒幾個人真的了解。關(guān)鍵是不要浪費時間,時間太寶貴了,想想那些AS3程序員,F(xiàn)lash死亡后他們只能改學(xué)別的東西,之前所精通的技術(shù)付之東流??尚械募夹g(shù)必須經(jīng)受時間的考驗。某些UP也不要為了流量去宣傳自己都不會用在實際項目上的東西(純UVS開發(fā))。
關(guān)鍵詞: