2012年8月9日 星期四

當Unity遇上SVN!版本控管的二、三事



SVN(Subversion) 一直是大家愛用的版本控管軟體 (Git 最近好像比較紅),第一次準備用Unity開發專案的朋友一定很疑惑,到底Unity專案要上傳哪些部分到SVN上才能好版本控管?Unity整體專案除了Script本身外,還包含了許多他特有的東西,如:Prefab、Material、Texture、Shader、Layer、Tag等,這些跟以前純C/C++、JAVA Code以外的東西。


拉裡拉紮的講一堆,其實就幾個重點把握好就OK了,來看看吧!
  1. 開啟Unity對外部版本控制的選項。Editor -> Project Setting -> Editor,選擇Meta File。開啟後,Unity會為每個Asset檔案多產生一份與檔名相同的meta file,其中連資料夾也會有。例如:ABC.png就會在同一個位置下出現ABC.png.mata的檔案。



    這個Meta file裡頭存放了Unity對每個Assets之間的連結,例如:那個Component與那個Perfab有關連,所以千萬別忘了上傳至SVN。


  2. 基本上你只需要上傳Assets資料夾底下,你所擺放的資料,也就是專案所用到的所有素材,例如:Script、Shader、Texture、模型檔。




  3. Assets外的所有檔案與資料夾都是Unity自行產生的。裡面其實保存了一些雜七雜八的 Cache 資料。這些資料會根據使用者不同的操作,產生一些每個人都不一樣的Cache檔。



    將這些東西上傳至 SVN,就很容易在 Merge 時出現 "衝突"。 所以根據我自己的經驗這些就是不上傳。

    那Editor這些設定怎麼辦?根據網友Hudson的轉述,可以將ProjectSettings也上傳至SVN這樣就可保有設定,但其他部分還是不要上傳。


  4. 至於兩個人同時修改 "場景檔" 所造成的衝突,如果你是非Pro的版本那 "無解"。Unity在3.5版本之後可以將場景格式改為 Text Mode,設定的地方跟 Meta file 一樣 Editor -> Project Setting -> Editor,將 Asset Serialization 改為 Force Text 就可以了。這樣 SNV 就可以幫你 Merge 同一場景不同的修正。



     非Pro的使用者要規避這個問題,其實可以從一些設計上去避免,例如:將彼此溝通的資料擺在一個Singleton的class裡頭,最為共同存取之用;也可以試試Centralized design pattern來解這個問題。或多或少可以減輕一點負擔。

    (PS: 此段內容由Hudson提供意見修正)


  5. 當然啦!這篇官方的參考說明:Using External Version Control Systems with Unity,讀一讀也是很有幫助的。
以上就是小弟在三個專案上使用SVN與Unity做結合的一點心得。如有錯誤的地方還請大大不吝嗇指教,謝謝!

(PS: 在Unity Store上有賣一個叫EZ SVN的東西,不知道有沒有人玩過。有的話看能能跟大家分享一下這是啥東西,一個要賣$5.00耶!!)


[小編 碎碎念] 
如果你覺得這篇文章寫的不錯,請給我們一個 "贊",加油打氣吧! ^__^

UnityIN 總編輯:Bric Lin,
Email: ericlin09@gmail.com
曾任職台灣某遊戲公司研發Game Engine,為書籍“OGRE入門指南”譯者,專攻Rendering技術與遊戲開發,目前為獨立團隊CocosPlay主程式

7 則留言:

  1. 現在 Asset Serialization 選 Text mode 場景檔就能變 text 囉, 雖然需要 Unity pro

    回覆刪除
    回覆
    1. 喔對, ProjectSettings 那個資料夾的內容建議也上傳 LOL

      刪除
    2. 原來要PRO的版本.... 還好沒寫!差點就穿幫了。謝謝Hudson幫忙的補充。ProjectSettings上傳在前公司有試過,但會莫名其妙衝突耶!好吧,再來試試看。

      刪除
    3. Text Mode沒比較好用, 因為merge時你看不懂 XD
      而且Load超慢的。

      刪除
    4. 果然有陷阱!連志遠哥都出來說話了~~ XD

      刪除
  2. 研究了如何控管Unity裡面的檔案一陣子了,對於檔案的控管有些心得。在遊戲裡基本上可分成程式資料,美術資料和企劃資料。美術的資料多為二進位檔,而程式的資料多為文字檔。在Unity的架構下,大部份的企劃應該會產出prefab。在Unity 3.5版以前,prefab就是二進位檔。
    文字檔的控管對程式來說,就選擇坊間覺得好用的scm軟體,像是SVN, Mecurial or Git。至於二進位檔的管理,說真的,並沒有免錢又好用的方案。但Perforce(一樣是scm),因為是用database的方式處理版本的控管,所以拿來管理二進位檔在效能上遠快於SVN, Mecurial or Git。
    在處理二進位檔的檔案控管時,一直以來我使用的方式是請美術人員和企劃人員,將資料以unity package的方式匯出,放入scm裡。而要使用時則一次import進Unity裡。

    回覆刪除
  3. USD 5.00 對大師您是一點小錢而已阿

    回覆刪除