教程丨利用Egret Pro開發3D跑酷遊戲

2021-02-26 白鷺引擎
本教程帶領大家從零開始開發一款完整的3D跑酷遊戲,主要面向讀者是有一定Egret2D開發經驗的小夥伴,手把手教你學習EgretPro開發,快速開啟您的EgretPro開發之旅。

遊戲製作

工欲善其事必先利其器,在開始製作遊戲之前,您需要檢查您是否安裝了以下開發環境:1、檢查你的EgretPro是否更新到了1.6以及以上版本;2、檢查下是否安裝了5.3.7以及以上的Egret2d引擎。

創建項目

首先,打開EgretPro,項目--庫項目--新建。其次,創建完項目之後,EgretPro會自動打開剛才創建的庫項目RunningGame,在resource/scenes目錄下面創建一個場景RunningScene,雙擊在場景編輯中打開該場景。如下圖所示:

創建跑道

跑道是通過3個實體Cude拼接而成的,並且隨著主角向前奔跑,跑道需要滾動起來,我們在這裡通過組件的方式動態的創建跑道。使用Vscode打開自己剛才創建的項目,然後在src目錄下面創建一個文件夾game用來存放我們的組件代碼,然後在game目錄中創建RoadController.ts文件。

然後把RoadController組件添加在場景的Root實體上。最後點擊預覽(內置)(或者預覽瀏覽器)按鈕,就可以看到下面的效果了。攝像機的這個角度看上去有點彆扭,你可以在運行界面,通過調試攝像機的TransForm參數來調整攝像機的位置與角度達到畫面看上去比較舒服。

 

添加主角

第一步,將美術同學給的遊戲素材BakedAnimation拷貝到項目目錄resource/assets/a nimations中。第二步,在EgretPro編輯器資源管理器中打開resource/assets/animations/BakedAni mation/Boy_standby_out目錄,拖拽Boy_standby.gltf.prefab.json文件到場景中。

方法2:在pro編輯中去掉勾選autoPlay,通過腳本去實現,在game目錄下面創建PlayerController文件;(記得把PlayerController組件掛在到主角實體上哦)。

到這步為止,我們的主角就在跑道上奔跑起來了,但是我們還需要讓我們的玩家往前移動,我們需要在onUpdate函數中不斷的更新主角的位置。同時我們還需要讓攝像機跟隨著主角進行同速度的移動,否則你會發現你的主角在你的屏幕中越跑越遠,越來越小啦。

隨著主角往前移動,我們發現走著走著,我們腳下的跑道沒了。這個時候我們需要在主角向前移動的同時不斷的往前鋪路,打開我們的RoadController.ts組件。

最後我們需要通過滑鼠左鍵來控制主角左右移動。我們需要在onUpdate函數中,根據滑鼠的移動來改變主角的位置。

添加金幣

預製體是一個遊戲對象及其組件的集合,目的是使遊戲對象及資源能夠被重複使用,相同的遊戲對象可以通過一個預製體來創建,此過程可以理解為實例化。遊戲中的金幣散落在整個跑道上,在這裡使用預製體來做金幣是最合適的!1、打開(或者創建)resource/perfab目錄,然後在資源管理器模塊,右鍵--》創建預製體coin.perfab.json;2、雙擊剛剛創建的預製體,在層級欄中右鍵-->3D-->球體;3、選中剛才創建的球體,在屬性欄給其選擇material項,選擇,coin.mat.json。

我們的金幣都是散落在跑道上的,所以每創建一截跑道,我們就在該跑道上隨機創建一些金幣,金幣的數量是隨機的,位置也是隨機的。接下來,需要在RoadController.ts組件中添加如下邏輯代碼:

但是如果是有一定開發經驗的小夥伴肯定知道我們還需要一個金幣池,來回收金幣,避免一直創建金幣。接下來我們再來創建一個金幣緩衝池。我直接在Coin.ts文件中添加一個CoinPool類。

當金幣離開攝像機的渲染範圍,我們就應該把金幣放入到緩衝池中,同時金幣實體不在參與渲染,使金幣處於休眠狀態。這些對金幣的處理我們都放在系統類中去做。系統便是來處理擁有一個或多個相同特徵組件的實體集合的工具,其只擁有行為(即在系統中沒有任何狀態)。 我們系統類中獲取所有的金幣。那麼如何在系統中獲取所有的金幣呢?實體匹配器是用來定義具有某種組件特徵的實體集合的規則,通過一個匹配器實例,就可以定義一個明確的實體集合的規則。

回歸到我們的案例中,我們先創建一個金幣系統類 CoinSystem.ts,在其中,我們要獲取所有的金幣,然後在每一幀中檢查金幣是否被玩家甩到背後,不需要渲染了,那麼我們就把它回收到金幣池中。具體看下面的代碼:

系統並不像組件直接添加到實體上就可以起作用,我們需要在組件註冊系統。接下來,在PlayerController中,添加如下兩行代碼。

當創建金幣的時候,我們首先考慮從緩衝池中獲取。修改RoadController.ts中crea teCoins()函數。

處理碰撞

接下來,我們要做的就是處理金幣與主角之間的碰撞了,我們需要檢查每一個金幣,如果和主角發生了碰撞,那麼我們的金幣就有一個緩動動畫然後消失。那麼對金幣與主角碰撞處理的這一個行為我們還是放在CoinSystem.ts系統類中去處理。

添加UI界面

接下來,我們需要給案例添加一個UI界面,也就是要加入一些2d的內容。在這裡我需要給讀者講解一下如何在3d場景中添加UI界面?具體參考這裡:Egret2d與EgretPro整合。第一步,將3d場景導出成第三方庫pro-library;第二步,創建一個2d項目,將第三庫pro-library添加到2d項目中;

第四步,EgretPro 中的場景渲染為一個egret.Texture對象,Egret引擎只需要將egret.Texture添加到Bitmap對象當中,即可渲染到舞臺。

結合本案例,我們處理完上面的第一、二、三步,我的項目目錄如下圖:然後我們點擊開始遊戲按鈕,添加跑酷的場景。具體看Main.ts文件。

但是這個時候,大家發現我們的主角無法左右移動了,這個時候需要我們將2d的觸摸事件傳遞到3d場景中。那麼就需要通過egret.pro去完成通信。

那麼我們需要在3d場景的PalyerContrller中接受消息並且處理消息。具體見下:

然後,我們控制臺輸入指令:egret run -a 就可以運行你的項目啦!


小結

恭喜你完成了使用EgretPro製作的第一款遊戲,點擊下方閱讀原文即可下載完整的遊戲源碼。

通過本示例你可以學到手勢識別、動畫系統、金幣系統、碰撞處理、UI系統、EgretPro與Egret2d項目交互等知識點同時你也可以學習了解到EgretPro與Egret2d之間的交互--使用EgretPro製作3D場景,然後把製作好的3D場景導出為第三庫的形式添加到Egret2D項目,在Egret2D項目中處理UI系統,使用Egret.pro中的方法進行3D與2D之間的通信。       

最後,您還可以繼續在本示例的基礎上添加功能繼續完善您的遊戲。期待您的完美作品!


Egret Pro學習交流群見下,歡迎大家入群交流。


開發者技術交流區:bbs.egret.com

在線開發者微信群:egretengine(搜索微信號添加)

官方技術支持郵箱:support@egret.com

市場合作:marketing@egret.com

商務合作:bd@egret.com

招聘郵箱:hr@egret.com

白鷺引擎微信號

相關焦點

  • 視頻教程| Egret Pro入門學習筆記(10)
    ‍大家都知道,在3D遊戲世界中各種各樣的可見物都是模型,而模型是由網格和材質組成的。網格(Mesh)則是由一個三角面或多個三角面拼接形成,是構建模型形狀的基礎。網格是構成模型的三角面頂點數據以及三角面的索引數據集合,是不可見的。模型的基礎是網格,網格的基礎是三角面。三角面越多,模型可表現的細節越豐富。細節表現比較豐富的,通常被稱為精模,細節表現相對較弱的,被稱為簡模。
  • 白鷺引擎5.3.0正式發布,支持3D遊戲開發
    其次,我們簡單說說Egret3D的設計目標:Egret3D 當前的設計目標是:為 Web平臺(包括網頁、微信小遊戲、微端等形態)提供一款用於快速進行 3D遊戲開發的遊戲引擎。與市面上一些其他的 3D 渲染庫( 比如 three.js )和三維數據可視化框架相比,Egret3D 的核心設計目標更專注為遊戲開發領域。
  • 視頻教程| Egret Pro入門學習筆記(8)
    在Egret 5.3.7更新後,關於如何利用Egret Pro 在2D老項目中添加3D功能,我們收到了開發者朋友的熱情諮詢,今天我們圍繞此功能的使用技巧及應用示例做了一份詳細教程
  • 【導航帖】Egret開發教程讓你分分鐘上手,小白秒變大牛!
    從小白到大神雖然是路漫漫其修遠兮,但是有了Egret開發教程導航帖,保證媽媽再也不用擔心你的學習了……不同階段小夥伴們只需按照導航帖對號入座即可,有圖有真相,想要快速定位立即上手嗎?Egret開發教程該這麼看……Part1 路人轉粉,請看這裡!
  • 視頻教程| Egret Pro入門學習筆記(1、2)
    今天我們推出了大家期待已久的Egret Pro 使用教程:入門學習筆記!
  • H5 遊戲開發 1:Egret 文檔有多難用
    最近貓哥開始轉行做遊戲開發,主要的業務場景是 Hybrid H5 休閒遊戲。作為遊戲行業的新人,自然少不了一些精彩的技術預研和踩坑經歷,今天開始挖個「H5 遊戲開發系列」的坑,每周分享一下。技術選型國內有三大 H5 遊戲引擎,Cocos、Egret 和 Laya,他們都能支持使用 TypeScript 編寫跨平臺(H5、各類小遊戲平臺、Native App)的遊戲。具體引擎的對比細節不屬於本文探討的主題,我直接拋出(個人)結論:2D 遊戲選 Egret,3D 選 Laya,其他選 Cocos Creator。
  • Egret Engine 5.3.8 發布:支持字節跳動小遊戲、改善開發體驗
    今天我們正式發布了Egret Engine 5.3.8版本,相比於5.3系列中的其它版本,我們這次發布相對比較低調,但內容很接地氣:新增字節跳動小遊戲的發布支持,修復Egret Engine在運行時2D渲染、3D渲染、龍骨、Egret Native發布環節出現的問題,優化Webpack編譯中 legacy 模式中的部分問題,從而提升Egret Engine 5.3系列版本的整體開發體驗
  • Egret Pro 0.9.2 版本正式發布
    除此之外,我們在 Egret3D 中引入了一個拖尾渲染器用於渲染3D遊戲中的拖尾特效,並支持開發者直接在 Egret Pro 中對拖尾特效進行可視化編輯,具體更新內容如下:【新增】添加拖尾效果渲染器,並支持在 Egret Pro 中可視化編輯;【新增】屬性面板數值修改支持滑鼠拖拽操作;
  • 視頻教程| Egret Pro入門學習筆記(7)
    往期視頻學習:視頻教程| Egret Pro入門學習筆記(6)視頻教程| Egret Pro入門學習筆記(5)視頻教程丨Egret Pro入門學習筆記(4)視頻教程| Egret Pro入門學習筆記(3)視頻教程| Egret Pro入門學習筆記(1、2)
  • 菜鳥教程丨Inspector 的使用
    雖然現在egret有方便的eui類庫,但可能有些時候為了減小包體體積並不引入eui類庫,而是直接使用gui進行編寫,這時候調整ui使用Inspector就顯得更為方便、直觀。下載地址:https://egret.com/products/others.html#egret-inspector 也可以在Egret Launcher中直接下載 1.開發者安裝模式:- 打開Chrome,轉到Chrome擴展工具頁 (可以直接輸入chrome://extensions/ 打開)。- 先把開發者模式打開。
  • Egret Engine、Egret Launcher、Egret UI Editor三款產品同步更新,提升用戶體驗
    Egret Launcher1.1.3版本分別就QQ小遊戲、小米快遊戲、OPPO小遊戲、vivo小遊戲平臺修復、新增了部分功能,優化開發體驗; 在接下來的內容中我們會將文章分為3部分,分別講述QQ小遊戲引擎插件使用教程、Egret Launcher和Egret UI Editor的新增功能。
  • 【Unity3D開發小遊戲】《跑酷小遊戲》Unity開發教程
    一、前言最近跑酷遊戲比較流行,開發教程也很多,但是大部分都是不太詳細,這篇文章就帶著大家一步一步開發出來一個跑酷類的遊戲,教程比較基礎,適合大部分
  • Egret 2020,技術沉澱與產品突破
    ,加強2D/3D遊戲開發工作流的融合,重點解決原生遊戲的性能,橫縱貫穿2D/3D遊戲、H5遊戲/原生遊戲不同品類遊戲研發場景,並形成全新的遊戲開發工具流。自此,逐漸突破了H5小遊戲品類的限制,成長為一款更加全面的遊戲引擎。自2013年底開始,白鷺引擎團隊帶著多年遊戲研發的積累,轉型並專注於遊戲引擎的研發,不斷攻克底層技術創新,幫助開發者提高遊戲開發、遊戲加載、遊戲運行三大效率。
  • 更強悍更簡單 白鷺引擎3D引擎創H5 3D遊戲開發裡程碑
    該引擎獨具組件式架構全新UI系統,一體化編輯器,直接導入支持20+種常見格式模型文件,10種不同格式圖片或紋理導入,完美支持 Unity 工作流導出,強悍性能賦予開發者成熟簡單開展H5 3D遊戲開發。首個基於白鷺引擎3D研發的《聖域契約3D》營造出恢宏大氣的場景和精美絕倫的畫質,再一次創立H5 3D遊戲開發裡程碑。
  • Egret UI Editor 1.7 正式發布,支持UI動畫編輯
    既然是告別,首先我們先總結下2019年引擎團隊的工作重點,看看我們主要做了哪些事情,具體包括4個方面:1、2D引擎維護與工作流優化,這一年2D引擎發布了20餘個小版本,並發布了 Egret UI Editor;2、不同平臺的發布支持,除了2018年支持的微信小遊戲之外,還先後支持了百度小遊戲、QQ小遊戲、OPPO小遊戲、vivo小遊戲、小米快遊戲和360PC
  • 白鷺引擎QQ玩一玩開發教程文檔發布
    但限於時間和開發工作量,我們未能及時將完善的教程文檔推送給開發者們。目前我們已將白鷺引擎提供的完整詳細的使用教程提交至白鷺開發者中心(http://developer.egret.com/cn/),大家可以訪問網站獲取更多詳細內容。
  • 【唐君華】 白鷺引擎3D,讓真3D H5遊戲觸手可及
    我們做任何一個遊戲消耗的最大的時間是在我們遊戲出問題的時候,我們要如何解決。各類ui系統的製作。現在在3D環境的時候,我們推出了一個工具全新的3dui。簡單看一下3D UI解決方案,包括常見的UI組件和界面,通過實際的使用來做的項目來校驗。
  • 《時代》專訪宮本茂:《超級馬裡奧跑酷》開發團隊是《馬裡奧兄弟》原班人馬
    請向我們介紹一下開發團隊。宮本:是的。但是,我們不清楚是否會最終將這五個遊戲全部完成。《超級馬裡奧跑酷》的開發團隊,事實上包含了大多數初代《超級馬裡奧兄弟》的原班人馬。手塚卓志擔任設計師,我是製作人。我們把任天堂裡最了解捲軸式馬裡奧遊戲(side-scrolling Mario games)的人都找來了。
  • Egret Engine 5.3.9版本發布,支持華為快遊戲平臺
    同時,我們修復了大家反饋的Webgl 模式顯示模糊問題和360小遊戲導出龍骨庫失敗問題,有項目需求的朋友可下載更新!現在,Egret Engine 5.3系列的社區體驗版開發已接近尾聲,稍後我們會正式推出Egret Engine 5.4系列穩定版,屆時開發者朋友們可關注、下載更新!
  • 菜鳥 | 紋理集打包和動畫轉換工具Texture Merge的使用教程
    Texture Merger 可將零散紋理拼合為整圖,同時也可以解析SWF、GIF動畫,製作Egret位圖文本,導出可供Egret使用的配置文件,其紋理集製作功能在小遊戲開發中可以起到降低小遊戲包體的作用