本文是我使用自己開發(fā)的ECS框架進(jìn)行開發(fā)的一些經(jīng)驗(yàn)總結(jié)凸舵。由于ECS開發(fā)本身和傳統(tǒng)的面向?qū)ο箝_發(fā)有所不同,因而會有很多之前不常見的問題抵皱,故而記錄余耽。本文暫無完結(jié)日期缚柏,依據(jù)項(xiàng)目進(jìn)度有一點(diǎn)寫一點(diǎn)吧。
使用ECS開發(fā)游戲碟贾,尤其是自己實(shí)現(xiàn)的ECS架構(gòu)币喧,總是有很多內(nèi)容值得進(jìn)行總結(jié),無論用途僅僅是打發(fā)時(shí)間袱耽,亦或是為了后期對架構(gòu)的改進(jìn)杀餐,甚或是為了之后開發(fā)更順手。
2020-4-23記錄:
實(shí)體間的生命周期關(guān)聯(lián)問題2
問題:面向?qū)ο笙驴梢酝ㄟ^一個Manager管理多個實(shí)例以方便對其統(tǒng)一管理與處理朱巨。但是在ECS中史翘,這類實(shí)現(xiàn)很可能會因關(guān)聯(lián)實(shí)體的銷毀而產(chǎn)生報(bào)錯
例:角色行為作為一個實(shí)體,放置于行為管理類中冀续。運(yùn)行中的行為會時(shí)刻刷新對應(yīng)角色相關(guān)數(shù)據(jù)琼讽,但當(dāng)角色因死亡而銷毀時(shí),行為會因獲取不到對應(yīng)角色而產(chǎn)生報(bào)錯洪唐。
思考:此問題和 2020-4-22 鎖記錄生命周期問題本質(zhì)相同钻蹬。此處實(shí)例考慮到行為是依附于角色而存在,所以可以將行為抽象為組件添加在角色上凭需,這樣當(dāng)角色死亡時(shí)问欠,行為組件便也失效肝匆,不會再出現(xiàn)這種報(bào)錯。但是這種實(shí)現(xiàn)方式顺献,因銷毀而關(guān)聯(lián)的行為又可能產(chǎn)生不確定的新問題旗国。如若銷毀行為時(shí)不執(zhí)行行為的結(jié)束動作,則可能存在狀態(tài)殘留滚澜;如若執(zhí)行結(jié)束動作粗仓,又會涉及到內(nèi)部細(xì)節(jié)的調(diào)整。所以此類問題在設(shè)計(jì)時(shí)還是應(yīng)當(dāng)考慮清楚一些设捐。我個人還是希望能報(bào)保留結(jié)束動作,使邏輯行為完整塘淑,而在動作內(nèi)部有足夠的驗(yàn)證以規(guī)避特殊狀況下的異常狀態(tài)萝招。
2020-4-22記錄:
實(shí)體間的生命周期關(guān)聯(lián)問題
問題:實(shí)體作為多個組件的集合,本身并無特別復(fù)雜的邏輯存捺。但是當(dāng)實(shí)體之間的生命周期存在關(guān)聯(lián)槐沼,則是一個比較麻煩的問題。
例:角色作為一個實(shí)體捌治,技能作為一個實(shí)體岗钩。則當(dāng)角色實(shí)體被刪除時(shí),技能便不再應(yīng)該繼續(xù)執(zhí)行肖油,因而此時(shí)兩者碰到了 生命周期關(guān)聯(lián) 問題兼吓。如果技能此時(shí)繼續(xù)強(qiáng)行執(zhí)行,一者不大符合我們對技能本身的認(rèn)知森枪,二則當(dāng)技能需要使用角色信息時(shí)會因取不到角色信息而出現(xiàn)BUG视搏。
思考:現(xiàn)行ECS架構(gòu)當(dāng)中并未對實(shí)體進(jìn)行生命周期關(guān)聯(lián)。但是就關(guān)聯(lián)思想本身县袱,似乎和ECS的基本思路并不在一處浑娜。我的現(xiàn)行設(shè)計(jì)是通過一個叫做SkillOwner
的組件將角色與技能進(jìn)行關(guān)聯(lián),當(dāng)出現(xiàn)這個問題時(shí)式散,我在角色死亡時(shí)通過獲取SkillOwner
組件獲取并刪除了角色綁定的技能筋遭,暫時(shí)圓滿解決了問題。這個真的就是最優(yōu)解嗎暴拄?