示例#1
0
 /// <summary>
 /// 碰撞检测
 /// </summary>
 public void CheckCollision()
 {
     foreach (var item in m_DynamicObjs)
     {
         if (item.IsCollisionAble == false)
         {
             continue;
         }
         if (lcd.Count != 0)
         {
             lcd.Clear();
         }
         //获得需要进行碰撞检测的list
         m_Qt.Retrieve(lcd, item);
         bool flag = false;
         foreach (var item2 in lcd)
         {
             if (MGFPhysics.CheckBoundings(item2, item))
             {
                 if (MGFPhysics.GJK(item, item2))
                 {
                     flag = true;
                     item.CalcCollisionDir(item2);
                     item.OnMGFCollision(item2);
                     Debug.Log(item.name + " " + item2.name);
                 }
             }
         }
         item.IsCollsioning = flag;
     }
 }
示例#2
0
        /// <summary>
        /// 碰撞检测
        /// </summary>
        public void CheckCollision()
        {
            for (int i = 0; i < m_DynamicObjs.Count; i++)
            {
                if (m_DynamicObjs[i].IsCollisionAble == false)
                {
                    continue;
                }
                if (lcd.Count != 0)
                {
                    lcd.Clear();
                }
                //获得需要进行碰撞检测的list
                m_Qt.Retrieve(lcd, m_DynamicObjs[i]);
                bool flag = false;
                for (int j = 0; j < lcd.Count; j++)
                {
                    //先计算包围盒是否碰撞 再通过GJK检测多边形是否碰撞
                    if (MGFPhysics.CheckBoundings(lcd[j], m_DynamicObjs[i]))
                    {
                        if (MGFPhysics.GJK(m_DynamicObjs[i], lcd[j]))
                        {
                            flag = true;
                            m_DynamicObjs[i].CalcCollisionDir(lcd[j]);
                            m_DynamicObjs[i].OnMGFCollision(lcd[j]);
                        }
                    }
                }

                m_DynamicObjs[i].IsCollsioning = flag;
            }
        }