最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Unity八叉樹及導(dǎo)航

2023-07-11 14:32 作者:莫末陌寞  | 我要投稿

樹的組織特點(diǎn):一種只有唯一的上級和若干下級的概念結(jié)構(gòu)。

對于八叉樹來說則是:只有唯一的上級和最多八個(gè)下級,而在本例中,下級節(jié)點(diǎn)的數(shù)量只會為0(null)或8。

聲明:

請確??赐炅艘曨l,我會直接講解我的改動(dòng)與添加。

0.有物體的區(qū)域,Draw的線框改色

1.物體位移重建線框(樹的數(shù)據(jù))

2.通過點(diǎn)的坐標(biāo)得到其所在的小區(qū)塊

3.導(dǎo)航

改色

在OctreeNode的DivideAndAdd方法中

這個(gè)if只有在遞歸的時(shí)候才會觸發(fā),因?yàn)槲覀儾惶赡茉O(shè)計(jì)根物體尺寸小于最小尺寸。

那么,進(jìn)入遞歸表明這個(gè)區(qū)域涉及到了物體,而走進(jìn)這個(gè)if表明這個(gè)區(qū)域已經(jīng)是預(yù)設(shè)的最小單位。

上面的if先檢測了子節(jié)點(diǎn)的區(qū)域是否涉及物體,然后再去遞歸,

上面return服務(wù)于,一個(gè)與物體Bounds相交并且尺寸小于minSize的子節(jié)點(diǎn)區(qū)域,使其不再產(chǎn)生子節(jié)點(diǎn),并且置紅顏色表示這個(gè)區(qū)域與物體相交。

重建線框

1) 在Octree類中,把構(gòu)造方法中建立數(shù)據(jù)組織的語句封裝給另一個(gè)函數(shù),為了更簡單的調(diào)用我把這個(gè)方法記錄在了一個(gè)UnityAction中。

2) 寫一個(gè)Mono腳本,當(dāng)檢測物體的變換發(fā)生改變時(shí),調(diào)用UnityAction。

定位點(diǎn)所在小區(qū)塊

1) 重新組織數(shù)據(jù)

將一個(gè)父區(qū)域切割為八個(gè)小區(qū)域,其所作的操作就是:

過立方體的中心,在其X、Y、Z軸做切線。

我直接舉實(shí)例:

先判斷點(diǎn)在大區(qū)域的中心的左右位置,能排除8個(gè)可能中的4個(gè),

在判斷點(diǎn)在大區(qū)域的中心的上下位置,能排除4個(gè)可能中的2個(gè),

最好判斷點(diǎn)在大區(qū)域的中心的前后位置,排除2個(gè)可能中的1個(gè)。

以此就從一個(gè)大區(qū)域中,得到了點(diǎn)所在的小區(qū)域。

2) 循環(huán)二分查找

這里強(qiáng)調(diào)一下八叉樹存在的意義,它每次產(chǎn)生子區(qū)域能更精準(zhǔn)的表示一個(gè)物體所占的區(qū)域,而對于不存在物體的區(qū)域不做細(xì)化。八叉樹所表示的方形區(qū)域一般不會被分割為n*n*n的大魔方。

我們要定位的目標(biāo)是層層推進(jìn)找到點(diǎn)所在的最小樹節(jié)點(diǎn),對于不存在物體的區(qū)域,這個(gè)節(jié)點(diǎn)會是根的子節(jié)點(diǎn);而區(qū)域存在物體的區(qū)域,這個(gè)節(jié)點(diǎn)的區(qū)域尺寸是規(guī)定的最小尺寸,層數(shù)由根節(jié)點(diǎn)所表示的區(qū)域決定(根的尺寸/2小于等于最小尺寸的次數(shù))。

導(dǎo)航就是隨便寫的了,通過物體判斷行進(jìn)方向上一點(diǎn)(物體pos+dir*minSize)是否處于有物體的區(qū)域,如果有,就進(jìn)行避障。

物體pos+dir*minSize中minSize是最小的區(qū)域尺寸,我們延伸檢測minSize就能有效檢測所有區(qū)域。(當(dāng)一幀的移動(dòng)大于一格不成立)。

Unity八叉樹及導(dǎo)航的評論 (共 條)

分享到微博請遵守國家法律
太湖县| 贵阳市| 土默特左旗| 廉江市| 滦平县| 华亭县| 河津市| 亚东县| 馆陶县| 新化县| 会泽县| 济阳县| 三亚市| 屯昌县| 从化市| 上饶市| 修武县| 瑞丽市| 曲周县| 策勒县| 奉节县| 仙桃市| 若尔盖县| 新化县| 新余市| 韶关市| 宁安市| 如东县| 鞍山市| 长沙市| 大关县| 承德县| 长沙县| 宜春市| 普宁市| 安阳县| 临高县| 孟州市| 政和县| 当阳市| 西乡县|