使用SVN進行Unity3d版本管理總結

2021-06-18 02:43:58 字數 2523 閱讀 7732

使用unity3d也有一段時間了,由於團隊一直使用svn進行版本管理,現總結一下:

(1) unity3d的二進位制資源必須加鎖進行版本控制,因為它沒辦法merge;

(2) unity3d自己產生的c#工程相關檔案,包括vs產生或者mono產生的,都不需要歸入版本控制;

(3) 在新加入項時,unity3d會產生乙個同名的.meta檔案,這個檔案記錄了此項乙個唯一的64位的guid,這個檔案必須上傳,否則會出現各種缺失的異常情況(比如指令碼miss等)

(4) 對於projectsettings資料夾,有以下幾個.asset檔案需要進行版本管理:

timemanager

tagmanager

qualitysettings

projectsettings

networkmanager

inputmanager

editorbuildsettings

dynamicsmanager

audiomanager

即便如此,在使用editor進行開發時,由於需要經常改動場景的.unity 檔案,而這個是二進位制的,所以需要得鎖且不能merge。感覺並行開發的難度還是比較大的,unity3d還是比較適合個人開發者和較小團隊開發,對於大型團隊開發,無論是從版本管理還是**結構上,都覺得不太方便和自然。

本文摘要

本文首先描述了unity3.0在支援大型遊戲專案開發時的兩個不足:即對模組化和svn協同缺乏支援。隨後,分析了unity自帶的export/import package 功能,並提出了使用此功能與svn配合實現多人專案協同的方法。 

unity專案協同的挑戰

在使用unity開發遊戲專案時,一般都需要多人同時工作。例如每人負責不同的場景,或者一些人負責除錯光照和渲染,另一些負責編寫程式邏輯。總之乙個人全包的情況對於稍大一點的專案而言少之又少。但遺憾的是unity對協同專案工作和大型專案的支援可以用糟糕來形容。 

首先,unity沒有模組化開發的概念。我們知道模組化是開發大型專案必須的一種實踐方法。例如用vc開發大型程式時,我們可以把程式拆分成多個dll專案來開發,由此減少單個專案的複雜度和編譯時間。另乙個例子是flash程式的開發,同樣可以把工作拆分成多個flash專案,最後將每個專案生成的swf或者swc合在一起工作。 

然而到目前的3.0版本為止,unity仍然不支援類似dll或者swc/swf這種模組化構建應用程式的方法。對unity而言,乙個遊戲就是乙個工程。如果遊戲規模很大,包含很多資源,那麼專案就不可避免地變得臃腫和難以維護。unity在開啟、重新整理、編譯這類工程時也會耗用更多的時間。以至於在unity官方論壇上都能看到許多這方面的抱怨。例如這篇帖子

就詳細地描述了乙個770m左右大小的專案所面臨的困境。 

其次,unity會將專案資訊以二進位制格式儲存在library目錄中,其中被稱為元資料(meta data)的資訊更是記錄了構成遊戲的許多關鍵資料(例如

模型匯入所使用的各項設定、asset之間的引用關係等)。但由於這些資料是二進位制格式,並且存放方式很不清晰,因此在使用svn等版本管理系統時,無法採取多人修改-合併的方式。只能乙個人改完後,提交整個專案,然後下乙個人再改。嚴重阻礙了專案協同。unity官方提供了乙個收費的assetserver,我沒有用過,不知能否解決這個問題。如果我們能通過一些手段讓免費的svn發揮作用,何樂而不為呢? 

對於unity的第乙個缺點,我們暫時沒有好的辦法來解決,只能希望unity後續的版本能提供模組化的支援。(

unity和exitgame近期宣布展開合作,推出一款針對mmog開發的產品組合。unity將推出乙個叫legion的版本,與exitgame的photon配合。我猜測legion應該對大型遊戲專案要支援得更好些吧。) 

至於第二個缺點,我們可以用unity的輸出/匯入包(export/import package)功能,配合svn在一定程度上加以解決。 

用「輸出/匯入包(export/import package)」功能實現專案協同

unity的export/import package功能主要用途是在不同的專案之間實現asset復用。該功能的基本介紹和操作詳見

官方文件,本文將進一步描述該功能的具體表現,以及如何利用該功能實現多人專案的協作。 

匯入匯出包功能具有下列特性:  

[attachment=14]

不匯出依賴

[attachment=15]

匯出依賴

[attachment=16]

[attachment=17]

首先用svn建立對整個專案資料夾的管理,包括asset和library目錄以及下面的檔案;

由負責整合的專案組成員管理並提交該專案更新到svn資料庫

協作人員對自己負責的內容進行工作,然後將成果輸出。輸出時不要鉤選依賴

將輸出的unitypackage檔案提交給集**員(通過svn或者其他途徑都可以)

集**員將新的unitypackage匯入專案,然後再提交到svn資料庫

如果對人員分工、規範以及專案目錄規劃得好的話,採用這種方式完全可以實現多人同時工作,提高專案開發和迭代的效率。

使用xlua 進行Unity3D 熱更新 2

一接觸到新的東西,總想看看背後的原理是怎樣的,xlua也不例外。於是試著寫了一下,算是了解底層的實現原理,以後不用xlua也能有借鑑的地方。xlua的熱修復原理實際上是在 c 編譯成中間語言的時候,進行 的插入這部分用到了 mono.ceil 庫來操作,當然還有其他很多的庫也可以實現。因為是在il的...

Unity3D開發(九) Unity3d流光效果

遊戲開 壇 hello game 遊戲開發群 201276069 之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光...

unity3d研究之版本管理(SVN)

unity進行多人協作開發時必定會涉及資源 配置的版本管理。這裡介紹一下用svn git或其它版本管理系統進行unity工程版本管理的方法。新建乙個unity工程,目錄結構基本是這樣的 最終大約是這樣 unity工程中有很多二進位制檔案,會頻繁導致衝突,library目錄的檔案在每次unity ed...