巧妙設置Texture Type,將ShadowMask內存佔用變成之前的1/4

0x00 前言

在這篇文章中,我選擇了過去一週Unity官方社區交流羣中比較有代表性的幾個問題,總結在這裏和大家進行分享。同時,也歡迎大家加入我們這個討論乾貨的官方技術羣,交流看法分享經驗。

Unity官方社區交流羣:629212643

0x01 Editor

Q: 請問可以通過script修改Scene View的Shading Mode嗎?
屏幕快照 2018-07-06 下午4.39.27.png

A:可以通過腳本來修改Scene View的Shading Mode,只需要修改UnityEditor.SceneView.lastActiveSceneView.renderMode,選擇自己想要的Shading Mode即可,其中renderMode是一個DrawCameraMode類型的枚舉。
關於DrawCameraMode,可以參考這個文檔:
https://docs.unity3d.com/ScriptReference/DrawCameraMode.html

Q: 請問一下,在Unity Editor中可以打開右上角的Stats來查看當前場景的一些性能數據指標,這些數據可以通過腳本來獲取嗎?
B7FE2A39FFA3BD6B4C9338A1461E81F1.png

A: 這裏的數據是可以通過C#腳本來獲取的,在UnityEditor命名空間中有一個UnityStats類。裏面包括了這些數據。
image.png
不過需要注意的是,由於UnityStats類定義在UnityEditor命名空間內,所以只能在Editor中訪問。

0x02 Profiler

Q: 現在開發那邊給的反饋是現在內存佔用很高,會造成閃退。排除了Unity Profiler能夠統計到的一些資源的問題,現在最有可能就是DLL和三方插件的問題,但是現在這部分的內存統計不到。所以給了我這邊一個需求,問有沒有辦法統計到。

A: 這部分你需要對應平臺的工具來進行分析。這是一個比較麻煩的事情,例如在iOS上你可能需要用到xcode和instrument來分析。安卓需要android studio或者adb的一些指令來分析。你可以參考一下這份文檔:https://unity3d.com/cn/learn/tutorials/topics/best-practices/android-memory-management

A: 閃退的可能性有很多,你現在給的信息太少,不太能給你什麼建議。你最好自己測一下,看看所謂“內存佔用很高”這個結論是怎麼測出來的。是PSS高還是單純的mono高,不然沒法解決。(北京-jadiek)

A: 收集下crash可以確定很多問題。比如oom 你可以確定下crash的機型內存是多少的,3g機型一般不會,不然你2g機型就會很頻繁的必現。
你的打包模式和項目實現方案也可能會對你的內存產生影響,比如c#代碼爲主使用il2cpp打包 那麼很可能你的代碼片段的內存就有幾十兆。比如你的場景和批使用靜態和批方案 可能你的scenemem當中的mesh就有幾十兆。比如你的內存泄漏,可能會導致你的mono會持續增長上百兆。(北京-哎呀)

0x03 Lightmapping

Q: 請問下如果只有一個燈並且開啓了shadowmask來烘焙場景,生成的shadowmask都是4個通道的貼圖。這個比較浪費,有什麼優化的方法嗎?unity2017. 謝謝。

A: 可以將texture type設置爲single channel,在2018中可以選擇保留的channel,選擇Red即可,這樣就生成了r8格式的texture,內存開銷會變成之前的1/4。image.png

0x04 Git&Unity

Q: 在用Git管理Unity版本的時候是如何處理二進制文件的呢?
目前Git提供的LFS功能是否能滿足實際需要呢?
實在查閱不到相關資料……

A: 關於git lfs和Unity工程裏的大文件的處理是有一些討論的。
可以查看這裏:https://www.reddit.com/r/gamedev/comments/6mc1az/%20lets_talk_about_unity_git_best_practices_and/
gitlab應該也是有這套api的。
適合unity用的.gitattributes文件,可以查看這個頁面維護的內容:
https://gist.github.com/nemotoo/b8a1c3a0f1225bb9231979f389fd4f3f
可以再配合unity的smart merge。效果會比較好。
設置步驟可以查看這個頁面:
https://robots.thoughtbot.com/how-to-git-with-unity

0x05 Resource

Q: 請問一下工程打包後,包裏會有一些後綴爲resS的文件。想問下這個文件的內容是什麼?謝謝
image.png

A: resS後綴的文件主要是texture的二進制數據。如果是和場景有關的resS文件,比如level0.resS,這種一般是由於在Lighting窗口中設置了Skybox Material。

0x06 Shader Graph

Q: shader graph 這個面板跟着鼠標動 甩不掉 是bug嗎?
89947362489518B605C4846B759C400F.png

A: 嗯。這的確是一個bug:https://issuetracker.unity3d.com/issues/blackboard-follows-mouse-after-changing-mode
不過這個Bug在2018.2.0b9應該修掉了。可以用這個版本測試下。

0x07 後記

好了,以上就是想和大家分享的幾個在羣裏討論的小問題。
再次,歡迎大家加入我們這個討論技術的官方乾貨羣,交流分享呀。

Unity官方社區交流羣:629212643

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章