當前位置:
首頁 > 最新 > 如何更深入地掌握研發項目的物理性能?

如何更深入地掌握研發項目的物理性能?

這是第104篇UWA技術知識分享的推送。今天我們繼續為大家精選了若干和開發、優化相關的問題,建議閱讀時間15分鐘,認真讀完必有收穫。文末,我們的互動話題是:Mono和IL2CPP,哪個更受你的青睞,我們期待你的灼見!

物理

Q:如何提高Unity物理引擎Physx的性能?我在場景中加入100個具有物理剛體的小人,並充分碰撞,發現低端機的幀率只能跑到10幀以下。

UWA:如果需要充分進行物理計算,這些擁擠在一起的小人很可能會造成大量的物理碰撞,進而造成很高的物理耗時。

在優化之前,題主需要先了解一些基礎物理數值推薦,並不是所有設備都能流暢跑起100個自由製作的蒙皮模型的。所以,建議先看這篇文章:https://blog.uwa4d.com/archives/Simple_PA_Physics.html

另外,題主還需要看一下真機上的具體耗時瓶頸是否真正耗時在物理上,100個角色,如果Mesh量很大,渲染耗時也是不可忽視的,所以建議通過Unity Profiler來先確定一下真機上性能瓶頸。

最後,是否每個小人都需要精確的物理計算,是否可以通過一些射線求交、範圍判斷等性價比高的判斷方法來代替純物理碰撞?這需要題主從設計的角度上來進行權衡。

A:你並沒有什麼辦法直接調用PhysX的API,所以所謂優化物理引擎的性能,倒不如說優化相關組件的性能。首先優先使用CharacterController而非RigidBody。然後盡量避免使用MeshCollider,用BoxCollider、SphereCollider和CapsuleCollider代替,如果不可避免,那麼鉤上Convex。當然,最好的優化就是不要用物理碰撞。射線能解決很多問題,但是射線也不是免費的,它的消耗跟場景里的面數正相關,當然設置射線的maxDistance和LayerMask能節省掉不必要的消耗。最好就是用簡單的物理模型來描述問題,自己寫代碼實現。

感謝凱奧斯提供了回答

歡迎大家轉至社區進行進一步交流:

https://answer.uwa4d.com/question/5ab47292d35eb22c10a0a403

編輯器

Q:有什麼方法可以禁止Unity自動編譯腳本呢?

UWA:可以把Preferences > General > Auto Refresh的勾去掉,不過如果這樣,如果資源在外部被修改,也不會自動重新導入了,會有些影響。

另外,也可以試試這兩個函數EditorApplication.LockReloadAssemblies/ UnlockReloadAssemblies,參考文檔:https://docs.unity3d.com/ScriptReference/EditorApplication.LockReloadAssemblies.html

該問題由UWA提供,歡迎大家轉至社區進行進一步交流:

https://answer.uwa4d.com/question/5ab8a76dd35eb22c10a0a41f

渲染

Q:我使用Texture2DArray的時候發現沒有Mipmap效果,想問下怎麼讓Mipmap生效?原始的紋理都是開啟Mipmap的。

UWA:在創建Texture2DArray時需要注意倒數第二個參數,設為true就表示開啟Mipmap,參考文檔:

https://docs.unity3d.com/ScriptReference/Texture2DArray-ctor.html

該回答由UWA提供,歡迎大家轉至社區進行進一步交流:

https://answer.uwa4d.com/question/5ab7afd60b827e2c0bfdd18f

製作

Q:現在有一張外部生成的Texture可以作為mainTex渲染,但希望獲取它的內容保存下來,但是GetPixels是Texture2D的函數,所以想問問這樣的Texture的內容該如何獲取?

UWA:可以先通過Graphics.Blit把內容畫到Render Texture裡面,然後通過ReadPixels從RenderTexture生成一張Texture2D,假設sourceTex是原始的Texture,tex2D是最終生成的Texture2D,則代碼如下:

該回答由UWA提供,歡迎大家轉至社區進行進一步交流:

https://answer.uwa4d.com/question/5ab8a73c0b827e2c0bfdd196

Shader

Q:我正在嘗試自定義Terrain的Shader,發現內置Shader的末尾有這樣兩行,想問問其中的「Dependency」是做什麼用的,後面指定的Shader起什麼作用?

Dependency 「AddPassShader」 = 「Hidden/TerrainEngine/Splatmap/Diffuse-AddPass」

Dependency 「BaseMapShader」 = 「Diffuse」

UWA:Unity的文檔中應該是沒有描述過這個的作用, 不過在這篇博客里分析的比較清楚,https://alastaira.wordpress.com/2013/12/07/custom-unity-terrain-material-shaders

這是當Terrain使用的紋理超過4張時,Unity會用其中的AddPassShader來進行第二次渲染,並且blend上去。而BaseMapShader是用在低端顯卡上的,只用一張紋理來顯示的Shader。

該回答由UWA提供,歡迎大家轉至社區進行進一步交流:

https://answer.uwa4d.com/question/5ab8b537d35eb22c10a0a426

互動話題

近年來,隨著Unity官方對IL2CPP的大力支持和改進,越來越多的開發者在立項初期在Mono和IL2CPP之間猶豫徘徊。到底是Unity ILCPP編譯好還是Mono的編譯更好?IL2CPP的性能是否真有顯著的變化?用過的朋友不妨來交流下你的心得!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 侑虎科技 的精彩文章:

支持本地管理深度測評、全新的UWA API、兼容Unity 2017.3
必讀!使用ILRuntime來實現熱更新的優與劣!

TAG:侑虎科技 |