Если у GameObject в моей игре есть особые возможности, она вызывает его, но я хочу, чтобы все специальные объекты GameObject, которые этот GameObject затрагивает, также запускают свои способности, например, если бомба поражает некоторые объекты, если эти объекты также являются бомбами, вызывают их также. Хотя это было бы легко, вызвав метод, который рекурсивно обрабатывает все специальные способности, но в программировании не так много всего проще, чем вы думали в начале. В основном, что произошло, это цепная реакция bullcrap, которая заставила Unity показать ошибку OurOfMemory. Кроме того, мой компьютер полностью замораживается, вежливо отключая все экраны.Метод вызывает ошибку OutOfMemory
Вопрос в том, как я могу это сделать, чтобы он вызывал все особые способности затронутых кубов, без всякого сгустка?
Код:
//Triggers the cube's special ability, if it has any
private void TriggerSpecialCubeAbility(GameObject specialCube) {
switch (specialCube.tag) {
//Destroy all cubes in a radius from the special cube
case "Bomb":
TriggerBombAbility(specialCube);
break;
//Destroy all cubes of the same color as the special cube
case "Lighting":
TriggerLightingAbility(specialCube);
break;
default:
break;
}
}
private void TriggerBombAbility(GameObject specialCube) {
var nearbyColliders = Physics2D.OverlapCircleAll(specialCube.transform.position, explosionRadius);
Instantiate(particles[0], specialCube.transform.position, specialCube.transform.rotation);
Instantiate(particles[1], specialCube.transform.position, specialCube.transform.rotation);
foreach (var collider in nearbyColliders) {
if (collider.tag == "Indestructible")
return;
var affectedCube = collider.gameObject;
TriggerSpecialCubeAbility(affectedCube);
Destroy(affectedCube);
}
destroySelectedCubes = true;
// Physics2D.gravity *= -1;
// Physics.gravity *= -1;
}
Если поблизости находятся два кубика бомбы, не закончится ли это переполнением стека? Первый запускает второй, второй запускает первый раз и т. Д.? –