修复 collsionTriggerHelper 遍历问题

This commit is contained in:
YHH
2020-06-18 00:03:01 +08:00
parent 59b2f150f3
commit 18279d16cd
5 changed files with 23 additions and 19 deletions

View File

@@ -3084,14 +3084,13 @@ var ColliderTriggerHelper = (function () {
for (var i = 0; i < colliders.length; i++) {
var collider = colliders[i];
var neighbors = Physics.boxcastBroadphase(collider.bounds, collider.collidesWithLayers);
for (var i_2 = 0; i_2 < neighbors.length; i_2++) {
var neighbor = neighbors[i_2];
for (var j = 0; j < neighbors.length; j++) {
var neighbor = neighbors[j];
if (!collider.isTrigger && !neighbor.isTrigger)
continue;
if (collider.overlaps(neighbor)) {
var pair = new Pair(collider, neighbor);
var shouldReportTriggerEvent = !this._activeTriggerIntersections.contains(pair) &&
!this._previousTriggerIntersections.contains(pair);
var shouldReportTriggerEvent = !this._activeTriggerIntersections.contains(pair) && !this._previousTriggerIntersections.contains(pair);
if (shouldReportTriggerEvent)
this.notifyTriggerListeners(pair, true);
this._activeTriggerIntersections.push(pair);
@@ -3134,12 +3133,12 @@ var ColliderTriggerHelper = (function () {
this._tempTriggerList.length = 0;
if (collisionPair.second.entity) {
collisionPair.second.entity.getComponents("ITriggerListener", this._tempTriggerList);
for (var i_3 = 0; i_3 < this._tempTriggerList.length; i_3++) {
for (var i_2 = 0; i_2 < this._tempTriggerList.length; i_2++) {
if (isEntering) {
this._tempTriggerList[i_3].onTriggerEnter(collisionPair.first, collisionPair.second);
this._tempTriggerList[i_2].onTriggerEnter(collisionPair.first, collisionPair.second);
}
else {
this._tempTriggerList[i_3].onTriggerExit(collisionPair.first, collisionPair.second);
this._tempTriggerList[i_2].onTriggerExit(collisionPair.first, collisionPair.second);
}
}
this._tempTriggerList.length = 0;

View File

@@ -19,15 +19,14 @@ class ColliderTriggerHelper {
let collider = colliders[i];
let neighbors = Physics.boxcastBroadphase(collider.bounds, collider.collidesWithLayers);
for (let i = 0; i < neighbors.length; i++) {
let neighbor = neighbors[i];
for (let j = 0; j < neighbors.length; j++) {
let neighbor = neighbors[j];
if (!collider.isTrigger && !neighbor.isTrigger)
continue;
if (collider.overlaps(neighbor)) {
let pair = new Pair<Collider>(collider, neighbor);
let shouldReportTriggerEvent = !this._activeTriggerIntersections.contains(pair) &&
!this._previousTriggerIntersections.contains(pair);
let shouldReportTriggerEvent = !this._activeTriggerIntersections.contains(pair) && !this._previousTriggerIntersections.contains(pair);
if (shouldReportTriggerEvent)
this.notifyTriggerListeners(pair, true);