1.先學(xué)C++胸囱,再學(xué)UE4:
我在學(xué)習(xí)UE4期間認(rèn)識了許多毫無編程經(jīng)驗的同學(xué)祷舀,或者一些只有一絲絲其他編程語言經(jīng)驗的同學(xué)。對于他們來說學(xué)習(xí)C/C++是一件非常不友好的事情烹笔,C/C++的變態(tài)程度在眾多編程語言當(dāng)中不說數(shù)一數(shù)二也算鶴立雞群裳扯。那么這樣導(dǎo)致一個什么結(jié)果呢?學(xué)起來很難谤职,甚至面向?qū)ο筮@四個字理解起來就已經(jīng)要絞盡腦汁了饰豺,更不要說金字塔頂端的指針和引用了!然而過段時間當(dāng)他們吭哧吭哧的學(xué)完C/C++的基礎(chǔ)知識允蜈,學(xué)會了使用語法冤吨、類蒿柳、對象、基本數(shù)據(jù)結(jié)構(gòu)漩蟆、邏輯控制垒探、大概明白了指針和引用,滿心歡喜的打開UE4模板工程的C++代碼后怠李,竟然發(fā)現(xiàn):
“這是我學(xué)過的C/C++嗎圾叼?為什么長得完全不一樣!”
為什么長得完全不一樣扔仓?當(dāng)他們學(xué)習(xí)C/C++的時候褐奥,實際上每次都是從一張白紙開始寫,自己定義頭文件翘簇、自己寫.cpp撬码、變量、函數(shù)什么都是自己來版保。相信所有所有編程初學(xué)者第一次用代碼在控制臺打出“Hello World”的時候都是賊興奮的呜笑,原來編程這么神奇,可以讓我控制電腦彻犁!他們也一樣叫胁,好不容易通過學(xué)習(xí)C/C++對編程有了一點興趣,但在通過UE4創(chuàng)建一個C++類的時候這些興趣就灰飛煙滅了汞幢。歸根結(jié)底是一個問題:
“虛幻是個用C/C++寫出來的游戲引擎”
什么是游戲引擎驼鹅?老聽說這那游戲是由虛幻4引擎打造,效果無敵森篷,畫面牛逼输钩。引擎?zhèn)z字聽著挺高大上啊,但翻譯成不太準(zhǔn)確大白話就是:“虛幻引擎是一大堆代碼仲智,里面有一大大大堆的函數(shù)买乃,有繪制圖案的,有控制邏輯的钓辆,還有別的亂七八糟的剪验。反正各種有的沒的虛幻引擎都給你寫好了,你按照自己的意思隨便用一用就能做出個游戲了前联」ζ荩”話里話外什么意思呢?虛幻引擎就是一個框架蛀恩,框架的好處是用著方便疫铜,壞處也顯而易見,你必須要守規(guī)矩双谆。說回到剛才的話題壳咕,為什么長得完全不一樣席揽?因為虛幻引擎的代碼有他自己的規(guī)矩!這就是為什么大家都用筆寫字谓厘,但是王羲之只有一個幌羞。
所以最痛苦的階段竟然不是從零開始學(xué)習(xí)C/C++,而是C/C++學(xué)的一知半解后再轉(zhuǎn)學(xué)虛幻C/C++竟稳。為了不同平臺的兼容性属桦,虛幻引擎已經(jīng)把C/C++完全魔改了。比如把C/C++里沒有的“對象”這個東西整出來了他爸,叫UObject聂宾。比如數(shù)據(jù)結(jié)構(gòu)也不用你糾結(jié)用vector還是list了,現(xiàn)在叫TArray诊笤∠敌常總而言之你是在別人搭好的地基上蓋樓,用的還都是別人提供好的材料讨跟。實際上學(xué)習(xí)的過程就是理解把這個引擎寫出來的那些人的腦子里到底在想什么的過程纪他,這個當(dāng)然不簡單了!
結(jié)論:
如果有比較好的面向?qū)ο缶幊袒A(chǔ)晾匠,比如Java茶袒,比如C#,甚至有其他游戲引擎的經(jīng)驗凉馆,那我覺得可以先學(xué)C++再學(xué)UE4薪寓,最起碼你可以很快的跳過Hello World這個階段,并且在第一次看到UE4源碼的時候有較大的生存幾率澜共。
2. 先學(xué)藍(lán)圖预愤,學(xué)不學(xué)C++看心情
程序員肯定是推動科技進(jìn)步的先鋒,其中懶這個特質(zhì)更是先鋒中的先鋒咳胃。藍(lán)圖是什么?要我說就是為了讓程序員少寫點代碼存在的旷太。以前沒有可視化編輯器的時候游戲是怎么開發(fā)的呢展懈?想象一下我想調(diào)整一個物體的位置或朝向我要一遍一遍的去代碼里改,害不害怕供璧?現(xiàn)在多腦殘啊存崖,編輯器里看一看,鼠標(biāo)拖一拖睡毒,搞定来惧!
實際上藍(lán)圖的功能已經(jīng)足夠強(qiáng)大了,如果你有時間去看一看虛幻官方的“內(nèi)容示例”項目就會和我發(fā)出一樣的感慨演顾。并且使用藍(lán)圖有他的先天優(yōu)勢:非常友好的編輯器界面和五顏六色的節(jié)點供搀,至少讓你在連來連去的時候不那么枯燥隅居,更重要的是能直觀的看到預(yù)覽效果。甚至有些部分例如材質(zhì)系統(tǒng)葛虐,動畫系統(tǒng)用藍(lán)圖調(diào)試是非常方便的胎源。
當(dāng)然,使用藍(lán)圖也有難以解決的問題屿脐,無論是虛幻編輯器本身存在的各式各樣的小BUG涕蚤,還是一些無法用藍(lán)圖訪問的屬性和函數(shù),都是藍(lán)圖開發(fā)者和程序開發(fā)者之間的鴻溝的诵。這個溝并不寬万栅,但是很深,掉下去再爬上來還是挺費勁的西疤。
其實有很多的項目是完全可以用純藍(lán)圖開發(fā)的 - 如果你對性能要求沒那么高的話烦粒,藍(lán)圖也能制作出足夠驚艷的畫面效果了。聽起來好像和C++完全沒關(guān)系了對吧瘪阁!那么藍(lán)圖的正確用法是什么呢撒遣?就像剛才講到的,程序員都很懶管跺,所以實際上藍(lán)圖是為設(shè)計師提供的义黎,只有藍(lán)圖和C++配合使用才能最大化開發(fā)效率。有些邏輯用代碼寫很快豁跑,用藍(lán)圖連線很麻煩廉涕,有些東西用藍(lán)圖調(diào)很方便,用代碼調(diào)會要命艇拍,同時虛幻引擎為代碼和藍(lán)圖的通訊提供了非常好的支持狐蜕,這兩樣?xùn)|西是可以無縫結(jié)合在一起的。
所以為什么說藍(lán)圖能讓程序員少寫點代碼這句話現(xiàn)在就可以理解了卸夕,我把核心用代碼封裝好层释,暴露給藍(lán)圖一個接口,設(shè)計師負(fù)責(zé)在合適的時候調(diào)用這個接口快集,代碼負(fù)責(zé)執(zhí)行并且返回結(jié)果就行了贡羔。更形象一點,代碼更像是樂高中的各種積木个初,方的乖寒,圓的,長的院溺,短的楣嘁,藍(lán)圖更像是把這些積木組合成一輛車或一艘船。
結(jié)論:
如果你對代碼一竅不通,或者是初學(xué)游戲的新手逐虚,可以從學(xué)習(xí)藍(lán)圖開始聋溜。雖然藍(lán)圖編輯器的界面看起來非常復(fù)雜,但是其實用很少的部分就能做出一個比較完整的演示作品痊班。
3. 你還是逃不過C++
非常不幸勤婚,你最終還是逃不過C++的魔爪。藍(lán)圖再厲害涤伐,它也是腳本生成的馒胆,最終還是要回歸到本質(zhì)凝果,那就是代碼祝迂。藍(lán)圖有的東西器净,代碼里都有,反過來可就不一定了山害。而且纠俭,想要深入的了解引擎的世界觀和工作原理,藍(lán)圖可是無法告訴你這些東西的浪慌。所以,少年权纤,和我一起努力吧会宪!
不過好消息是伴澄,如果你藍(lán)圖玩的足夠溜,代碼還是不那么那么難看懂的奕短。
一個虛幻引擎彩筆的心路歷程[0]