《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开源游戏引擎:游戏起源,皆因有我!!!

相关文章
相关标签/搜索