遊戲系統開發筆記(七) 物件系統設計

2021-07-05 19:38:21 字數 2373 閱讀 2901

物件系統顧名思義自然是指oo中的程式物件了,oo程式設計中除了少部分以演算法為主的程式設計,多數時間我們的工作都在圍繞各個物件的生命週期進行著。因為遊戲中所使用到的物件較多,物件間的關係也頗為複雜,自需要一套概念上的「系統」來描述其設計及其背後所涉思想。這就是這裡提到的「物件系統」了。

個人認為遊戲程式中兩類物件最為關鍵:

其二是角色物件

而角色物件算是整個遊戲邏輯層面的核心了,它定義了角色的狀態和角色所能進行的行為,可以說整個遊戲程式其餘的一切實際上都是為了這個部分更好的工作而存在的。

當然,一般來說,這裡談到的東西沒有天然就很複雜的東西,之所以把它寫這麼複雜不過是為了使我們的程式有能力應對一定複雜程度的遊戲設計罷了。

有的遊戲型別只需要非常簡單的角色物件,比如《貪吃蛇》這樣的遊戲,往簡單了做其實就是乙個主角物件(蛇),需要記錄的資訊:1、速度 2、長度 3、位置 4、移動方向,還有乙個物品物件就更加簡單,只需要:1、位置 2、物品型別。

這樣一來我們可以粗糙的對這個遊戲做如下設計:

2、建立乙個蛇物件(速度、長度、位置資訊、方向)

3、在蛇身之外的地方建立乙個物品物件(pos、type)

4、根據蛇速度做一定時間間隔的定時器,每個時間點根據方向更新蛇位置,判斷是否和物品座標重疊,是則根據物品型別對蛇做操作,並且重複3。

5、當玩家輸入方向時變更方向。

這樣乙個貪吃蛇遊戲的脈絡差不多就出來了,在這大框架下新增一些獨特的道具玩法就是一件相對簡單的事情。

但像這種簡單的遊戲,實際上沒必要花太多心思考慮物件系統的設計,但對於rpg型別的遊戲就不然了。個人覺得rpg雖然風格不盡相同,但那種代入感的體驗非常重要,而要獲得這種代入感,首先便要求遊戲要把虛擬實境做到一定水平之上。

既然如此,許多現實中有的元素,我們要對其進行抽象化和離散化、概念化,使它們(現實中的一些元素)有機的融入虛擬世界中。考慮到這點,rpg尤其是arpg中,角色物件的設計便複雜許多。

對於玩家來說一般來說至少會包含如下幾個大的方面:

1、屬性  2、動作  3、移動  4、技能  5、揹包  6、裝備

而對於npc來說,則是:

1、屬性  2、動作  3、移動  4、技能  5、ai 

可以看出還是有不少模組是有交集的,既然如此我們就可以定義一組繼承關係來描述他們的公共/特有的行為。

當然這是一件通常需要根據遊戲設計反覆琢磨試驗才能敲定的事情,這裡只給出一種參考設計:

首先把上述功能組織成manager的形式如:propertymgr、actionmgr、movemgr、skillmgr ...(這裡關於繼承還是組合有許多說法,個人傾向組合多於繼承)

為了減少邏輯物件的「負擔」,這裡考慮做分層處理,把一些基礎的遊戲行為和遊戲內容關聯性大的行為隔離,如:

根據遊戲中物體運動的狀態,主要可以分為靜態(staticobj,靜止不動的)和動態(dynamicobj,運動的)兩類物件,把movemgr掛到dynamicobj上,其它若有必要元件則分別掛上。這樣做還有乙個方面的好處在於場景物件管理的時候可以只依賴於少數邏輯無關的物件型別,把場景這層的也和邏輯隔離開來。

邏輯物件比如掉落物、陷阱之類的就繼承staticobj,玩家、npc去繼承dynamicobj,就分別具有了相關能力。

而上面談到幾類邏輯物件除了玩家和npc,其他則沒有明顯的關聯關係,行為也大都迥異,所以分別實現幾種不同的類,根據遊戲設計掛上相應的mgr即可。

玩家和npc的情況是多數行為類似,少部分行為有異,一般來說主角物件雖然通常不需要ai,但主角物件的行為通常覆蓋多數的npc行為。所以如果讓主角物件繼承npc物件,程式開發上應是可以省去不少麻煩,而我們上面所提的mgr,以impl*的方式來組合,主角用不到npc某個mgr時留個空指標在那裡想必也不會有多少負擔。btw,把ai模組留給主角實際上也不是完全沒意義的,對於網遊而言,有些遊戲其實會給玩家做掛機內掛...

這種設計使得邏輯層需要管理的物件還是比較簡單明瞭的,可以直觀的和玩家所見的物件一一對應,而它們的生命週期也完全隨著遊戲行為建立和結束。

再來說說這種物件設計在c/s中的情況:

網遊中的npc必然都是伺服器指揮的,這沒啥好說的,對於網遊來說,多數物件邏輯都在伺服器,所以上面談到的設計也是主要對應服務端的物件設計。

對於客戶端多數思路都是通用的,一點區別就是對於乙個具體的客戶端來說,只有玩家自己的那個物件是比較特殊的(需要和玩家互動,而其他角色都是由服務端指揮),而其他玩家和npc區別都不大,所以設計上也需要有所變化。所以對於客戶端來說,不妨主要圍繞這條區別來做角色物件設計。

比如,把一些受控行為抽象出來,都包裝到乙個類中,npc和非當前玩家的玩家都用這個類來表示,而當前玩家物件則繼承這個類,再額外新增一些主動操作來表示。

遊戲系統開發筆記(八) 場景物件管理

遊戲系統開發筆記 七 物件系統設計 簡單介紹了下物件系統的設計,繼續考慮遊戲開發所需要完成的工作會發現還少乙個很重要的點 物件的活動場所。遊戲中,我們常常需要把整個遊戲世界中零散的角色按照一定方式組織到一起,使它們.額.發生關係。有很多與之相關的許多問題或許會遇到 我這個技能最遠攻擊距離是多少?範圍...

遊戲系統開發筆記(八) 場景物件管理

遊戲中,我們常常需要把整個遊戲世界中零散的角色按照一定方式組織到一起,使它們.額.發生關係。有很多與之相關的許多問題或許會遇到 我這個技能最遠攻擊距離是多少?範圍有多大?這個怪物離我多近的時候會主動攻擊我?有些地形我是否可以通過?以什麼樣的方式通過?十分接近怪物的時候我是會被撞到停下,還是從中穿過?...

23種設計模式 七 物件建立之工廠方法

23種設計模式 二 元件協作之模板方法 23種設計模式 三 元件協作之策略模式 23種設計模式 四 元件協作之觀察者模式 23種設計模式 五 單一職責之裝飾模式 23種設計模式 六 單一職責之橋模式 23種設計模式 七 物件建立之工廠方法 23種設計模式 八 物件建立之抽象工廠 23種設計模式 九 ...