學以致用,任何學問的學習都要立足於現實,努力實踐,方可更進一步。Unity作為目前主流的3D游戲引擎,在各個領域已經展露出應用價值。此次借博客園寶地,針對一個具體的Unity項目的開發過程,將相關經驗及感悟發布於此,只求記錄過程及對他人有所幫助,望各位大神多指教,本文主要是對Unity項目開發環境如何搭建的經驗總結。
首先,項目搭建在oschina平台下,通過Git工具進行工程版本管理,經過學習網絡大神的資料,總結出一個簡單的環境搭建方案,不足之處很多希望各位看官多多指教。
搭建環境步驟如下:
第一步.Unity產品下載及安裝(官方網站)https://unity3d.com/
第二步.oschina賬號申請及工程創建。如果對於Git不熟悉,最好網補一下相關知識。GitHub由於網絡等限制,目前作為備用。
第三步.Git及TortoiseGit安裝。自己網絡找最新版。
由於Unity項目的特點,需要在.gitignore文件內進行過濾,具體如下:
#===============# #注意,將二級制的文件配置為txt格式: #在 Edit->Project Settings->Editor->Version Control Mode 中選擇 Visible Meta files。 #在 Edit->Project Settings->Editor->Asset Serialization Mode 中選擇 Force Text。 #保存場景和項目。 #===============# #===============# Unity generated #===============# [Ll]ibrary/ [Tt]emp/ #===============# Visual Studio / MonoDevelop generated #===============# [Ee]xportedObj/ [Oo]bj/
*.svd *.userprefs /*.csproj *.pidb *.suo /*.sln *.user *.unityproj *.booproj #===============# OS generated #===============# .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db
注意:TortoiseGit本地保存git用戶名密碼的配置。
添加關鍵信息即可:
第四步.Unity配置,由於有些資源Unity會存儲為二進制格式,對於版本管理及對比不方便,因此,到菜單“Edit”->“Project Settings”->“Editor”,進行如下圖配置。
第五步.代碼文件注釋頭模板及自動填寫(Windows版本)


using UnityEditor; using UnityEngine; using System.IO; public class AddFileHeadComment : UnityEditor.AssetModificationProcessor { /// <summary>
/// 此函數在asset被創建完,文件已經生成到磁盤上,但是沒有生成.meta文件和import之前被調用 /// </summary>
/// <param name="newFileMeta">newfilemeta 是由創建文件的path加上.meta組成的</param>
public static void OnWillCreateAsset(string newFileMeta) { //此處添加一個消息框進行提示,每次修改文件頭都有消息框彈出,作為Editor機制入門案例。 //避免新手文件放置錯誤導致無法調測,功能完備后可以自己注釋掉。
EditorUtility.DisplayDialog("添加文件頭注釋", newFileMeta, "ok"); string newFilePath = newFileMeta.Replace(".meta", ""); string fileExt = System.IO.Path.GetExtension(newFilePath); if (fileExt != ".cs") { return; } //注意,Application.datapath會根據使用平台不同而不同
string realPath = Application.dataPath.Replace("Assets", "") + newFilePath; string scriptContent = File.ReadAllText(realPath); //這里實現自定義的一些規則
scriptContent = scriptContent.Replace("#SCRIPTFULLNAME#", System.IO.Path.GetFileName(newFilePath)); scriptContent = scriptContent.Replace("#COMPANY#", PlayerSettings.companyName); scriptContent = scriptContent.Replace("#AUTHOR#", "yaozhl"); scriptContent = scriptContent.Replace("#VERSION#", "1.0"); scriptContent = scriptContent.Replace("#UNITYVERSION#", Application.unityVersion); scriptContent = scriptContent.Replace("#DATE#", System.DateTime.Now.ToString("yyyy-MM-dd")); File.WriteAllText(realPath, scriptContent); AssetDatabase.Refresh(); } }
最后的效果:
此節參考網文:http://blog.csdn.net/yupu56/article/details/52326930
第六步.項目結構
Unity項目和其他的應用開發項目不同,關鍵是把握住“基於組件”這四個字,不要用一般的項目組織來規划目錄,但是需要建立一個“GameAssets”目錄,這個目錄主要功能就是和美工等資源導入目錄,外部的非開發資源盡量通過此目錄下的打包進行導入。
此節參考網文:http://www.jianshu.com/p/614de9913ff7 https://www.douban.com/group/topic/59120314/%20
Assets #unity3d 默認主目錄。
-----Editor #編輯器類存放文件夾。以Editor命名的文件夾允許其中的腳本訪問Unity Editor的API。如果腳本中使用了在UnityEditor命名空間中的類或方法,它必須被放在名為Editor的文件夾中。Editor文件夾中的腳本不會在build時被包含。
在項目中可以有多個Editor文件夾。
注意:如果在普通的文件夾下,Editor文件夾可以處於目錄的任何層級。如果在特殊文件夾下,那Editor文件夾必須是特殊文件夾的直接子目錄。
-----ExternalLibraries #大型完善的外部庫文件存放目錄,如NGUI等擁有完善的目錄結構和大量代碼的插件,就存放在此目錄。有些人喜歡把NGUI目錄直接存放在plugins目錄下其實是不太好的,因為plugins文件夾也是要參與編譯的。
-----GameAssets #美術資源存放地,因為美術童鞋都是單獨工程進行編輯,然后導出unitypackage文件,這個文件最大的壞處就是在導入時可能會污染目錄結構,導致每次導入文件,均要手動調整目錄,而單獨命名一個GameAssets目錄,再把這個目錄復制到美術童鞋的工程里面,讓美術童鞋編輯玩資源后,只把需要導出的資源放入這個目錄存放妥當,再導出unitypackage文件。
------------|Materials #材質球。
------------|Models #模型,如果動畫系統采用animation,把動畫文件和原始模型存放在同一目錄下,如果采用animtor,因為動畫重用的關系,動畫文件需單獨存放。
------------|Animations #用新的Mecanim時,存放動畫文件。
------------|Prefabs #預制體,所有不需要Resource.Load加載的預制體,均存放在此。
------------|Sounds #聲音文件
------------|Textures #貼圖文件
------------|UI #一些UI文件,如Atlas等。
------Plugins #dll和一些純代碼插件。Plugins文件夾用來放native插件。它們會被自動包含進build中去。注意這個文件夾只能是Assets文件夾的直接子目錄。
在Windows平台下,native 插件是dll文件;Mac OS X下,是bundle文件;Linux下,是.so文件。
跟Standard Assets一樣,這里的腳本會更早的編譯,允許它們被之外的腳本訪問。
------Resources #所有需要通過Resource.Load加載的資源都存放於此,Resources文件夾允許你在腳本中通過文件路徑和名稱來訪問資源。但還是推薦使用直接引用來訪問資源。
放在這一文件夾的資源永遠被包含進build中,即使它沒有被使用。因為Unity無法判斷腳本有沒有訪問了其中的資源。
項目中可以有多個Resources文件夾,因此不建議在多個文件夾中放同名的資源。
一旦build游戲,Resources文件夾中的所有資源被打包進游戲存放資源的archive中。這樣在游戲的build中就不存在Resources文件夾了。即使腳本中仍然使用了資源在項目中的路徑。
注意:當資源作為腳本變量被訪問時,這些資源在腳本被實例化后就被加載進內存。如果資源太大,你可能不希望它被這樣加載。那么你可以將這些大資源放進Resources文件夾中,通過Resources.Load來加載。當不再使用這些資源了,可以通過Destroy物體,再調用Resources.UnloadUnusedAssets來釋放內存。
------Scenes #scenes文件存放目錄
------Scripts #代碼目錄
------StreamingAssets #這里的文件會被拷貝到build文件夾中,不會修改(移動和網頁版不同,他們會被嵌入到最終build文件中)。它們的路徑會因平台而有差異,但都可以通過Application.streamingAssetsPath來訪問。
第七步.工具類需求
Photoshop 必備
Microsoft Visual Studio 強烈推薦2015版,各種功能支持。
Unity版本管理注意事項
隨着項目進展不斷更新。
下一步准備介紹微型團隊合適的Git開發流程模式。
經驗總結:
新Unity項目由於要使用各種插件,請嚴格按照之前的目前結構規划,如果出現插件目錄異常,尤其是根目前出現異常的情況,可以直接將相應目錄拖至目標目錄,這樣Unity會自己組織文件關系,很方便。導入其他組件之前最好做一次全量提交,避免出現腳本沖突導致項目無法編譯。
感覺Unity的項目開發環境的維護關鍵是深入了解Unity引擎內部的各種機制,這樣可以提高對問題的分析及解決能力。