Unity4 的工程升級到 Unity5 都需要注意哪些事情?
現在想把手中的項目升級到UNity5中,但是升級的過程中遇到了很多問題,比如,Unity4烘好的場景升級到5里後,完全沒有效果等等。諸如此類的很多問題。
正好最近我們也在升級、並整理出一份文章供你參考。
Unity5終於正式發布了,我們也趕緊嘗試著把現在的項目升級到Unity5.0,升級的過程遇到了不少問題,估計也是大家將來會遇到的,分享出來供大家參考
一、先說說Unity4.0 烘焙面板里常用的參數
Quality
烘焙質量一般會選擇高
Bounces 反彈 這個值一般選1,如果選2,烘焙的時間會增長50%左右,所以設置這個值要謹慎。
Sky
Light Intensity 天空光強度 這個一般我也不會設置的太高
Bounce
Boost 反彈增強,同一單位面積內增大光的反射數量,相比較來說,這個值增大會直接影響渲染時間。
Bounce
Intensity 增強光的反射強度
Contrast
Threshold 對比度,這個只是偶爾會調。
下面是我烘焙大場景時用到的參數,基本是在效果和時間上達到了一個合理的平衡點。
二、再說說
Unity5.X,和4.X的區別,首先光照烘焙技術就不同,
Unity4.X版本採用的是Autodesk的Beast技術
Unity5.X版本採用的是PowerVR Ray Tracing和Enlighten技術,所以Lighting Window 面板里的參數差別就很大。
整體的參數介紹這個官網的網址里有,
http://docs.unity3d.com/Manual/GlobalIllumination.html
我只說說常用的。
(一)Object面板
Lightmap Static:
必須把烘焙的物體設置成靜態
Scale in Lightmap:
數值的大小與該物體的表面積有關,這個值影響烘焙時間,值越大時間越長。(效果如下圖)
Scale In Lightmap 設置成0.1時的效果
Scale In Lightmap 改成1時的效果
(這個值也影響光影圖的數量)
Preserve UVs: 如果物體沒有在3dmax里展好UV,那麼這裡必須勾選。
(二)Scene面板
Skybox:會直接影響你的環境光
Ambient Source:環境源,這裡選
的skybox
Ambient Intensity: 環境光的強度值,也就是環境光的亮度值
Reflection Source:反射源,這是Unity4.X里沒有的。烘焙後會在場景文件的同名文件夾中多出一個名為 LightmapSnapshot的文件。
Realtime Resolution:實時解析度,這個物體所產生的GI對其它物體的影響程度,值越大影響越大。例如
Realtime Resolution 參數設成比原默認的小10倍即 0.2 ,
這個值調成1後,牆上的綠玻璃顏色,能更多的影響地面了
Realtime Resolution 參數改成 0.4後的效果綠色牆所產生的環境光,影響範圍變小了。
CPU Usage:選的默認。
Baked Resolution:烘焙解析度,如果數值是10,那麼就是每個單位里分布10個紋理元素,實際測試的效果如下
Baked Resolution的參數值調成10後,陰影的邊變實了
Baked Resolution的參數值調成1後,陰影的邊變的很虛了
Indirect Intensity:間接強度,這個和unity4.x里的參數有些像,可以簡單的理解為光的反射強度。
Bounce Boost:反彈強度,同一單位面積內增大光的反射數量,相比較來說,這個值增大會直接影響渲染時間。
Default Parameters:默認參數,這裡還可以自己創建自己的參數。一般情況在預烘焙時選擇最低設置。
Atlas Size:烘焙圖的大小,以前4.X版本只能通過腳本來調整,現在好了。
(三)燈光參數
這裡需要注意的是Baking 選項里要設置成Baked ,否則烘焙不起作用。
剩下的兩個參數,基本和Unity4.X的參數功能相同。
最後說一下,下面這幾個參數一定要注意,它們影響烘焙速度和光影圖數量,當初就在這上面吃過虧,場景太大,參數沒調小,烘了一晚上啥也沒出來。「Scale In Lightmap 、RealtimeResolution、Baked Resolution、Atlas Size」
總體來講要想提高烘焙速度,就從這Scale In Lightmap 、Realtime Resolution、Baked Resolution三個參數入手基本就可以了。其實升級到Unity5 ,我們遇到了很多問題,很多以前的腳本、插件都不好用,都需要我們一步步解決。升級Unity5的時候,第一個遇到的是工程會出現很多的代碼報錯,因為Unity5修改了很多底層的API,導致原來的項目裡面的腳本無法編譯,這塊我看到有人說手工在對話框出現後沒有讓Unity5自動執行,而後面只能手工修改。其實Unity5給了一個菜單專門做這個事情,這個會大大簡化這個升級第一步的流程:
如果發現升級中有腳本錯誤,請第一時間使用菜單:
Assets -&> Run API Updater ...
可能幾千個錯誤也就是1分鐘不到的時間Unity可以幫助你全部搞定。切記!Unity新人回答一記 ,可以看下這個系列,記錄《共和國》從4升級到5的過程,附鏈接:http://uec.unity3d.com/news/show-53-1.html
說下我們項目中遇到的問題
- 第一次升級的時候,系統會問你是否自動升級現有介面。我手欠就選擇否,結果慘了,一大堆錯誤,我還真一個個跳出來解決掉了,看起來就是介面乾淨了,刪除了很多餘的。第二次我學乖了,再次升級的時候選擇自動升級介面,完美的都給自動搞定了。
- 其實升級的主要目的是需要支持64位ios系統,這時候需要選擇IL2CPP的生成方法,這個不能完全保證之前能正確編譯執行的東西再IL2CPP中也能正確執行,多少有一些不一樣的地方,還好Unity3D社區給力,仔細搜索下就能找到。我們遇到了這個問題 Sina Visitor System ,找到了相應的解決辦法,但是我不確定你是否會遇到和我們不一樣的問題。
- 渲染的地方似乎有一些不同,我們之前在Unity4時候是沒有問題的,但在Unity5的時候,在某些安卓機器上發現會出現雪花的錯誤,後來發現是最裡面的一個攝像機必須要清理背景,不能選擇Don『t Clear。
我們就遇到了這三個問題,覺得問題算很少了。
已經升級5.1.2, 5.2幾個月了,補充回答一些技巧:
- 升級前做好項目備份。如果用了版本管理,最好重新建一個代碼庫,別把5的項目Commit到4上,到時候回滾很麻煩。
- 常見錯誤:一個內置的攝像機腳本,有個preview變數報錯,把它改成 _preview即可。
- 很多API的命名錯誤可以用Assets / Run API Updater解決。
- Shader會變,尤其是一些野生的從第三方拿來用的Shader。這個沒辦法,只能逐個找類似的替換。
- 真正讓人崩潰的是物理引擎,尤其是Joint相關的東西。這種大多發生的車輛類產品里。這個只能逐個去擊破。把Joint的關節逐個拆分,找出問題所在。5.0最大的改動是Joint的Connect Anchor都需要重新設置。
- 其它的想到再補充吧。感覺5.2還不太穩定,按照Unity的尿性,起碼等到5.5才能真正穩定下來,但那個時候6估計也快發布了。
uniy5的場景運行幀率會比unity4低
像我這種只用筆記本的 恐怕得為unity5準備台台式機渲染會慢很多.... 因為enlight么 你懂的
安裝時候記得webplayer 和monodeveloper也升級下 standard asset也要另外裝
如果不是新項目 ,還是不升級為妙2015.4.10 Update:給出NGUI問題的解決方法=====================================額 這是最近遇到的一個比較嚴重的問題:NGUI無法直接用新的AssetBundle機制更新,每次從包里Load帶UI的prefab就會有類似
GameObject (named "Sprite") references runtime script in scene file. Fixing!
的錯誤。論壇上也有類似的問題Assetbundle loading error
至於問題發生的情況,以UISprite為例的話,是因為UI和Atlas不在一個AssetBundle里。具體原因看Unity5 AssetBundle support 大概能理解了:Loading streamed-scene will fail if exist game object that have component with a script property type and value is prefab"s script.
Code: [Select]I changed the property type to GameObject(prefab) from Script(prefab"s script).It works.Code: [Select]
class UISprite
{
[SerializeField] UIAtlas mAtlas; // It"s prefab"s script. Not works for AssetBundle
}
class UIScript
{
[SerializeField] GameObject mAtlasPrefab; // for AB, use mAtlasPrefab.GetComponent&()...
}
Other controls are same.
不過像鏈接里這麼改NGUI底層的話有點太折騰(也可能是我沒掌握精髓),所以我和同事準備嘗試繞過UIAtlas這類序列化的腳本試試。
後來自己嘗試了一種解決方案,就是把atlas.prefab打到引用到的AssetBundle里,然後atlas.mat和atlas.png單獨打成一個包,這樣每個panel打包後只會變大幾KB,而又能正常使用atlas,一舉兩得~
另外一些坑:1、升Unity5有不少API改了,有的插件沒事,不過動畫那塊的插件基本廢掉了T T2、渲染方面,現在知道一個alpha blend 會鎖住alpha通道,試了好久沒效果。。[Unity5]how to change alpha by using shader. 這裡給出了解決方法 主要是下面那句最後要加alpha:blend#pragma surface surf NoLighting noambient **alpha:blend**
暫時就這些~
老項目還在用4.x,有計劃升,但考慮人力和時間成本就一直沒升。上周遊戲已進入內測,其它方面更需要時間精力。
4升級到5後,光照/材質/動作/AI都不正常了,第三方庫各種不正常,蛋碎了一地.
燈光渲染不一樣啊,頭疼
1.api方面大量的修改,主要還是active那些,為什麼每次升級都有它。其次是動畫控制器方面的。
2.T4M在csdn上有可以兼容unity5的版本,但是是標題黨。需要將固定渲染管線的shader改寫,紋理太多的需要精簡。
暫時這麼多…我就說一句,用5.1.3的版本
我把4升級到5後,很多第三方的材質就用不了了,頻繁報錯
推薦閱讀:
※如何看待King即將發布的遊戲引擎Defold?
※看了會兒shader想問為啥不把光源也寫在shader里?
※2d遊戲中如何實現類似光照的效果,類似燈籠,火啊?
※Unity5場景應該如何烘焙?
※國內開發主機遊戲的會越來越多嗎?
TAG:Unity遊戲引擎 |