《Genesis-3D開源遊戲引擎完整實例教程-2D射擊遊戲篇04:碰撞檢測》

4.碰撞檢測

碰撞概述:

遊戲世界裏,遊戲對象不能作出如同在真實世界裏的物理運動效果。對於大部分遊戲來講,都要爲其添加物理系統,讓其能夠模擬真實世界發生的物理運動。可是在這個打飛機遊戲Demo中,是用腳本代碼來實現對碰撞事件發生的檢測的,下文將詳細介紹實現的方法。ide

碰撞檢測原理:

爲物體建立子空Actor,做爲物體包裝盒用於對碰撞事件發生的檢測,當包圍盒直接發生交叉、包含等關係時候,斷定觸發碰撞事件,產生相應碰撞效果,流程圖如圖5-1所示。函數

 
圖5-1

實現方法:

步驟1:網站

碰撞檢測體包圍盒的製做。在場景中Create(建立)->Empty Object(空物體,即空Actor),將空Actor拖動到物體上,成爲其子空Actor。spa

步驟2:3d

檢測碰撞事件是否發生,相關代碼以下所示。code

01 public void Tick (float elapseTime)
02 {
03  //實時監測,監測碰撞事件是否發生
04  for (int i = 0; i < Colliders.Count; i++)
05  {
06   for (int j = i+1; j < Colliders.Count; j++)
07   {
08    BoundingBox bb1 = Colliders[i].ColliderActor.WorldBoundingBox;
09    BoundingBox bb2 = Colliders[j].ColliderActor.WorldBoundingBox;
10    ClipStatus cs1 =  bb1.Contains(bb2);
11    ClipStatus cs2 =  bb2.Contains(bb1);
12    //兩個互相監測,是否互相包含
13    if (cs1 == ClipStatus.Intersecting || cs2 == ClipStatus.Intersecting )
14    //狀態監測
15    {
16     if (Colliders[j].ColliderActor.IsActive)
17     {
18      Colliders[i].Call(Colliders[j].ColliderActor);//回調函數
19     }
20     if (Colliders[i].ColliderActor.IsActive)
21     {
22      Colliders[j].Call(Colliders[i].ColliderActor);//回調函數
23     }
24    }
25   }
26  }
27 }

步驟3:對象

碰撞結果。打飛機遊戲Demo中,設定了兩種碰撞結果。子彈擊中敵人:敵人死亡,計分;敵人擊中角色:角色死亡,遊戲結束。遊戲

 


 

引擎官方網站:http://www.genesis-3d.com.cn/事件

官方論壇:http://bbs.9tech.cn/genesis-3d/ip

官方千人大羣:59113309   135439306

YY頻道-遊戲開發大講堂(徹底免費,按期開課):51735288 

Genesis-3D開源遊戲引擎:遊戲起源,皆因有我!!!

相關文章
相關標籤/搜索