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


說下我們項目中遇到的問題

  1. 第一次升級的時候,系統會問你是否自動升級現有介面。我手欠就選擇否,結果慘了,一大堆錯誤,我還真一個個跳出來解決掉了,看起來就是介面乾淨了,刪除了很多餘的。第二次我學乖了,再次升級的時候選擇自動升級介面,完美的都給自動搞定了。

  2. 其實升級的主要目的是需要支持64位ios系統,這時候需要選擇IL2CPP的生成方法,這個不能完全保證之前能正確編譯執行的東西再IL2CPP中也能正確執行,多少有一些不一樣的地方,還好Unity3D社區給力,仔細搜索下就能找到。我們遇到了這個問題 Sina Visitor System ,找到了相應的解決辦法,但是我不確定你是否會遇到和我們不一樣的問題。

  3. 渲染的地方似乎有一些不同,我們之前在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估計也快發布了。

----------------------------- 我是舊答案的分割線 -------------

不好意思,還沒升級。

按照以往的經驗,我們會等到至少5.3版本以後穩定了才升。

以往從2升到3,從3升到4也是如此。


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]

class UISprite
{
[SerializeField] UIAtlas mAtlas; // It"s prefab"s script. Not works for AssetBundle
}

I changed the property type to GameObject(prefab) from Script(prefab"s script).

It works.

Code: [Select]

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 T

2、渲染方面,現在知道一個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遊戲引擎 |