ToLua或XLua中的虛擬機是否獨立于Unity的主線程

1)ToLua或XLua中的虛擬機是否獨立于Unity的主線程

2)Timeline技能編輯器提取關(guān)鍵幀信息

3)Canvas AdditionalShaderChannels設置無效

4)SDK返回的時候取Time.deltaTime比較大


這是第291篇UWA技術(shù)知識分享的推送。今天我們繼續(xù)為大家精選了若干和開發(fā)、優(yōu)化相關(guān)的問題,建議閱讀時間10分鐘,認真讀完必有收獲。

UWA 問答社區(qū):answer.uwa4d.com

UWA QQ群2:793972859(原群已滿員)

Lua

Q:ToLua或XLua中的虛擬機是否獨立于Unity的主線程?

A:Lua的虛擬機有自己的堆、棧內(nèi)存,虛擬機的更新需要有外部的線程通過函數(shù)調(diào)用來驅(qū)動,而Lua虛擬機目前只支持單個線程來驅(qū)動。在實際項目中,因為Lua中要訪問Unity的API,所以基本上都是通過主線程來驅(qū)動。

但實際上,如果不需要訪問Unity API,完全是可以放在子線程里去驅(qū)動的。

該回答由UWA提供

Timeline

Q:最近在用Unity做一個技能編輯器,讓策劃可以在Timeline編輯器里編輯技能動畫、施法特效、受擊動畫、受擊特效和播放聲音等等。編輯這些都沒什么問題,我想根據(jù)編輯好的Timeline導出一系列行為節(jié)點,在Editor的環(huán)境下導出成配置(包含所有行為節(jié)點)?,F(xiàn)在我不清楚怎么獲取Timeline里第m幀開始某動畫x,第n幀結(jié)束這些行為。同時怎么能給動畫打上對應Tag?

A1:Timeline的組成如下圖:

每個Track對應一個TrackAsset其實就是一個PlayableAsset,整個Timeline也是一個TimelineAsset,里面存了所有Track的數(shù)據(jù)。

對于每個Clip的開始和結(jié)束時間在TimelineClip中可以獲取。

感謝羽飛@UWA問答社區(qū)提供了回答

A2:我把基于Timeline的編輯器小Demo共享上來。

技能編輯器Demo。

以上是本人摸索著寫的一個簡單技能編輯器Demo,基于Timeline的。

感謝題主右前鋒@UWA問答社區(qū)提供了回答

UGUI

Q:在UI中使用到的Shader中用到了UV1和UV2通道,在Canvas AdditionalShaderChannels中選擇添加了對應通道后沒有效果,相同代碼資源在2019.4.26f1c1正確顯示,請教大家是否是版本問題還是需要特殊設置處理?

Unity版本:2018.4.17f1

Unity版本:2019.4.26f1c1

A:搜索了一下Unity Release Note,在Unity 2019.2.0版本中發(fā)現(xiàn)Unity修復了這個問題。修復后,AddVert會把UV2的數(shù)據(jù)和UV3的數(shù)據(jù)也拷貝進去。沒修復前,UV2的數(shù)據(jù)從RenderDoc里面看是0。

測試了一下,確實在2019.1.14版本還是有問題的,下一個版本2019.2.0就沒問題了。

在2018.4.23f1版本上參考這個鏈接的Outline效果進行了測試,在小米9真機上沒有發(fā)現(xiàn)問題,題主可以參考一下:

https://www.1024sou.com/article/2307.html

PS:看了2018.4.18到2018.4.23之間的所有的Release Note,沒有發(fā)現(xiàn)相關(guān)問題的修復。這個文章是使用Shader來實現(xiàn)Outline的,感覺效果挺不錯。

感謝Xuan@UWA問答社區(qū)提供了回答

Script

Q:nity調(diào)用某SDK進行登錄,SDK返回的時候取Time.deltaTime比較大(就是從調(diào)用SDK開始到SDK返回的時間),這種情況可能導致我在Update里的邏輯經(jīng)歷了很長的一幀。

A1:直接點就是判斷Time.deltaTime大于某個閾值時直接Return。

感謝碎心客@UWA問答社區(qū)提供了回答

A2:Time.deltaTime比較大也就是說登錄操作的耗時很高,而且是一個同步調(diào)用,確實會導致卡頓問題(在Update里的邏輯經(jīng)歷了很長的一幀)。

一般來說,網(wǎng)絡請求等操作應該盡可能通過異步調(diào)用來實現(xiàn),如果是SDK的登錄接口沒有提供異步方法,建議先嘗試通過子線程(new Thread)來調(diào)用,然后主線程上開個協(xié)程每幀輪詢下結(jié)果。

該回答由UWA提供

封面圖來源于網(wǎng)絡


今天的分享就到這里。當然,生有涯而知無涯。在漫漫的開發(fā)周期中,您看到的這些問題也許都只是冰山一角,我們早已在UWA問答網(wǎng)站上準備了更多的技術(shù)話題等你一起來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官網(wǎng):www.uwa4d.com

官方技術(shù)博客:blog.uwa4d.com

官方問答社區(qū):answer.uwa4d.com

UWA學堂:edu.uwa4d.com

官方技術(shù)QQ群:793972859(原群已滿員)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容