unity開發工作流程?

請從業人員回答一下.比如用什麼IDE,用什麼版本管理比較好用,平時開發2d或3D都用什麼插件等等

server端用什麼~網通通信用什麼插件等等~隨便聊一聊吧


我司用下來的一些好物分享,拋磚引玉 (其實針對不同項目類型、不同團隊體量會差很多,僅供參考哈)

- 版本管理:目前是Git,主要是branch/tag/submodule功能比較好使。注意工程需要打開visible meta和force text serialization。正在考慮美術資源部分是否改回SVN...

- 編輯器:大家順手即可,我個人是VS黨。寫lua的同事偏向於Sublime

- 伺服器:目前是PHP+skynet都有,通信是protobuf。短鏈接正在從WWW切換到WebRequest,長鏈接是KCP/TCP

- 常用插件(這裡推薦大家能買就買,一方面支持下開發者,另一方面跟著穩定升級)

  • TextMeshPro 字體銳利而且各種描邊、陰影效果不費

  • DOTween 性能壓力小,鏈式寫法很爽快

  • I2 多語言解決方案 (在插件基礎上我們做了一套直接讀取外部csv更新的修改,方便翻譯)

  • TexturePacker 比UGUI那套更容易自定義,譬如我們支持了 Polygon mode sprites 和部分重疊的資源檢查( @遊俠最近剛搞定的,哈哈)
  • UniWebView 內嵌網頁

  • LogViewer 在真機上直接顯示Log

  • uFrame 部分項目使用了作為MVVM框架

  • Dynamic Shadow Projector影子的一套解決方案,見 利用Projector實現動態陰影

不過需要注意的是,很多插件對性能不是很在意……所以需要進一步優化精簡

此外我們還有一套公共的倉庫,實現了常用控制項封裝、命令行出包(之前在 知乎專欄 分享過)、一些運行時性能檢查工具、資源檢查工具(規則大部分在知乎專欄 里提過)等,基本上完整的做1-2個項目下來都會有所積累

順便 Unity的資源商店每個月會有一些付費版本的資源打折及免費 大家可以關注下 Asset Store

(下圖是我司的賬戶一點截圖,咳咳-。- 其實換算成自己開發的人力,買插件性價比非常高

順便 項目可以定期扔uwa測試一下,提前暴露問題最後定期打個小廣告(逃

求Unity/PHP大大簡歷 歡迎私信騷擾


已參與兩款Unity開發的手游, 其中一款已上線.

我司一般的方案是這樣:

IDE: Visual Studio 2013, 插件多, 重構起來你就知道VS好用了, 完爆其他IDE;

UI: NGUI / UGUI, 目前我在的項目組是用NGUI;

Unity插件: iTween做滾動效果, 大多數的插件, 如UV動畫/UI常用組件, 這些需要自己開發;

特效: 能用UV的就別用粒子, 粒子製作常用FX Maker;

功能系統的開發模式: MVC / MV (C寫到M里);

客戶端本地持久化: 加密後存xml;

版本管理: 萬年svn, 輕拍;

Server端兩大類: 純Erlang / C++ with Lua


昨天做的某項目 負責的找了認識的程序幫著看性能有沒有問題。

然後寫了一堆意見,發我讓我看看有沒有價值

我回「好正確的廢話」

說的好對,就是要壓縮模型,要少用插件,要注意數據量,要盡量優化。。。

然後我猜他沒做過東西。

所謂工作流這種東西,往往不是先驗的,有很多經驗的東西在裡面,不同領域區別巨大,我相信看了所有答案,你要是不知道的還是不知道咋辦,知道的看了別人的方案,大多就是一笑,哦,自己該怎麼弄還怎麼弄


這個主要還是看開發什麼類型的遊戲.

一般來說C#代碼肯定是需要編輯的.那麼是選擇VS還是MonoDevelop都是可以的,個人比較喜歡VS,調試以及編輯都感覺比MonoDevelop要強一些.如果需要程序是可以動態更新的,而且你有是需要做移動端遊戲的,那麼Lua基本上也是需要的.是選擇用ulua還是slua其實都沒問題.我扒過一些做的比較好的MMO,基本上都是這兩者選擇其一.最有意思的是完美的誅仙,居然都沒用.懂行的有誰能跟我解釋一下誅仙是用了其他的動態更新機制還是根本也就是不能動態更新代碼.Lua的開發環境比較頭疼,沒有什麼必殺的IDE,基本上大家各自有喜歡的,我知道的有Sublime(不能調試,純代碼編輯);LuaStudio(國產付費,可以直接Attach到Unity上進行調試,不過編輯代碼的時候手感差些,代碼提示非常一般);LDT(基於Eclipse,如果你願你給你的Lua代碼都加上符合規格的注釋,那麼代碼提示非常不錯,不過要注意的是如果要發布的時候建議處理一下注釋代碼,全部去掉,否則文件會大不少)

我開發過的Unity項目基本上都是3D項目.所以只說3D的插件:

T4M用來把地形轉換成模型,用起來還是比較順手的,美術也是比較容易上手的.就是T4M不再更新了,不支持Unity5系列.不過稍微修改一下源碼就可以了.

DOTween大家基本也都有提到,無論是UI還是遊戲中的其他物體都是可以用這個庫,而且性能也不錯.

uSequencer用來製作過場動畫.

NGUI或者系統自帶的uGUI都可以用來做界面,NGUI支持的更全面一些,但是uGUI對系統的壓力更小,看項目組選型吧,都沒問題的.

PoolManager或者FastPool用來做對象緩存池,Unity坑爹的內存管理基本上夠大家喝一壺的.每次去Unity大會的時候都能聽到台上Untiy的人義憤填膺的說"既然你們在服務端都懂得用池,為什麼客戶端不用呢".尼瑪,自己到現在還是在用那麼原始的垃圾回收演算法,還好意思說別人.

EasyTouch也是個好東西,做移動遊戲的手勢,搖桿什麼的都可以用到它.最新的EasyTouch的搖桿是用uGUI做的,如果項目是用的NGUI而且又有潔癖,可以修改一下源碼改成NGUI的.

ConsoleE這個插件用來替代系統自帶的Console是不錯的.我用的是免費版.在看調試信息的時候可以用它做關鍵字過濾.調試起來方便不少.

如果需要讀寫Excel文件,那麼POI庫基本上也是需要的.策劃同學基本上都喜歡用Excel這東西,我們基於Unity做的遊戲編輯器一般都會將數據導出成Excel文件.

如果公司本身沒什麼積累,那麼服務端的選擇還是比較麻煩的.我開發過的網遊基本上是用Java做伺服器端的,這東西配合上好的IDE(Eclipse,IDEA)寫起代碼來簡直就是飛快.而且有非常完善的一套工具鏈,你想做代碼熱替換?你想做生產環境的性能調試?內存爆了你想看看什麼地方出問題了?遊戲死鎖了,你想找到死鎖的原因?OK,Java完善的工具鏈里你都能找到能用的.

如果不想從頭開發一個服務端,那麼現在也有一些開源的選擇,比如kbengine用的是c++做底層,然後python做邏輯.skynet是用c做底層,lua做邏輯.scut用的是C#開發.這些我都沒用過,就不誤導大家了.

如果你做的是手游,那麼你需要一台Mac機器,也可以用黑蘋果,不推薦用虛擬機,太慢.如果對Mac的系統不熟,你就用它做一台發布的機器,打包用它就可以了.Jenkins挺好用,推薦可以用用.

至於用SVN或者GIT啥的全看個人的喜好了,沒什麼太大的差別.當然GIT逼格高一些.開發的時候可以把Unity的Editor Settings里的Asset Serialization的Force Text選項打開,這樣當提交有衝突的時候,有時候還是能Merge的,如果用的二進位,就完全沒希望了.

發布前的Profiler肯定是要做的,Unity的工具其實一直到現在都很一般.這方面可以使用UWA或者騰訊的Cube,都是不錯的Profiler工具.如果你有一台root過的Android那是更好的.

最後的最後,如果是做國內的手游,那麼發布各種平台的包是個非常蛋疼的事情.這裡建議要不然就發布一些主要的平台,然後自己做接入.要不然就找一個靠譜點的接入工具或者平台啥的.否則光是平台接入這塊都會讓你疲於奔命的.


IDE就用monoDevelop就可以了。版本管理svn等常見的都沒有什麼問題。插件完全看項目什麼類型,需要什麼,立項的時候選。


實習三四個月,讓我來答一把(??????) ?

版本控制用git,編譯器用monodevelop,常用插件ngui和itween(做界面和簡單動畫),其他插件看項目。比如你非要用flash做界面就得用scareform插件。

以上僅限三維開發,二維的就不知道了


今天活乾的快,回答一記。

1、首先看了上面的答案發現大家都是回答了題主具體的問題,比如用什麼IDE、什麼版本管理工具、什麼插件。除了信梓外,沒人回答這個問題真正的title,也就是【unity開發工作流程】。

2、題主問的應該是遊戲開發,從遊戲開發的角度講有這樣一個基本的流程:

1)立項,有時候是老闆拍腦袋決定要做一個什麼遊戲或者山寨某個遊戲,也有確實是策劃規劃好了一個遊戲,然後開始做。

2)需求設計,可以是策劃自己設計的功能,也可能是完全山寨別人的,當然目前很多是二者的混合,私以為就是所謂微創新。

3)出策劃案,討論。經過策劃、美術、程序的PK後,老闆來定。這個期間老闆很可能變成策劃,而策劃變成秘書負責把老闆的想法寫成策劃案。

4)幾輪PK過後,開始實際工作。此時完美的狀態是策劃案OK,然後美術先行,程序可能還在別的泥潭中掙扎。等美術資源出的差不多了,程序開始介入,進行功能編碼。但是很多情況是策劃案還在改,美術資源還沒有,但是程序已經開始編碼了。這個時候就考驗功力了,怎麼把程序寫的將來能少改是高科技。

5)如果需求不怎麼變了,策劃開始划水上班打dota或者開始挖下一個坑。美術一般也閑不了。程序開始在坑裡往外爬。

6)功能開發完成,開始alpha測試,經過幾輪alpha過後正規點的開始beta測試,不正規的就直接上市了。

3、以我目前的經驗看,基本上都是邊寫邊改。其實遊戲開發也是軟體開發的一種,因此也遵循軟體開發的基本流程,很多會遇到的問題都是一樣的。


1 開發2d插件: TK2D、DoTWeen,有這2個,加上UGUI,基本夠了。

2 server端: SmartFox 2X(商業的),用JAVA寫後台,入門容易。


  • IDE:如果你可以用 Visual Studio,那就一定不要用 Mono Develop 了。雖然作為開源 IDE,MD 已經算是很不錯了,但是相比 VS 實在無法企及(尤其是有 Visual Assist、Code Maiden、Unity VS 等插件的情況下)。我印象中,即便是最基本的自動完成功能,代碼規模稍大,在 Mono Develop 里就卡得很。另外,如果你的項目代碼里還有 UnityScript,那……趕緊轉 C# 吧!

  • 版本控制:策劃可以用 SVN 或者其他版本控制工具。程序這邊用 git(不會可以學嘛~又不要精通)。我由於一開始就接觸 git,沒有機會大量使用 svn,所以不好評價 git 和 svn 的優劣。但是 git 本身,即使只用命令行(如果你在 Windows 上開發可以用 git bash),也相當好用了。
  • 伺服器:伺服器端我們現在用 Scut。主要優點是和前端一樣使用 C#,很多時候工程師可以同時寫前端和後端的代碼。主要缺點是,Scut 的設計貌似同時兼顧了長連接和短連接,結果對於長連接的支持不是很好。個人對後端懂得少,希望有牛人出來評價。另外還有一個聽說不錯的 Python 伺服器框架,叫做 Firefly Game Server Framework,也可以試試。
  • 網路通信:我個人經歷過的項目,使用長連接則對 C# 自帶的 Socket 庫做簡單封裝,使用短連接則直接使用 WWW 類(雖然這個類介面感覺設計得不好,但還是能用的)。

另外,樓上答主周華 (@ 不對不好意思) 說得在理。插件完全看項目類型,不妨多在 Unity Asset Store 里和論壇上看一看,挑選一下。


Unity開發遊戲過程中處理框架是一個非常複雜的過程,下面主要講下unity遊戲開發過程中本人對框架的處理方法。

管理器

在任何遊戲里,管理器(單例)都佔了很大一部分。我懷疑能否在製作遊戲時候一個都不用或者只用一個管理器。的確,Unity很明顯有更加清晰的方式來使用單例。這樣來看就簡單多了,但是我喜歡在寫一些場景中不存在的管理器,雖然在其他東西的外面但是仍然會接收重要的諸如更新等功能的事件。

我最終就是要為單例寫一個模版基類。它會追蹤靜態實例,調用DontDestroyOnLoad等。在獲得實例的時候,它實際在後面做了如下的很多事情。

1. 盡量只返回實例

2. 盡量用FindObjectOfType來找到場景中的單例。

3. 使用對應類型名字的Resources.load來找到預製品。我是在AudioContoller上使用這種方式,因為我需要一個提前配置值的預製品。

4. 最後如果失敗,就創建一個新的遊戲對象,然後添加組件。

網路

最大的優點在於它有一個統一的網路結構。網路是緊密結合到腳本引擎中的,那樣程序員就可以像編寫單播放器腳本一樣編寫多播放器腳本,而不需要額外工作。

Unity的網路API工作起來不怎麼如人意。雖然增加或者刪除一個網路視圖不會對遊戲腳本產生影響,但是當存在單播放器和多播放器時,RPC和對象實例化就很難應付了。

我的解決方案就是寫一個網路管理器來實現很多有用的功能:

· 通過名字或者索引載入等級。當網路工作時,會自動咱提網路隊列的處理,當等級載入完畢後就可以通過固定一個回調函數

· 實例化對象。如果斷開,就使用通常先前的GameObject.Instantiate函數,否則就用NetWork.Instantiate來實例化對象。

· 消除對象。如果斷開,就使用GameObject.Destroy,否則使用Network.Destroy。

另外還需要為所有組件創建一個基類-GameBehavior。此類有封裝了一個關於networkView.RPC的封裝器,用來在沒連上伺服器時控制RPC。另外內置支持組件緩存和多態支持。

關於網路最後一點:另外需要寫幾個類來封裝網路特性。它們是:NetFloatProperty,NetVector2Property,NetVector3Property,NetVector4Property。每個類都可以從OnSerializeView讀取位流和調用netFloatWrapper.Add,然後在更新中可以調用netFloatWrapper.GetValue()來自動篡改進入的數據包。

音頻

Unity在音頻上還是比較弱的,因此別被主頁上的廣告忽悠了。可以說Unity的音頻腳本系統知識個骨架。基本上99.999%的遊戲都需要音頻通道或者音頻組系統。包括音樂,聲音,音效以及氣氛樂等給定聲音。但是Unity卻沒有此概念。根據以前有限的使用XNA的XACT工具我可以說在提示跟摘錄的聲音之間添加一個抽象層是很有必要的。當槍響時就可以播放槍響的提示。提示本身可以能有多種不同設置,例如音量,是否循環,是否隨機截取或者按照固定順序步進。它包括大量音效截取,每個部分都包括音效和相關設置。

知道上面的知識後,我準備使用類似概念來編寫自己的音頻系統。我的AudioController有大量AudioCategory。每個AudioCatego都有大量AudioItem。而每個AudioItem又有大量SubItem。因此如果我想播放SFX目錄里一個名為「Gunshot」的AudioItem,我可以如下調用:

AudioController.PlaySound( "SFX.Gunshot" ); //播放音效,自動回到起始處。

AudioController.PlaySound( "SFX.Gunshot", transform ); //從給定的轉換通道播放音效,會根據通道運行。

AudioController.PlaySound( "SFX.Gunshot", transform.position ); //從特定位置播放音效,而不是從特定位置移動。

另外如果我想播放一首Music目錄下的歌曲,我可以調用PlayMusic(「」)。歌曲也可能會有多個不同通道。如果音樂已經在播放,PlayMusic會自動繼續播放。

對於結果我感覺很滿意,當然需要設計更加友好並且高效。

輸入

不要誤解哦,我是喜歡Unity的輸入系統的。但是還是有很多需要改進的地方。對新手來說不可能用默認系統來配置遊戲的輸入。另一個問題就是很多設備沒法充分利用輸入系統。例如在移動設備上,需要自己編寫基於觸屏的輸入系統,因為Unity對於觸屏API的支持還不是很多。

而我要做的就是寫一個Gamepad類來提供標準的GetAxis/GetButton等映射Unity輸入的功能。同時也提供了一個輸入介面來便於編寫嵌入的輸入層。現在可以寫一個用於測試的Unity輸入層,主要面向移動遊戲的輸入層。當然如果面向OUYA,也可以為OUYA開發者寫一個輸入層工具。可以寫一個用於插口的輸入出來方便配置輸入,我的代碼都是調用,沒必要知道所有東西。直接通過Gamepad.GetAxis(「MoveX」)調用即可。

此外又添加了一個簡單但是很有幫助的功能:Gamepad.LockInput。平時基本都設置LockInput為true,這樣所有輸入都被鎖定。例如,如果有一個多播放器遊戲,播放器彈出菜單,此時無需暫停遊戲,也無需讓玩家在菜單彈出時還繼續玩遊戲。因此可以見到將LockInput設為true這樣播放器自動回在特定位置固定。

遊戲保存

我以前沒接觸過有遊戲保存功能的遊戲。但我覺得我需要一個,並且Untiy也沒有此功能,因此可以為遊戲本身寫一個簡單的遊戲保存功能。

主要想法:如果設置這樣的限制:所有需要保存的東西都保存在一個資源文件夾內,那就可以在載入遊戲的時候簡單的保存原來的內容路徑,然後初始化尼爾並還原到原來的狀態。

此時需要創建一個ISaveable介面,此介面有兩個功能:保存和載入。當保存遊戲時,會遍歷所有實現ISaveable的類來查看所有遊戲對象。這些內容都保存在一個獨立的列表中。對象序列化如下:

載入等級ID

序列化遊戲對象數量

[每個遊戲對象]

內容路徑

位置

循環

大小

ISerializable組件數量

[每個ISerializable]

GetType().Name

ISerializable.Save(Stream)

這樣在載入保存的遊戲時,通過Resource.Load載入等級和每個物體的實例化,設置位置、循環、大小,然後用GetCompone(保存名字)獲得每個ISerializable數據,強制轉為ISerializable,最後調用ISerializable的Load函數即可。

將上述都封裝在SaveManager類的多個功能函數里,每個函數功能如下:

GetSaveSlots() //獲取當前保存的遊戲文件,可以直接傳給LoadGame,並保存在PlayerPrefs里。

SaveGame(SaveID) //將遊戲保存到特定槽內。如果文件已經存在,將會重寫,否則會新建一個。

LoadGame(SaveID) //從特定保存槽載入遊戲。

DeleteGame(SaveID) //刪除給定的保存槽,文件和入口都會從PlayerRefs清除。

但是需要注意在Web播放器上是不會工作的,因為Web上需要大量使用諸如文件流等IO函數,但目前為止,在其他平台還是可以的。


ide:vs 推薦2015 功能全,各種好用反正就是 10、13都用過,還是15好用一點,mono也可以,不是很難用,畢竟自帶的編輯器

版本控制:svn+version Contrl asset store中有,後面這個主要是用來控制多人編輯場景的

後台:tmd 老子是跟後台干架的,目前JAVA,原來PHP,不非主流即可

插件:你愛用啥就用啥,多得很呢,啥也有,英文好的話可以翻牆去弄,不好的話,就乖乖的看中文的,主流的估計就是NGUI 、ITween這種了,現在unity支持的也很多,NGUI不如UGUI好用,嗯 就這樣


PS:你的描述完全忽略了美術和策劃環節。。。

版本管理,如果和美術策劃共用,可以使用svn,git雖然程序用很爽,但是不適合美術們。也可以使用perforce。

IDE無疑是vs,如果要開發網遊,多半會用到lua,vs有插件babelua。

server端看伺服器童鞋的喜好,如果是沒有基礎的人做,那就尷尬了。

Ai推薦插件 behaviac

如果之前沒什麼積累,可以試試這個框架ksframework。

KSFramework:Unity3D開發框架快速入門

uwa 和wetest也是不錯的網站,可以學到不少優化內容。


IDE:大部分情況下使用的是Visual Studio,在Windows平台下開發優勢還是很明顯的

版本控制:公司目前採用的是SVN,不過作為程序員Git還是要學的

伺服器:目前公司採用的是網易開源的分散式伺服器框架 Pomelo

插件:DOTween(動畫插件),T4M(地形製作),TexturePacker(紋理合併),Spine(2D骨骼動畫插件),Vision Timer(定時器插件),NGUI

第三方庫: Protobuf(Google開源的數據序列化庫,前端使用的是protobuf-net),SimpleJson


推薦閱讀:

Unity引擎編譯後的程序是如何運行在iOS和Android上的?
遊戲程序員入門應該從Unity3D或Cocos2dx開始,還是從OpenGL和DirectX開始?
DirectX和OpenGL如何抉擇?
unity3d里的Surface shader中的surf,LightingName,finalColor,到底屬於渲染管線的哪個階段?
「渲染地球」引擎實現的原理可能是什麼?

TAG:Unity遊戲引擎 |