AI插件推荐
1)AI插件推薦
?2)VideoPlayer在Android上播放視頻黑屏
3)Renderer.GetPropertyBlock問(wèn)題
4)RectMask2D問(wèn)題
這是第257篇UWA技術(shù)知識(shí)分享的推送。今天我們繼續(xù)為大家精選了若干和開(kāi)發(fā)、優(yōu)化相關(guān)的問(wèn)題,建議閱讀時(shí)間10分鐘,認(rèn)真讀完必有收獲。
UWA 問(wèn)答社區(qū):answer.uwa4d.com
UWA QQ群2:793972859(原群已滿員)
AI
Q:我們新項(xiàng)目有些AI,想用一些插件來(lái)實(shí)現(xiàn),不知大佬們有沒(méi)有什么AI插件推薦?據(jù)我所知有Behavior Designer ,Playmaker ,Bolt 這些,求科普幾款功能和性能都不錯(cuò)的,謝謝。
A1:推薦 NodeCanvas。
功能亮點(diǎn):
● 三個(gè)可完全切換的圖形模塊供你選擇。
● 具有所有預(yù)期專業(yè)功能的時(shí)尚且直觀的可視化節(jié)點(diǎn)編輯器。
(全部撤銷/重做、放大/縮小、迷你地圖、多選、復(fù)制、復(fù)制/粘貼、JSON 導(dǎo)入/導(dǎo)出、群組和注釋等)
● 圖形、GameObject和全局黑板變量,以創(chuàng)建可重復(fù)使用和以智能體為中心的參數(shù)行為。
● 具有實(shí)例或靜態(tài)屬性和字段的數(shù)據(jù)綁定變量。
● 使用UNET的網(wǎng)絡(luò)同步變量(Network Sync Variable)。
(由于現(xiàn)已棄用UNET,所以會(huì)將其替換為新的網(wǎng)絡(luò)解決方案)
● 預(yù)制件可覆蓋的變量。
● 自動(dòng)轉(zhuǎn)換不同的變量數(shù)據(jù)類型。
● 支持所有變量類型開(kāi)箱即用。
● 跨所有數(shù)量的智能體的可重復(fù)使用行為圖。
● 所有三種圖形模塊之間的無(wú)縫子圖形嵌套。
(行為子樹(shù)、子狀態(tài)機(jī)、子對(duì)話樹(shù))
● 完整的子圖變量參數(shù)化和貼圖。
● 模塊化動(dòng)作和條件任務(wù)設(shè)計(jì)。
● 條件反應(yīng)行為樹(shù)評(píng)估。
● 有條件和基于棧的FSM過(guò)渡。
● 豐富多彩和內(nèi)容翔實(shí)的運(yùn)行時(shí)可視化調(diào)試。
● 節(jié)點(diǎn)/任務(wù)瀏覽器,用以搜索、收藏和閱讀內(nèi)置文檔。
● 首選類型配置器,以根據(jù)項(xiàng)目需求定制與類型相關(guān)的菜單。
● 圖形迷你地圖,以輕松瀏覽圖形。
● 圖形控制臺(tái),單擊鼠標(biāo)即可自動(dòng)定位故障節(jié)點(diǎn)。
● 圖形瀏覽器,用以搜索和查找圖中的節(jié)點(diǎn)、任務(wù)和參數(shù)。
● 圖形重構(gòu)器,以批量重構(gòu)缺失的節(jié)點(diǎn)、任務(wù)和反射引用。
● 實(shí)時(shí)運(yùn)行時(shí)編輯,以更快速地完成設(shè)計(jì)目標(biāo)。
● 經(jīng)過(guò)優(yōu)化的反射任務(wù),以自動(dòng)集成現(xiàn)有的代碼 API。
● 內(nèi)置事件系統(tǒng),以在圖形中溝通和傳輸數(shù)據(jù)。
● 清晰且記錄完善的 API,以擴(kuò)展 NodeCanvas 框架并創(chuàng)建自己的動(dòng)作、條件、節(jié)點(diǎn),甚至全新的圖形模塊。
● 對(duì)象和屬性繪制器,以一切可能的方式自定義檢查器。
● 與大量第三方資源集成。
● 與FlowCanvas flowScripts無(wú)縫集成。
● 用戶友好,輕量級(jí),無(wú)需設(shè)置。
● 性能穩(wěn)定,初始化后零分配,異步圖加載。
● 支持所有平臺(tái)開(kāi)箱即用。
● 包含全部C#源代碼。
詳細(xì)鏈接如下:
https://assetstore.unity.com/packages/tools/visual-scripting/nodecanvas-14914
Behaviac也不錯(cuò),可惜TX不怎么維護(hù)了:
https://github.com/Tencent/behaviac/
感謝鄭驍@UWA問(wèn)答社區(qū)提供了回答
A2:搬運(yùn)一位大佬的推薦:Baracuda。
https://github.com/Unity-Technologies/barracuda-release
感謝芭妮妮@UWA問(wèn)答社區(qū)提供了回答
A3:搬運(yùn)一個(gè)關(guān)于游戲AI框架選擇的帖子:《What A.I technique is most suited to my game, FSM, BT, GOAP》
附一個(gè)AI相關(guān)Blog:AI分享站
http://www.aisharing.com/sitemap
感謝羽飛@UWA問(wèn)答社區(qū)提供了回答
A4:騰訊開(kāi)源的項(xiàng)目:behaviac
https://www.behaviac.com/language/zh/%e9%a6%96%e9%a1%b5/
behaviac是游戲AI的開(kāi)發(fā)框架組件,也是游戲原型的快速設(shè)計(jì)工具。支持全平臺(tái),適用于客戶端和服務(wù)器,助力游戲快速迭代開(kāi)發(fā) 。
編輯器可以在PC上運(yùn)行,操作方便直觀可靠,支持實(shí)時(shí)和離線調(diào)試;編輯器可以導(dǎo)出xml,bson等多種格式,更可以導(dǎo)出C++、C#源碼,提供最高效率。
運(yùn)行時(shí)支持全平臺(tái),有C++和C#兩個(gè)版本,原生支持Unity。
感謝蕭小俊@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/60cafcefe58b4719dd3e25ac
Video
Q:這個(gè)問(wèn)題只在A工程里出現(xiàn),把同樣的視頻、代碼拷貝到一個(gè)新工程里,然后把視頻文件放到Addressables Group并設(shè)置不壓縮,構(gòu)建到手機(jī)上是可以正常播放的。但是在A工程里,把視頻放到Addressables Group里設(shè)置不壓縮,還是無(wú)法播放,并報(bào)錯(cuò):
AndroidVideoMedia::OpenExtractor could not translate archive:/CAB-abafc77eff58910e7bc5f69ce62a4ed7/CAB-abafc77eff58910e7bc5f69ce62a4ed7.resource to local file. Make sure file exists, is on disk (not in memory) and not compressed.
請(qǐng)問(wèn)大家有沒(méi)有遇到類似問(wèn)題?
A:雖然在Addressables Group里設(shè)置了不壓縮,但在手機(jī)上還是播不了視頻。所以想到是不是有什么地方壓縮了Bundle,最后在build.gradle里找到,需要把 ‘.bundle’ 添加到gradle的noCompress里,如下:
aaptOptions { noCompress ‘.unity3d’, ‘.ress’, ‘.resource’, ‘.obb’, ‘.meta’, ‘.wem’, ‘.bnk’, ‘.txt’, ‘.xml’,’.bundle’ //ADD_NoCompress_TAG }感謝題主wenzhao@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/60ddedb8e58b4719dd3e2890
Rendering
Q:從代碼打印日志來(lái)看,GetPropertyBlock一開(kāi)始獲取的是什么?似乎沒(méi)什么用:
public MeshRenderer mr;[Button]void DOTest(){MaterialPropertyBlock block = new MaterialPropertyBlock();mr.GetPropertyBlock(block);Debug.Log(block.isEmpty); //打印trueColor baseColor = block.GetColor("_Color");Debug.Log(baseColor.ToString()); //原始是白色 打印(0,0,0,0) 也就是沒(méi)有獲取到block.SetColor("_Color", Color.red); //設(shè)置顏色mr.SetPropertyBlock(block);mr.GetPropertyBlock(block); //再次獲取Debug.Log(block.isEmpty); //打印falsebaseColor = block.GetColor("_Color");Debug.Log(baseColor.ToString()); //打印(1,0,0,1)}原先我以為通過(guò)Renderer.GetPropertyBlock(block);會(huì)把這個(gè)Renderer的材質(zhì)屬性都存到這個(gè)Block里面,然后我再修改里面的值,可是事實(shí)并不是這樣,例如我只想修改Alpha,但是無(wú)法獲取原始顏色:
MaterialPropertyBlock block = new MaterialPropertyBlock(); meshRenderer.GetPropertyBlock(block); Color baseColor = block.GetColor("_Color"); block.SetColor("_Color", new Color(baseColor.r, baseColor.g, baseColor.b, alpha)); meshRenderer.SetPropertyBlock(block);A1:首先你沒(méi)有往Property里面添加屬性,所以它肯定是Empty,也就是你的屬性表單里面是個(gè)空列表;然后通過(guò)Setcolor,這樣其實(shí)應(yīng)該是往屬性表單里面添加了一個(gè)屬性字段,這樣列表就不為空了。至于為何打印出白色,應(yīng)該是默認(rèn)值吧,即你訪問(wèn)一個(gè)不存在的屬性時(shí)為了避免返回null,所以給了你一個(gè)默認(rèn)值(這里猜想的)。
想獲取原始顏色,直接從材質(zhì)上拿:
var mat = renderer.material;//renderer.sharedMaterial; Color c = mat.GetColor("_Color"); Debug.Log(c.ToString());感謝李星@UWA問(wèn)答社區(qū)提供了回答
A2:Renderer.HasPropertyBlock()可以用來(lái)判斷一個(gè)Renderer是否已經(jīng)有PropertyBlock了,通常沒(méi)有調(diào)用SetPropertyBlock之前,GetPropertyBlock得到的都是“空”的結(jié)果。有一個(gè)情況比較特殊,在動(dòng)畫(huà)里面用來(lái)控制材質(zhì)球后(比如控制材質(zhì)球的顏色),使用GetPropertyBlock去獲取MaterialPropertyBlock,這樣得到的結(jié)果是非“空”的,理論上應(yīng)該是動(dòng)畫(huà)控制材質(zhì)球使用的就是SetPropertyBlock來(lái)實(shí)現(xiàn)顏色變化的。
感謝Xuan@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/60dbdc13e58b4719dd3e2861
UGUI
Q:我在帶有RectMask2d的Scrollview節(jié)點(diǎn)下動(dòng)態(tài)創(chuàng)建一些圖標(biāo),發(fā)現(xiàn)打開(kāi)頁(yè)面時(shí)圖標(biāo)無(wú)法正常顯示,滑動(dòng)一下才顯示出來(lái),檢查圖標(biāo)對(duì)象不可見(jiàn)時(shí)已經(jīng)創(chuàng)建出來(lái),同時(shí)對(duì)應(yīng)的Inspector窗口缺少了Default UI Shader組件,請(qǐng)問(wèn)有大佬知道是什么原因嗎?
Debug發(fā)現(xiàn)圖標(biāo)對(duì)象能正常加入到RectMask2d的裁剪Hashset中,查看Frame Debug中圖標(biāo)不顯示時(shí)與顯示時(shí)少了一個(gè)Batch。
A:可以試試動(dòng)態(tài)創(chuàng)建完成后調(diào)用Canvas.ForceUpdateCanvases,這個(gè)接口是讓所有的UI元素及時(shí)刷新。
https://docs.unity3d.com/ScriptReference/Canvas.ForceUpdateCanvases.html
感謝Xuan@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/60ccc58fe58b4719dd3e2644
封面圖來(lái)源于網(wǎng)絡(luò)
今天的分享就到這里。當(dāng)然,生有涯而知無(wú)涯。在漫漫的開(kāi)發(fā)周期中,您看到的這些問(wèn)題也許都只是冰山一角,我們?cè)缫言赨WA問(wèn)答網(wǎng)站上準(zhǔn)備了更多的技術(shù)話題等你一起來(lái)探索和分享。歡迎熱愛(ài)進(jìn)步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官網(wǎng):www.uwa4d.com
官方技術(shù)博客:blog.uwa4d.com
官方問(wèn)答社區(qū):answer.uwa4d.com
UWA學(xué)堂:edu.uwa4d.com
官方技術(shù)QQ群:793972859(原群已滿員)
總結(jié)
- 上一篇: 2013 CocoaChina微信精选之
- 下一篇: 100%正确率识别票据从金融领域切入挖掘