场景管理
既然提到場景管理,那必須要有世界管理,
前端的游戲世界管理:
1.前端游戲狀態(tài)機
2.場景管理。執(zhí)行場景相關的操作。
精靈對象管理,包括玩家,怪物,其他玩家這些精靈的列表,增刪改查,精靈的視野關系管理。這是全局的。
場景內(nèi)機關管理,當切換場景的時候,加載對應的機關數(shù)據(jù)。
3.用戶賬戶管理。當游戲啟動的時候,登錄游戲的賬戶數(shù)據(jù)信息。
4.精靈自身功能對象。
?
后端的游戲世界WorldService管理:
1.Entity視野管理。當檢測到有新的Entity進入視野后,要通知
?
游戲世界,場景模型,Scene管理器之間都是什么關系?
場景管理模塊的職責:
場景是作為一個模塊來看呢,如果作為一個模塊,它有MVC這樣的劃分嗎,controller負責加載行為,view負責管理顯示對象,scene的顯示對象都有什么,場景與地圖是什么關系?
?
地圖數(shù)據(jù)都有什么
1.地圖名
2.地圖類型?也許用不上,也許可根據(jù)地圖類型決定一些事情。
3.地圖的進入點。這個進入點,貌似做了不少操作,但為什么原因呢?
4.地圖最多玩家數(shù)量
5.地圖的模型列表。這個模型列表是有研究的,這個模型在加載場景的時候會都加載,但為什么這樣做呢,也許是可以共存?
6.相機的顏色,相機的遠近裁剪值
7.地圖的寬和高
8.是否有霧,霧的顏色,霧的參數(shù)
9.環(huán)境光配置,顏色等
10.背景音效
11.光照貼圖資源ID
12.攝像機有cull layer的概念,可以做裁剪,這個是新概念。*
13.角色是否開啟頭燈。這個是跟著地圖走的,不同的地圖也許需要不同的開關。
14.機關ID。機關的設計是關卡里很重要的一項,需要單獨拿出來研究下。
?
那么主角出生在哪個場景呢? 怎么互動的?
?
場景管理模塊需要同時考慮前臺和后臺
1.對于副本來說,服務器在副本第一次被進入的時候,啟動副本進程,所有進入此副本的角色,都會由這個副本進程管理,服務器端只有一份場景尋路數(shù)據(jù),人和人之間關閉阻擋,但是角色和場景之間的保留,此場景里的機關呢?這樣就是說,客戶端會有一個副本的演進過程,從玩家進入場景開始,一個個機關結點觸發(fā),到玩家出場景,此副本結束。對于服務器來說,一個玩家進入,觸發(fā)了一個機關,那么這個信息是存儲到這個玩家身上的,所以每個副本都會為進來的每個角色分配數(shù)據(jù)對象。必然會出現(xiàn)多人同時觸發(fā)一個機關,如果打開效果開關。那么這里的場景管理的就是數(shù)據(jù)了。
2.對于開放場景來說,玩家在客戶端和服務器都能看到眾多的角色,客戶端有視錐體裁剪,服務器就沒有,但會為每個角色做視野管理,應該是視野范圍內(nèi),玩家的位置信息會被同步給他視野里的其他對象。
3.從場景設計角度,前后臺如何共享數(shù)據(jù)?后臺必然會有一個EntityInstantiate方法,使用它來實例化一個個Instance對象,但這個其實和場景管理沒關系,更多的是對象管理服務。那么Scene的職責和功能是什么?為什么要有場景管理,當然了,場景里有哪些東西,哪些物件,當前這個場景的燈光音樂等。
從講故事來說,皮影戲更合適講C/S模式的架構, 一個副本就是一場演出,美術拼關組出來的場景是舞臺,音樂,燈光等的控制也要放到場景調(diào)度里,此副本里的精靈怪也是要配置的,機關也要擺放。后臺監(jiān)控整個過程,走到哪一步終止都是由后臺決定。
所以看多了其他游戲的框架,轉到這種框架下需要思維上的轉變,服務端要連創(chuàng)建都要進行管理。
不要用客戶端的思維去想服務器的邏輯,但是由于現(xiàn)在服務器是跑在Unity環(huán)境下,因此可以嘗試用客戶端的思維想想。從概念上來說,地圖和場景的關系?一個地圖可以跑一個進程的場景
分成兩層來看,首先,先不走前后臺的思想,而是走從上層往下看,意思就是面向接口進行設計。場景都應該有什么,精靈都應該有什么?獨立的組件都有什么,這些都是可以考慮的。交互可以不考慮重點在于接口。游戲世界管理,從一個地方派生,例如 Iworld,從意圖上看,實現(xiàn)了整個游戲世界里公共的東西。
場景里會有trigger,玩家碰上這個控制器后,會觸發(fā)怪物的生成,這應該算是副本里的一種方式。怪物的坐標也需要被編輯出來。
場景里物件的加載機制,是否要分動態(tài)加載和整個加載這兩種機制呢?首先肯定會有場景物件列表,如果沒有動態(tài)加載的話?其實不一定,至少這個機制要支持擴展成動態(tài)加載。
所以Scene是做成module呢還是service ?
Scene只是一個小功能,這個功能是管理當前場景里靜態(tài)的,那么動態(tài)的呢?里面的怪物的歸屬關系呢?
數(shù)據(jù)只是數(shù)據(jù),實例化出來的東西會被動態(tài)加載或者卸載,所以放在Scene里是比較合適的。SceneModule和其他module平行,還是個公共service,其它module是否都會用到這個module呢。
Scene至少要提供各種LoadScene方法,管理場景里的靜態(tài)物件?
從設計上來說要支持大型的場景,即能分塊加載??
?
再進行一次拆分:
IAssetService 屬于資源加載層面的內(nèi)容,所有的資源加載都要通過這個接口來進行
IDataService ?屬于非顯示層面的永久數(shù)據(jù)文件,即存儲在磁盤上的數(shù)據(jù),可以認為是被策劃編輯出來的數(shù)據(jù)內(nèi)容。所有的file都是asset,由IAssetService來加載。
其中會有MapData,即地圖數(shù)據(jù),存儲有monster列表,NPC列表,出生點位置spawnpoint等。
IWorldService屬于世界管理器,整個程序在運行過程中都會存在的東西,例如當前場景是什么等。
IEffectService,ISoundService,
精靈設計體系?
?
轉載于:https://www.cnblogs.com/designyourdream/p/4546843.html
總結
- 上一篇: ASP.NET MVC 实现跨域请求的两
- 下一篇: 关于[入行几年后,你的未来应该在哪里]的