2012年1月12日 星期四

Unity3.50b6, Beta開箱心得文


power up
Unity3.5已於日前提供下載。其中,最令人引頸期盼的便是Flash相容格式swf的輸出。縱使在HTML5逐漸抬頭的趨勢下,由於絕大部分電腦的瀏覽器仍相容於Flash,可以預見的,這項功能將受到原Flash開發者相當的青睞,也提供Unity3D開發者更廣泛的使用者市場。
關於3.5首頁上羅列了五大新優點,包括了粒子系統的改進、路徑搜尋系統、改寫Occlusion Culling系統、原生相容於Google Chrome瀏覽器、更好的渲染技術(HDR)。主頁上將改版清單羅列開來,洋洋灑灑的一大串。剛剛發現奇銳科技已經穩扎穩打的介紹各改版項目,我將僅針對實際試用後的觀感,跟大家做為分享。
每位開發者使用Unity的目的不同,由於我利用Unity來控制Kinect,運算需求量算是龐大。而新版對於我最大最大的驚奇,莫過於運算效能的大幅改進,而這得力於多執行緒系統的變更。
多執行緒

無須任何改寫,相同的程式,unity自動處理多執行緒工作切割以及CPU分配的問題,實際使用後發現FPS爆增,我Kinect所操縱的Avatar因此能夠有更流暢的動作。在看到那畫面時,熱淚盈眶好像也無法表達心中的欣喜了!!目前這功能僅在發佈到PC以及XBox版時可以使用。
另外,先前提及觸發式多執行緒的 fatal error in gc   問題,一如CTOJoachim的承諾,在新版中果然迎刃而解,看著一樣的程式內容,但畫面順利的執行下去沒有crash掉。感動的就想拿起信用卡刷新台幣再買個幾份。
易於操控的粒子系統
除了可以在編輯畫面中即時的調整粒子的噴射速度、時間參數外,對於操控系統方式,也做了較符合人性的改變。
先前,若想要改變粒子的噴射方式,需要不斷的從參數中調整,讓我們強化世界上最偉大的繪圖運算機器-大腦,藉由數字想像粒子噴射的畫面。
但這一次,一切都不一樣了!比方說,多了發射型狀的選項,可以選擇球型、半球型、角椎、四方型;以及面狀發射。使用上都蠻直覺的,最重要的是簡化工作流程,讓時間花在更重要的項目上。

這個可以在GameObject->Game Other中或是Component->Particles中新增。但是從原有Asset中的particle資源,似乎無法套用這樣的操控模式。
另外,粒子的噴射呈現也可以直覺的以圖型操縱,並以不同顏色標明,算是往前跨了一大步。

Google Chrome的原生發佈
白話說來就是如果用Chrome為預設瀏覽器的話,就可以直接套用不需要再裝什麼外掛。
新版在發佈webplayer時,會有個Enable NaCl Support 選項,記得要勾選。就可以無痛在Chrome中使用。勾選後原本900K的webplay元件大約會再增加個1~2K左右。
發佈成Flash格式
而Flash的發佈後,目錄下會多出.swf, .html, Unityshared.swc, swfobject.js等四個檔案。畫面在載入時會先出現unity的畫面,但整個程序都是使用flashplayer播放,而非另外再開啟UnityWebPlayer進行播放, 詳見討論
另外最令我擔心的是,不論是執行後的Game畫面、發佈成WebPlay或是NaCl畫面都正常,但發佈成swf後卻有些問題產生。

原本的場景包括skybox, 粒子系統, 風, Terrain以及樹木等,但是Terrain與樹木在swf中卻沒有顯示出來。截至文章發表前仍然沒有找到問題的答案。
繪圖部分:
1.多了Area Light選項
2.在QualitySetting中(Edit->Project Setting->Quality)有個有趣的介面。
只要按下下方的Quality鍵,就可以同步增加在各個平台的發佈圖像品質。

HDR

不用說,非常的漂亮精緻!!
總結:
Unity3d原先的功能已經相當強大,而架構也都清楚好用。然而這一次的改版,在介面的操作上花了相當多的心血,讓他變得在更直覺好上手,相信新手可以在快速學習,老手加快操作時間。
而多執行緒(再次強調)的強大功能,讓我更是對他愛不釋手。真心歡迎台灣能有更多人使用這個軟體,藉由軟體的進步,讓每個人都能更專注在創意的實現上。

作者: Ray ,
Email:ray@resyncmed.com,
Blog:http://raychen.org

2 則留言:

  1. 不好意思~ 問個問題,關於提到「無須任何改寫,相同的程式,unity自動處理多執行緒工作切割以及CPU分配的問題,實際使用後發現FPS爆增...熱淚盈眶好像也無法表達心中的欣喜了!! ...另外,先前提及觸髮式多執行緒的 fatal error in gc 問題」和另一篇文章「Unity Threading」的說法,為什麼不使用很早很早就提有供的 StartCoroutine() 就好了??? 我不太懂... 明明不就有 StartCoroutine() 可以作到相同效果,偏偏不用卻要使用 new Thread() ,反而也肥了app檔案 size嗎?? 對吧!?

    這是個人淺見,可能有疏漏之處,請多指教

    回覆刪除
  2. Hi Vigor,
    謝謝你的留言,這樣我們才知道寫出來的文章,能夠對閱讀者提供幫助,並且在敘述不足的地方加強。

    最早會使用到threading,是參考前人程式,利用threading 來進行網路訊息的溝通。
    關於Coroutine與thread的差異,我在這稍作節錄
    The problem is that coroutines aren't threads.
    Coroutines as all the other stuff from Unity runs within the same thread as the engine.
    Coroutines are just "VM scheduled" so they don't lock the system till a condition is met unless you tell them to do by an endless loop or alike

    http://forum.unity3d.com/threads/32105-Threading-doesn-t-work

    也歡迎您持續給我們建議~或許很多作法根本是知其然卻不知其所以然的錯誤。或者隨著unity版本的更新,可以有更多更好的作法。

    Ray

    回覆刪除