Unity3D BEPU 3D定點物理引擎實戰(zhàn)系列 1.5重構(gòu)物理Entity架構(gòu),支持更多的形狀
1.5重構(gòu)物理Entity架構(gòu),支持更多的形狀
上一節(jié)實戰(zhàn)如何編譯BEPUphysicsint源碼到自己的項目, 如何整合物理引擎與Unity圖形渲染。本節(jié)來從新調(diào)整設(shè)計,讓物理的Entity基本操作與物理的形狀分離,支持更多的物理形狀,支持物理entity與Unity物體位移與旋轉(zhuǎn)同步。主要分成以下3個部分:
1: 設(shè)計PhyBaseEntity,讓所有具體形狀的Entity都繼承自它;
2: 同步物理Entity與Unity節(jié)點的位移與旋轉(zhuǎn);
3: 編寫其它的形狀的物理Entity;
PhyBaseEntity?設(shè)計
上一節(jié)課我們設(shè)計的PhyBoxEntity主要包含了兩個部分,一個是Entity的物理形狀的創(chuàng)建(這個與具體的形狀有關(guān)),一個是物理Entity的基本功能,如位置,旋轉(zhuǎn)同步,給Entity線性速度等。而且其它的形狀的物理Entity,除了形狀創(chuàng)建會不一樣,其它基本一樣,所以我們調(diào)整一下設(shè)計,把PhyBoxEntity與物理形狀相關(guān)的代碼放到PhyBoxEntity里面,與形狀無關(guān)的物理Entity的基本功能,我們放到PhyBaseEntity里面,然后讓具體的形狀在擴展的時候繼承PhyBaseEntity即可。合計架構(gòu)如圖所示:

接下來我們把上一節(jié)課的PhyBoxEntity與形狀無關(guān)的數(shù)據(jù)與功能提取到PhyBaseEntity,PhyBoxEntity只保留形狀相關(guān)的代碼。與形狀無關(guān)的數(shù)據(jù)部分:
phyEntity: 用的是所有Entity形狀的基類,這樣可以指向不同子類的具體實例,其它數(shù)據(jù)都是物理Entity通用的,都寫道PhyBaseEntity里面。
同步物理Entity與Unity節(jié)點的位移與旋轉(zhuǎn)
同時PhyBaseEntity實現(xiàn)了物理Entity與Unity節(jié)點同步的功能增加了位置+旋轉(zhuǎn)。如代碼所示:
接口SyncUnityTransformWithPhyTransform: 從物理Entity同步到Unity節(jié)點
接口SyncPhyTransformWithUnityTransform: 從Unity節(jié)點同步到物理Entity
再來看調(diào)整后的PhyBoxEntity,就很簡單了:
根據(jù)BoxCollider的數(shù)據(jù)創(chuàng)建Box的物理Entity, 同步到Unity節(jié)點的位置與旋轉(zhuǎn),并加入到物理世界。
編寫其它形狀的物理Entity
經(jīng)過上面的調(diào)整以后,我們就很快的編寫其它的形狀,比如實現(xiàn)PhySphereEntity,
繼承自PhyBaseEntity,同時根據(jù)SphereCollider組件來創(chuàng)建形狀。
后續(xù)我們要給物理Entity線性速度,角速度都把接口寫到PhyBaseEntity里面。
今天的物理Entity的設(shè)計調(diào)整就到這里了,關(guān)注我們,可以獲取Unity BEPUphysint3D實戰(zhàn)源碼。
附:視頻教程
Unity幀同步核心技術(shù):3D定點數(shù)物理引擎架構(gòu)實戰(zhàn)www.bycwedu.com/promotion_channels/1454843650?