![]()
【USparkle專欄】如果你深懷絕技,愛“搞點研究”,樂于分享也博采眾長,我們期待你的加入,讓智慧的火花碰撞交織,讓知識的傳遞生生不息!
這是侑虎科技第1946篇文章,感謝作者放牛的星星供稿。歡迎轉發分享,未經作者授權請勿轉載。如果您有任何獨到的見解或者發現也歡迎聯系我們,一起探討。(QQ群:793972859)
作者主頁:
https://www.zhihu.com/people/niuxingxing
Lyra項目,被譽為UE5的官方教學示例,實際上卻遠超初學者的難度。官方定義為初學者游戲,但真正掌握它,卻需要較深的技術背景和至少200小時的UE開發經驗。
視頻地址:
【Inside Lyra】之我要學UE
www.bilibili.com/video/BV1EKhxzPEyg/?vd_source=fa2a10f47539794ce46f6bebaf15680f
引言
Lyra項目,是伴隨著UE5一起發布的官方教學的示例項目,全稱是Lyra Starter Game。官方定義為初學者游戲。
![]()
但學過的人都知道,這個示例項目遠遠超出了初學者的難度。簡單來說,如果自學Lyra的話,你至少需要掌握以下條件:
1. 熟練掌握UE特化C++編程。這就表示,你需要在熟練掌握普通C++的基礎上,額外掌握Unreal為C++做的特性化封裝,比如:以UHT(Unreal Header Tool)為代表的反射系統,以UObject為代表的UE對象系統,以TSharedPtr等為代表的智能指針和垃圾回收系統。
2. 熟練掌握UE編輯器與核心框架。這表示,你需要能夠熟練使用UE的編輯器,至少能知道絕大多數功能的入口,以及常用功能的位置和使用方法。在展示某個窗口的時候,你應該知道它是如何打開的,以及它包含哪些操作和信息。掌握核心框架則代表,你了解UE的模塊化構建和依賴規則,了解事件委托機制和用法,了解UE的資產序列化與引用,了解常用的UE容器,以及核心的Gameplay框架等等。
除此之外,還希望你擁有至少2年的編程經驗,或者至少1年左右的游戲開發經驗。這表示,你應該能秒懂某些約定俗成的知識點,比如單例和工廠,廣播和分發,會話和鑒權,緩存與熱修等等。
低于上面這個門檻的同學,自學Lyra就如同在啃天書一樣。并且從經驗上來說,200小時的UE開發經驗是達到高效學習Lyra的臨界值,低于此時長的開發者自學Lyra的放棄率高達 90%。
但可以這么說,如果你能基本看懂并理解Lyra的所有代碼,那么月薪2W是簡簡單單的。如果你能熟練掌握和使用所有的Lyra代碼,做個主程也是隨隨便便的。
本文就是幫大家剖析一下Lyra這個項目,減少自學的挫敗感,希望能夠盡快掌握這個“工業級”入門游戲,提高自己的游戲開發水平。所以,我將這個系列定義為Inside Lyra。
在開始之前,再次強調一下,本文不是0基礎,不會講解諸如編輯器有幾個面板,藍圖有幾種類型,用TArray等容器寫一個用于排序的Lamba表達式之類的基礎知識。而是,盡量為大家深入淺出的去剖析,整個Lyra項目的運作流程,以及各個工業級框架和組件之間的協同關系等。
本文的目標是,能正常打開UE編輯器并運行Lyra就成功。
一、為什么是UE?
由于本文的目標非常簡單,在開始之前我們還是先說明幾個前置話題。
我擁有10多年Unity開發經驗,過去也一直是在做Unity引擎相關的教程,那么這次為什么選擇Unreal的項目做教程呢?從程序的角度來分析一下,主要有以下幾點:
1.引擎源碼開放。
這一點對技術開發來說非常重要,非常非常重要。雖然引擎源碼會大幅增加項目開發時的復雜度,從而導致學習和開發效率的銳減,但一旦你邁過這個門檻,從學習者變為熟練使用者之后,你才知道引擎源碼對于開發者來說是多么提高效率的事情。你無需再盲猜每個功能背后的實現思路,你可以隨意修改引擎源碼完成特殊功能的適配,你可以隨時斷點來調試某個功能的調用順序,你可以自己修復引擎版本自帶的BUG,你甚至可以直接Copy引擎模塊代碼來實現一個比較接近的功能,等等。雖然我自己也能接觸到其他引擎的源碼,但絕大部分的開發同學是沒有這個條件的。因此選擇一個提供源碼的引擎,對于開發者而言,會得到前所未有的控制力與安全感。
2. 預置Gameplay框架。
從這一點上來說,我個人覺得是有利有弊的。如果大家接觸過其他引擎就會知道,大部分引擎在開發項目的時候,是可以自由地定制項目的啟動入口的,并且啟動的流程也可以完全自定義。但是UE不是,它提供一套自己的Gameplay框架,開發者必須完全理解這套機制,并且在這個基礎上穿插去做自己的定制流程。很難說這兩種方式,誰更好。自由度高意味著,復用性低。而自由度低則意味著,可以舉一反三。
也可以這么認為,當你理解了一個UE項目的啟動流程之后,你就可以快速上手任何一個UE項目。但相比于可自由定制的項目來說,這增加了初學者的學習門檻,也是學習UE會卡關的主要問題。在其他引擎上,你花20個小時可能已經做出一個有點意思的小游戲了,而在UE上,20個小時可能連Gameplay框架還沒學完。但總結來說:用短期學習成本換取長期團隊協作效率與項目可維護性的指數級提升,是非常有必要的,因為你不可能一直是一個人在戰斗。
3. 強大完整的服務器。
UE采用的是服務器同構設計,同構設計代表的是服務器邏輯和客戶端邏輯是同一套代碼。也就是說服務器可以完全復用所有為該項目實現的框架和代碼。以基于Actor級別的同步能力,和可靠的同步機制,讓開發者完全不需要關心通信。使絕大多數的異常可鎖定在游戲邏輯層,而無需反復排查底層同步機制,減少開發者在定位問題上的嘗試,提高開發和調試效率。同時,也可以任意部署在本地或者直接用編輯器充當服務器來調試相關邏輯。但缺點也是有的,因為自己又當客戶端,又當服務器,難免會在系統在開發的時候發生“精神分裂”,因為你要時刻切換自己的身份,思考某句代碼是執行在權威服務器上,還是在本地客戶端上。
4. 完整的無縫大世界方案。
無縫大世界,可以說是次世代開放世界游戲的標配了。在其他引擎中完成這個方案的代價非常高,而在UE中,只需在創建地圖時,簡單勾選幾個選項,即可激活基礎框架,配合Data Layers可快速實現晝夜/環境破壞等動態效果。這可以讓開發者的精力從實現無縫大世界本身解放出來,全力投入內容創作與玩法設計上。
5. 影視級的動畫系統。
內置Control Rig+Motion Matching等工業流水線,搭配IK/FK重定向的工具鏈,讓中小團隊也能產出3A級動畫的絲滑表現。
6. 完善的編程規范和命名規范。
UE為所有代碼和資產提供了一套命名規則,所有開發人員需要共同遵守,甚至部分規則如果不遵守還會強制報編譯錯誤,因為代碼可讀性、可維護性是一個團隊高效協作的利器。
7. 藍圖。
是一把威力與風險并存的雙刃劍。無需代碼,策劃/美術也能快速搭原型、配置數據,對UE新手友好。但從開發效率上和邏輯可讀性上來說,遠遠落后于C++。當哪天你突然意識到藍圖實現某個功能很麻煩的時候,那么恭喜你,你現在是個程序員了。
8. 多線程安全。
在UE中,你可以通過Task Graph和AsyncTask提供高層抽象,在規范使用下大幅降低死鎖/競態風險。傻瓜式的封裝,可以讓你隨意指定線程池(游戲/渲染/后臺)來干活,完成后用委托(Delegate)再回調到Game線程去處理(非線程安全操作必須回主線程!)。
以上并不是全部的UE優勢,UE最大的優勢其實是他們每個版本都提供最前沿的技術,供開發者學習和了解,并且非常慷慨地給出所有資源和示例代碼。甚至官網的文檔都遠遠落后于代碼的更新速度。
所以綜合而言,選擇UE,其實是選擇一艘擁有核動力引擎的工業巨輪。啟航雖慢(學習曲線陡),轉向笨拙(框架約束),但其源碼級的掌控力、成熟的Gameplay框架、高效的同構Server、革命性的大世界/動畫方案、規范的代碼環境、靈活的代碼/藍圖模式、強悍的并發異步工具鏈等能力,讓你在開發3A級巨制或大型多人游戲的驚濤駭浪中,擁有無與倫比的穩定性、生產力與技術上限。它逼你成長為“正規軍”,過程雖讓人頭禿,但學成之日,你便是戰場上的“王牌艦長”!
所以,就你了,Unreal,啟動!
二、為什么是Lyra?
Lyra一直以來被當做UE官方的“初學者示例”,其實是存在認知錯位的。它本質是Epic用來展示UE5工業級開發范式的技術演示,而非真正的零基礎教程。它是一個完整的項目,包含各種頂級的框架設計和UE5最新的引擎特性。比如:
1. 它有約15萬行的代碼和200+個藍圖,規模遠超獨立小游戲的標準。
2. 多層抽象的基礎框架,GameFeature + Experience+HotFix,再加客戶端和服務器一體化的設計,復雜度非常高,需先熟練掌握插件系統/模塊化設計。
3. 核心機制代碼分散,學習難度高。被拆分為20+個獨立的插件,對于能力復用和組合有較好的支持度。
4. 使用數據驅動設計,一個簡單的角色屬性的修改,可能就要跨越數個配置文件。而非簡單修改一個值。
一個典型的場景就是:
設計一個簡單的復活隊友的技能可能就要穿透至少5層:LyraHeroComponent → AbilitySystem → GameplayCue → 客戶端預測 → 服務器RPC驗證。
那么為什么Epic仍堅持推廣Lyra呢?說些個人不負責任的猜想:
1.技術展示。
強制開發者接觸UE5前沿特性(如World Partition/MetaSounds, 等優秀能力)。
2.生態綁定。
使用Lyra等于深度依賴Epic后端服務(如EOS好友,排名,成就等系統)。
3.開發者篩選。
用高復雜度來過濾非目標用戶(3A/多人游戲團隊)。
一個不負責任的數據顯示,某個國外課程的后臺數據表明,僅12%的UE自學者在Lyra項目上堅持超2周。
那么,最后回答一下,我們為什么要學習Lyra呢?我的答案是:
1. 從技術提升角度來看,Lyra涵蓋了UE5眾多前沿且復雜的技術特性和架構設計。學習Lyra能夠幫助開發者深入理解UE5的高級功能和工業級開發范式,掌握插件系統、模塊化設計、數據驅動開發等關鍵技術,這些技術在大型游戲開發和復雜項目中具有極高的實用價值。例如,掌握了Lyra的架構設計思路,開發者在面對其他大型項目時,能夠更高效地進行系統架構和模塊劃分。
2. 從職業發展角度考慮,由于Lyra的學習難度較大,成功掌握它意味著開發者具備較強的技術學習能力和解決復雜問題的能力。正如前面調查數據所示,掌握Lyra的開發者在求職大公司和大型項目工作室時具有顯著優勢,能夠獲得更多的職業機會和更好的職業發展前景。
3. 從行業趨勢來看,隨著游戲行業的發展,對游戲的品質和規模要求越來越高,UE5的工業級開發范式將逐漸成為行業主流。學習Lyra可以讓開發者提前適應行業發展趨勢,緊跟技術前沿,在未來的職業競爭中占據有利地位。
其實,大家也可從B站或者知乎上搜索Lyra相關的關鍵詞,可以看到對一個子模塊的講解都可以作為一個技術大會的分享主題,也就證明了Lyra的含金量。再一個是,就目前來看,絕大部分UE5的項目,不管是什么類型的,都會或多或少參考Lyra的框架設計。比如,Lyra中完整實現了編輯器擴展,客戶端和服務器交互和分離,構建多平臺等能力,這些是無論做什么類型的游戲都有參考價值的。
![]()
三、教程形式
傳統教程像在組裝樂高說明書—— 先逼你認遍所有“零件”,比如從UObject到Actor再到Component等,按照UE的復雜度來看,可能20小時后還在學基礎概念。而那種技術大會分享更不用說,簡直就是“量子速讀現場” —— 滿屏架構圖咻咻亂飛,一張PPT涉及的知識點可能比他的頭發還多。每章的知識點過的還非常快,來不及截圖不說,截了也看不懂。
對于Lyra這種工業級的架構和業務來說,這兩種就更不合適了,講個GameState要先科普一個小時的UObject,這誰受得了呢?有可能你講完Gameplay框架,UE都更新兩個版本了。
而如果分模塊擊破也不靠譜,Lyra的核心代碼分散在20多個核心的Plugin中,如果要按模塊講解,要就要把UE的插件-模塊化的結構先講清楚,再講明白Lyra拆分插件的思路和優劣勢,這也是耗時且性價比不高的事情。
所以真要按照傳統線性的教學方式來的話,挫敗感會很強,棄坑率也絕對會非常高。
而我這次的思路,會偏向于先上路再慢慢修正。也就是直接從Lyra運行的核心代碼開始,按照順序,代碼執行到哪我們就拆解到哪。這樣的好處就是,每一個介紹的代碼你都知道它在當前運行時候是有用的。雖然壞處是會將知識點分散到多節課中,但每節課學到的就是項目當前在用的,知識點不浮空。
最后呢,本文還是以大家能看懂為主,在能看懂的基礎上再去局部修改和替換小模塊來驗證自己的理解,以此為迭代才能真正的掌握。比如一個UI界面,當你看懂之后,可以先嘗試修改上面的一個文字,然后添加或者修改一個自己導入的圖片,或者直接加載一個自己寫的UI等等。循序漸進地理解才能真正掌握。
四、環境準備
本次使用UE最新的版本,也就是5.6版本進行。請嚴格按照下面的步驟配置你的開發環境。
UE 5.6的下載和安裝
1. 安裝Epic Games啟動器。
https://www.unrealengine.com/zh-CN/download
![]()
下載完成之后,像普通程序一樣,雙擊安裝。由于要額外下載內容,所以需要等待一會兒,也可以通過觀看右邊官方提供的安裝視頻進行安裝。
![]()
UE引擎官方版本的安裝只有這一個辦法,當然當你有一定經驗之后,可以到GitHub上下載引擎源碼自己編譯生成引擎也是可以的。
如果你有時間和話,也可以閱讀官方提供的安裝文檔進行引擎安裝:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/install-unreal-engine
如果你打開網頁是英文的話,可以在這里切換語言:
![]()
啟動器下載完成之后,需要登錄才能正常使用。未登錄狀態下,運行啟動器的界面是這樣的,需要自行注冊Epic賬號進行登錄,這一步就留給大家自行完成。
![]()
當你登錄之后,看到的界面是這樣的。
![]()
![]()
其中右邊有三個頁簽,商城、庫和虛幻引擎。前兩個就跟Steam平臺一樣,展示的是作為游戲平臺的內容,庫則是你已經擁有的游戲。友情提示,Epic平臺每周可以免費領取1~2款游戲,重大活動時候免費送大型游戲,可以保持關注。
然后我們要看的其實是第三個頁簽,也就是關于虛幻引擎的部分,點開頁簽后長這樣。
![]()
這個頁簽下會發布很多UE引擎的動態和新聞。頂上的一排子標簽的作用分別是:
News:熱點資訊。
示例:UE官方發布的各種技術演示工程,基本上都是完整可以運行的部分。
Fab:是EPIC多個資產商城的合集,可以下載大量的三方插件、代碼和資產之類的。不過它需要在單獨的頁面打開才能看,啟動器里只是一個跳轉入口。你甚至可以在這里下載Unity的插件和資產。
庫:這個頁簽是引擎相關的管理頁簽。在這里可以下載新的引擎版本,和管理已經下載的引擎版本,比如我這里就已經下載好了5.6版本的引擎。
![]()
![]()
![]()
![]()
當你有已經安裝好的引擎的時候,在右上角就會提示可以直接啟動引擎,這是引擎啟動的方式之一。當然如果安裝了多個版本的話,右上角也可以切換版本。
![]()
![]()
如果沒有引擎或者想要下載引擎,點擊左邊的“+”號,可以選擇要下載的引擎版本。
![]()
選好引擎版本之后,點擊安裝就會彈出安裝的一些選項,包括位置和選項。選項這里可以選擇額外支持的部署平臺,一般我們加上安卓和iOS就可以了。還有一個是調試符號,一般是用來調試引擎的,新手的話可以不管,這個要多增加幾十G的空間。
![]()
![]()
都選好之后,點擊安裝,然后等待安裝完成即可。
若要刪除引擎,只要把鼠標移入標簽卡里,就會出現卸載按鈕,點擊即可卸載。
![]()
VS的下載和安裝
當引擎安裝完畢之后,桌面上就會出現圖標,同時右上角也會出現啟動引擎的按鈕。無論點擊哪個都會打開引擎的預啟動界面。第一次啟動的時候,時間會很久,因為它要編譯引擎啟動所需要的材質,界面上會有進度和數量顯示,需要耐心等待。
打開之后,這個界面長這樣,主要是跟隨引擎一起的模板、示例這些。然后可以管理和新建項目。
![]()
比如我要新建一個第三人稱的示例項目就可以通過點擊右側Games標簽來完成。
![]()
到這里就需要注意了,如果你是新手還不懂代碼,只想用藍圖的話,現在就已經可以開工了。但是如果藍圖不能滿足或者未來不能滿足你的要求,就必須切換成 C++的版本。由于C++是代碼,就必須要安裝對應的編譯環境才可以工作。這是UE附加的必要條件,只要你用代碼,就必須要安裝。一般我們是安裝Visual Studio 2022的社區版本。因為它是免費的。
也可以手動去這里下載安裝:
https://visualstudio.microsoft.com/zh-hans/vs/community/
另外當你切換任意一個示例到C++版本的時候,如果本地沒有代碼環境,那么會有一個黃字提示需要安裝VS 2022,點擊也會自動幫你下載。
![]()
安裝VS的技巧可以參考官網,一些必要的組件需要勾選:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine
![]()
一些SDK版本,盡量選最新的。當然選多個也沒問題,就是多占點空間而已。
當VS安裝完成之后,UE開發必要的組件就已經準備好了。接下來我們就可以運行項目了。
Lyra示例工程的下載和安裝
Lyra示例工程需要到Fab上先訂閱,再在Epic啟動器里下載。
Fab上直接搜索Lyra,找到圖示的這個項目,點開之后加入到庫里。點擊在啟動器查看,或者直接在啟動器里搜索Lyra。
![]()
![]()
注意,這個庫是引擎標簽的庫,不是最外層的游戲庫。找到之后,點擊創建,設置好目錄,等待下載完成就可以了。
![]()
![]()
到這里Lyra的工程也就準備完成了。到設定的安裝目錄下就可以看到工程信息了。
![]()
由于Lyra是一個C++工程,在運行之前,必須要先編譯才行。右鍵uproject文件,執行代碼工程的生成,完成之后會有一個.sln的文件出現,代表生成成功。
![]()
這個時候雙擊Lyra,就可以打開Lyra工程了。當然,由于Lyra工程引入了大量新的材質,所以第一次啟動也是會編譯較長時間,請耐心等待,編譯后會自動打開編輯器界面。
![]()
到這里,本文的目標就已經達成了。
后面這個點是我個人推薦的開發經驗,并且我之后也都是會使用這個軟件進行代碼更新的。推薦大家繼續看完,否則可能會影響后續課程的一些理解。因為不同IDE軟件的操作和顯示是不一樣的。
Rider的下載和安裝
Visual Studio是基礎,但Rider專為UE深度優化,提供更智能的代碼補全(理解UCLASS, UFUNCTION等)、更便捷的藍圖/C++互跳、更強大的反射信息查看、更直觀的調試體驗,以及更友好的項目結構管理。它能顯著提升閱讀和理解引擎和Lyra龐大代碼庫的效率。
訪問以下地址下載Rider for Unreal Engine安裝包。運行安裝程序,按提示完成安裝即可:
https://www.jetbrains.com/lp/rider-unreal/
Rider是一個付費軟件,但個人非商業許可是免費的。第一次啟動Rider的時候,會提示你選擇許可。關聯許可之后就可以正常使用Rider了。
在打開Lyra項目之前,推薦先下載一下這個插件,可以更好地關聯UE:
![]()
不手動安裝其實也行,Rider在檢查項目完成之后,會提示你是否安裝,他會有兩個選擇,一個是安裝在引擎目錄下,一個是安裝在項目目錄下。建議大家安裝在引擎目錄下,這樣在創建其他項目的時候就不用再次安裝了。
![]()
前面我們用雙擊uproject的方式打開編輯器,但作為程序員,你應該用IDE的方式打開編輯器。也很簡單,用Rider打開它即可。
![]()
打開后,界面長這樣,右上角兩個按鈕一個是正常啟動,一個是調試模式。選擇任何一個都可以。點擊啟動之后會先檢查代碼有沒有編譯,沒有的話會先編譯。編譯好之后就會直接啟動編輯器,效果跟雙擊uproject打開是一樣的,但不一樣的是調試模式就可以斷點調試相關代碼和邏輯。
![]()
那么到此,本文的內容就全部結束了。
文末,再次感謝放牛的星星 的分享, 作者主頁:https://www.zhihu.com/people/niuxingxing, 如果您有任何獨到的見解或者發現也歡迎聯系我們,一起探討。(QQ群: 793972859 )。
近期精彩回顧
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.