/// <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; } }
/// <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; } }