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

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

2)Mesh資源開啟R/W內(nèi)存的翻倍問題

3)UI的Animator動畫對Canvas.SendWillRenderCanvas()耗時影響

4)對Shader變體的理解


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

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

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

Script

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

A:Timeline的組成如下圖:

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

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

感謝羽飛@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:

https://answer.uwa4d.com/question/61c00a17d8413e18eb546b3b

Mesh

Q:為什么Profiler中顯示開啟網(wǎng)格的Read/Write沒有使其內(nèi)存翻倍,而僅僅是上升了一點?

A:如果是FBX中的網(wǎng)格資源,則該網(wǎng)格資源很有可能除了自身網(wǎng)格的頂點數(shù)據(jù)外,還帶有動畫和骨骼信息。而當(dāng)開啟FBX的Read/Write時,僅會使網(wǎng)格資源自身的內(nèi)存翻倍,而動畫和骨骼信息不會,且Profiler并不能將他們分開統(tǒng)計,從而產(chǎn)生了整體沒有翻倍的現(xiàn)象,如圖。

開啟Read/Write:

沒開Read/Write:

這一點可以通過將FBX設(shè)置中Animation Type設(shè)置為None、取消Import Animation勾選、取消Import Materials勾選證明。此時Profiler中該網(wǎng)格資源內(nèi)存顯著下降,并基本符合開啟Read/Write前后內(nèi)存翻倍了。

值得一提的是,在較新版本的Unity中(圖截自2020.3),選中網(wǎng)格資源是可以看到其內(nèi)存的理論大小和具體組成部分的。

感謝Faust@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:

https://answer.uwa4d.com/question/61c05c15d8413e18eb54ec09

UGUI

Q:對UGUI添加Animator動畫會造成UI更新耗時嗎?如果Animator組件處于Active狀態(tài)但沒有進行Loop會有持續(xù)耗時嗎?

A:在Unity 2018.4版本中對于這個問題實驗如下:

步驟1,場景中為一個UI添加修改Scale的動畫,并復(fù)制1000個;

步驟2,添加了其Position和Color屬性的動畫;

步驟3,修改了所在Canvas的Render Mode為Overlay模式和Camera模式;

步驟4,修改了所在Canvas的Pixel Perfect為打開。

只進行1的情況下無論動畫是否Loop,Canvas.SendWillRenderCanvas()都只會在剛開始時有一段高耗時。

而修改2之后的所有情況下,開啟Loop時Canvas.SendWillRenderCanvas()始終具有高耗時。但關(guān)閉Loop后,播放完一次動畫后Canvas.SendWillRenderCanvas()的耗時就始終接近于0了,如圖:

而此時動畫系統(tǒng)本身的Animator.Update()耗時仍然很高,如圖:

總的來說,從2018.4上的這次實驗來看,現(xiàn)版本的UGUI不會被不在播放狀態(tài)的Animator影響而造成Canvas.SendWillRenderCanvas()耗時。

感謝Faust@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:

https://answer.uwa4d.com/question/61c05b07d8413e18eb54ea3e

Shader

Q:除了不建議使用Standard Shader外,還有其他的Unity默認的Shader不推薦使用嗎?比如官方的Universal Render Pipeline/Particles/Unlit有6個變體,其中也用到了霧效的計算。但是我們項目中沒有用到霧效,而且這個Shader用得非常多,這類情況是否有必要自己弄一個簡潔版?

A:關(guān)于Shader變體數(shù)量主要影響的是Shader的內(nèi)存(雖然變體數(shù)量和內(nèi)存并不是完全的線性關(guān)系),如下PPS中的Uber變體數(shù)為3.74K很高:

主要是因為有很多multi_compile的Keywords,建議手動刪除一些不用的(或使用shader_feature代替),可以大大降低變體數(shù)量:

以上示例就是簡單粗暴的優(yōu)化對內(nèi)存影響較大的Shader,當(dāng)然最好是通過SVC對項目中所有Shader的所有變體進行管理,但工作量相對會大很多。

感謝羽飛@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:

https://answer.uwa4d.com/question/61c672c1d8413e18eb5db606

封面圖來源于

Animation Rigging: Advanced Setups

展示了Unity動畫索具包的高級設(shè)置和用例。


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

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

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

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

UWA學(xué)堂: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ā)布平臺,僅提供信息存儲服務(wù)。

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

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