用Unity引擎開發遊戲,如何提升編程能力?

本人實習生一枚,越發的感覺編程能力不足,寫的代碼大多都是一些簡單的語法,重載,繼承,多態,抽象,介面,委託什麼的 只在書本里學過,工作的時候幾乎沒用到過。不知道該如何提升。


敲夠10w 行代碼。C#的。

無論是自己寫,或者是照著書打。

如果直接搞原創遊戲,提升更快。但不是人人都有搞原創的能力。

自己把握吧~


你提及的所謂高級的語法、語義,更多是為了解耦和拓展性,只在基礎框架層設計時比較側重的,但是一般不可能讓新人參與設計框架結構方面的東西,所以他們對新人的直接影響不大。

新人的問題在於,不知道什麼是常識、常規問題,以及能否理解透常識、解決好常規問題。

這對什麼語言都是一樣滴...


題主感覺自己理論不足,影響到了工作,那就說明自己真的欠下太多知識了。說白了這些問題都和 Unity 無關,題主關心的其實都是如何提升編程功力的問題。可惜沒有速成的方法,因為任何速成的理論,只能滿足你一時的工作需要,過一段時間你又會發現自己遇到瓶頸,效率低下。趁著題主剛畢業,我建議這樣入門。

  • 題主剛畢業,對所有東西都一知半解,這時多看書是首要的,利用晚上睡前或周末,至少每個月要過一本。只要跟程序有關,跟C#有關,跟遊戲有關,都應該看。

  • 此外,能加班盡量加班,最好每周上 10 * 6 或 12 * 5 小時。通過不斷的寫代碼,練就紮實的開發技巧。同時可以深入學習前人的經驗,學習大型項目常見的坑,這樣才能對軟體工程有切身體會。

  • 當發現加班已經學不到新東西時,你已經完全勝任程序員了,對公司項目也有了很深刻的理解。這時可以用加班時間勇敢的優化你覺得不合理的代碼,提高執行效率、魯棒性、靈活性。你肯定會搞砸,會狼狽,沒關係,這些都是必經之路。

你可能需要打過幾份工,經歷過幾個項目,用三年時間,才能做完上面這些事情。相信到了那時,你已經具備了強大的自學和獨立思考能力,能夠解決工作中遇到的大部分問題。如果你堅持看了三年書,還搞不懂題目說的重載、委託、繼承等問題,那建議你轉行。


這個世界上沒有比遊戲開發更需要熟練掌握「面向對象」編程各種技巧的開發活動了,居然有那麼多人支持「一招鮮」的答案,我算是明白為什麼國內的遊戲開發能力死活上不去了。對於此題里的答案我只想說呵呵。

我只想說我的「高級」編程技能都是在做遊戲開發的時候學習的,因為做普通的商業開發根本不需要,而遊戲開發則實實在在地考驗著你的技術。掌握的開發技能的數量就彷彿是你做料理時可以使用的素材的數量,一招鮮就算膩不死你自己,也會把你的玩家膩死。

所以你們這些懶人就不要誤人子弟了好么。

歡迎噴我反正我不看。

真男人不匿。


多寫就行,熟練工而已,當你代碼寫的多一點的時候,你就會發現 重載 繼承 多態 抽象 介面 委託 都是紙老虎。

在使用的時候毫無技術含量可言。


我在還不會重載,繼承,多態,抽象,介面,委託什麼的時候, 就只會用 struct + point (換成 C# 就是 class + reference ). 然後吧, 我就只會這招, 所以就一招鮮地闖江湖, 差不多就是笑傲江湖裡那個令狐沖的玩法. 然後我發現這樣居然可以解決大部分問題, 而且很幸運, 入行3年里公司丟給我解決的問題都沒有重複過. 所以比別人知道的少, 卻比別人寫的代碼多很多, 解決的實際問題也多很多, 然後養成了獨立思考和隨手用代碼寫問題解決方法的習慣.

回顧了一下, 我大概用一招鮮的方法寫了: 一套 Vim 的插件, 一個波浪模擬的特效, Check Point 存儲, Motion Builder 的插件工具, 一些植物自然生長的模擬代碼, 各種 Procedural Texture (Perlin Noise, Celluar, ...), Camera 追蹤, 一堆 gl/directx 的函數 wrap, 一些 C 的 Serialize 方法, 一些 shader 特效, 一些測試 gpu profile 的代碼... 反正是又傻又天真的時期, 但是年輕就是資本, 你就是比別人有時間去瞎玩編程.

說白了, 你不知道那些東西完全不要緊, 一招鮮夠用了, 拿起問題就用一招鮮的方法去寫, 寫多了代碼你自然會去思考有沒有更好的方法, 然後去看看理論, 不懂就算了, 悟性不夠何必強求, 悟性到了無師自通.

============== 附錄: 且看令狐沖怎麼玩 :D ===============

練了一會,順手使出一劍,竟是本門劍法的「有鳳來儀」。他一呆之下,搖頭苦笑,自言自語:「錯了!」跟著又練,過不多時,順手一劍,又是「有鳳來儀」,不禁發惱,尋思:「我只因本門劍法練得純熟,在心中已印得根深蒂固,使劍時稍一滑溜,便將練熟了的本門劍招夾了進去,卻不是獨孤劍法了。」突然間心念一閃,心道:「太師叔叫我使劍時須當心無所滯,順其自然,那麼使本門劍法,有何不可?甚至便將衡山、泰山諸派劍法、魔教十長老的武功夾在其中,又有何不可?倘若硬要劃分,某種劍法可使,某種劍法不可使,那便是有所拘泥了。」此後便即任意發招,倘若順手,便將本門劍法、以及石壁上種種招數摻雜其中,頓覺樂趣無窮。但五嶽劍派的劍法固然各不相同,魔教十長老更似出自六七個不同門派,要將這許多不同路子的武學融為一體,幾乎絕不可能。他練了良久,始終無法融合,忽想:「融不成一起,那又如何?又何必強求?」當下再也不去分辨是甚麼招式,一經想到,便隨心所欲的混入獨孤九劍之中,但使來使去,總是那一招「有鳳來儀」使得最多。又使一陣,隨手一劍,又是一招「有鳳來儀」,心念一動:「要是小師妹見到我將這招『有鳳來儀』如此使法,不知會說甚麼?」


沒用過Unity、編程能力一般、冒昧答此題:

我的建議是「試著實現幾個引擎沒有的功能」或者「試著寫一個小引擎」

真的、我不是在開玩笑、

因為引擎這種東西基本上都是高度集成的、基本上調用幾個API、重載幾個函數就能實現複雜的特效了。但是你卻不知道背後的原理是什麼、

我在看irrlicht的Demo代碼的時候、覺得、我艹、好屌、百來行代碼就能完成這麼多功能、一看源代碼。。。好么、類聲明文件我都有點暈、更不要說實現了

So、「試著寫一個小引擎」是難度最大也是提升的最快方法了、

你可能不僅要明白GPU原理、3D圖形學、甚至這個變數名為什麼要這樣取

等你寫得越來越多、原來的結構已經混亂的時候、對、你需要重構、這時候你就要用到

重載,繼承,多態,抽象,介面,委託什麼的

以上、祝好


參與一個項目,能承擔一點功能的話,學到的就要消化很久了。我C#寫的也不多,主要是看有經驗的人怎麼寫,怎麼架構,怎麼寫方法的。經歷一兩個項目就好很多了


同樣是一名unity程序員。

確實,每天的任務都差不都,也都可以用差不多的方法解決。

可慢慢的會發現,為什麼策劃稍有需求的改變我就要改動很多代碼,為什麼只是改變簡單的功能,我要改好多相關的地方,為什麼代碼維護如此吃力,為什麼有時候界面會卡頓,有些地方總要寫些類似或者重複方法。。。

這時候我就去考慮如何重構我的代碼,盡量去解耦合,優化代碼,提煉代碼的結構,提高UI的效率等等。

出發點很簡單,我不想總是干一些辛苦活去迎合需求的變化。看到之前雜亂的代碼我很不爽!

什麼時候需要重構代碼呢?目前對我來說有兩點:一個是文件太長,我看起來很費勁。寫點什麼找起來很不方便。(二三百行?好爽~五六百?easy~hold住。八九百?額。。上千?!!簡直就是天書,我不想看&>_當然啦,如果有機會為大家設計公共的方法啊介面啊什麼的,就更好了唄,你得把問題想的很全面,方便有不同需求的人都能方便的用你的代碼~

那麼要干這些工作,自然而然的我們就要用到面相對象的知識嘍。委託啊,繼承啊,多態啊,什麼什麼啊不就順帶手用上了么~

可是作為工作不到一年的新手,眼界也就這麼寬,問題也就思考到這一層了。終究感覺自己見識太少了,好多問題遇到以後會不知所措T_T。還是希望有經驗的的前輩們能多給些建議,指導什麼的。萬分感謝啦~


這樓里居然有人說重載,繼承,多態,抽象,介面,委託不重要 我也真是醉了


其實我覺得直接問後半句就可以了

樓主這樣問的話我會理解為:怎樣提高在unity中通過編程實現你所想要的功能的能力

這樣看來有點像是想提高對uniy的熟悉程度了

雖然是新手,也厚著臉皮分享下經驗吧:

  • 引擎這東西封裝好了一堆API給咱們用,那就先單純知道每個API怎麼用再說!就當他們是透明的!不管他們內部怎麼實現的!先熟悉那些最常用的,之後的項目肯定會遇到你當前了解的API滿足不了的功能,然後你就會自發的找一些能夠滿足要求的。最簡單的,你寫個移動腳本,tranform.Translate穿牆了怎麼辦啊?然後你就發現了rigidbody.moveposition;老是用Time.time計時太麻煩,然後就發現了Invoke()。 關鍵還是要勤查勤寫勤調用
  • 專註於將某個功能實現的盡量完美!API像是樂高積木的一個個小塊,你會用了就能蓋房子(寫項目)了,但蓋出什麼樣的來就要看你是不是心靈手巧(邏輯處理得好)了。每次寫完之後(動手前最好別天馬行空,目的還是先實現)最好都要想想我還有什麼地方能改良一下,你寫個攻擊腳本,你在主角手上放個觸發器,碰到敵人然後敵人受到攻擊了,功能完成了,但覺得這樣又麻煩又耗資源,然後你就發現了在動畫中插個Event更划算,同樣可以實現攻擊效果,然後你把攻擊力、方向判斷啥的都寫進去了感覺不錯,然後你覺得把這些判斷放到敵人的腳本里,在主角的腳本里直接調用更方便。總之每一次這種經歷都是能加深碼代碼時對邏輯理解的。 關鍵還是要勤查勤寫勤思考

先寫這些吧,新手的拙見,期末了一堆亂七八糟的要交呢


天天寫代碼。

git提交代碼。

讓大家監督。

好的程序員:是敲出來的。


高級編程,與引擎無關.


看到委託,應該是c#


從一切可能的地方去領會設計的思想,思想無關語言,無關平台,是相通的

去閱讀、學習、研究一切可能能接觸到的優秀代碼,可能是公司里其他同事搭建的代碼框架,可能是一個優秀開源框架的源碼,去發現裡邊好的,閃光的設計,並且,一定要知道為什麼

如果想了解設計模式,想了解面向對象的設計思想,完全可以從大框架API的設計開始,比如.net framework, 比如java庫,嘗試去思考他們的類結構為什麼這樣組織,API介面為什麼這樣分布、這樣設計


不用永遠不會


如果一門編程語言重載,繼承,多態,抽象,介面,委託什麼都沒有, 那這門語言一定叫彙編.

開個玩笑, 以上不是針對題主的. 其它答案不要誤導題主. (我每周寫的代碼中至少有用到了上面的某一個特性 )

因為你現在是實習, 而且可能是大公司, 每天做些瑣碎的工作(個人猜測)

如果你想提升, 在工作中是不可能了. 那就自己做做練習題吧.


這是面向對象的基礎知識,主要是為了在開發中規範代碼和提升效率,和遊戲開發什麼的關係不大


推薦閱讀:

Unity開發怎麼優化大量物體的物理碰撞而產生的FPS等參數急劇下降?
一個重新排列的演算法,如何計算每種排列的概率?
Unity遊戲編程中如何避免runtime動態alloc內存?
如何在Unity中預覽尋路的結果?
如何在Unity中對程序進行 Android 真機斷點調試?

TAG:編程語言 | 遊戲開發 | Unity遊戲引擎 |