ET框架-ECS

一切皆組件

目前十分流行ECS設計,主要是守望先鋒的成功,引爆了這種技術。守望先鋒採用了狀態幀這種網絡技術,客戶端會進行預測,預測不準需要進行回滾,由於組件式的設計,回滾可以只回滾某些組件即可。ECS最重要的設計是邏輯跟數據的完全分離。即EC是純數據,System實際上就是邏輯,由數據驅動邏輯。數據驅動邏輯是什麼意思呢?很簡單通過Update檢測數據變化,通過事件機制來訂閱數據變化,這就是所謂的數據驅動了。其它的特點例如緩存命中,在編寫邏輯上來說並不太重要,現代遊戲都用腳本,連腳本的性能都能容忍怎麼會在乎緩存命中那點性能提升?ET在設計的時候吸收了這些想法,但是並不完全照搬,目前的設計是我經過長期的思考跟重構得來的,還是有些自己特色。

傳統的ECS寫邏輯作者看來存在不少缺陷,比如爲了複用,數據必然要拆成非常小的顆粒,會導致組件非常非常多。但是遊戲是多人合作開發的,每個人基本上只熟悉自己的模塊,最後可能造成組件大量冗餘。還有個問題,常見的ECS是扁平式的,Entity跟Component只有一層。組件一多,開發功能可能不知道該使用哪些Component。好比一家公司,最大的是老闆,老闆手下帶幾百個人,老闆不可能認識所有的人,完成一項任務,老闆沒法挑出自己需要的人。合理的做法是老闆手下應該有幾個經理,每個經理手下應該有幾個主管,每個主管管理幾個工人,這樣形成樹狀的管理結構纔會容易管理。這類似ET的做法,Entity可以管理Component,Component管理Entity,甚至Component還可以掛載Component。例如:人由頭,身體,手,腳組成,而頭又由眼睛,耳朵,鼻子,嘴巴組成。

    Head head = human.AddComponent
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章