最近這幾天在搞乙個gameframework,其實就是在引擎基礎上增加乙個遊戲框架,對遊戲進行抽象,對引擎使用的一些封裝。在進行具體設計的時候很多細節問題是值得思考的。總結如下
總的來說我所設計的遊戲框架從功能上來講就是兩件事,乙個是遊戲的狀態管理(什麼選單狀態,遊戲狀態等等),在乙個就是ai管理,又有乙個有效的機制來負責對所有ai進行更新和維護還有互動。
對於乙個所謂的通用框架需要考慮的是在各種不同遊戲型別中的最小抽象是什麼?那些東西是個各種型別遊戲都需要有的,這個抽象如果過小很可能失去其意義,如果過大則很難做到普適,當然有些情況下想做乙個通用的東西想法本身就是錯誤的。
根據我之前的單機遊戲經驗(當然都是動作類射擊類為主的遊戲),我把遊戲抽象為以下幾個部分
1. waypoint, 路點
這個路點是乙個廣義的概念,可以是出生點,也可以是乙個尋路點,或者是其他什麼有意義的位置。路點之間可以連通。他的屬性在遊戲編輯器中進行配置。在具體編碼的時候會有乙個waypoint的基類,他只有位置和連通關係。其他具體的路點什麼出生點,尋路點等等,都從這個waypoint基類中派生出來,並具體處理。
2. trigger,觸發器
和路點一樣,這個觸發器也是乙個廣義的概念,它可以是時間觸發器(定時器),可以是區域觸發器(進入區域,出區域),也可以是更複雜的條件觸發器。他的屬性同樣是在遊戲編輯器中進行設定,實現方法也和waypoint的差不多,先寫乙個積累,從其派生出具體的觸發器。與此同時觸發器上還需要配置乙個指令碼id,用於在被觸發時執行某個指令碼使用。
3. script,指令碼
這個比較簡單,就是乙個map, 他儲存著lua指令碼,並通過id進行索引(當然也可以換用其他索引方式),關於lua就不多說了。
4. map/scene
這個就是引擎提供的場景地圖,這個也沒啥好說的。
5. actor, 角色
在遊戲開發過程中真正大量的工作量也都在每個actor的ai編寫上。需要注意的是當actor和actor只見需要互動的時候不論是直接寫道程式裡還是通過指令碼,都要有一套方面直觀的方式能夠進行actor的訪問。以我的經驗這些actor都是存在乙個map上,使用名字的hashvalue進行索引,並提供方法來封裝這個訪問過程,同時在這個封裝的函式內進行些日至,這樣便於除錯。
我想乙個簡單的抽象大致如此,在開發過程中一般waypoint和trigger的型別都是有數的,而且數量不多,真正需要編寫大量編碼的是actor和scrpit,而出現問題最多的也是scrpit如何能夠方面快捷的訪問actor和game資料等,這個需要結合不同的遊戲進一步設計,而且要事先設計好。
GameFramework 教程06 實體載入
初始場景的建立就不多說,乙個demo6場景加上乙個demo6 procedurelaunch.cs流程指令碼,並設定好初始流程,具體參考demo1。建立實體時,是從預製體建立的,所以我們需要建乙個預製體,隨便建,比如我建了乙個很複雜的預製體 乙個cube。我們把預製體命名為cubeentity吧。最...
GameFramework學習之新增監聽
監聽可以使用在很多地方,主要是監聽乙個東西如果這個東西發生了改變,執行乙個方法去體現出來,可以用在不同的指令碼中 這個型別可以是任何型別甚至是表 eventkey這個指令碼主要是存貯時間的關鍵字 相當於是中轉,連線著triggerlistener和addlistener 這個 的主要意思就是這樣 當...
GameFramework框架學習教程計畫
首先,我介紹一下我對gameframework框架的認識程度。我是在2019年過完春節,二月初回到公司開始學習遊戲開發相關的內容,這個也是我第乙個接觸的框架。過去這一年的時間裡,我一直在用這個框架,也斷斷續續的在學習這個框架,但是總感覺學習不到乙個頭,感覺沒有真正掌握這個框架,所以準備在2020年伊...