Если вам нужно проделать большую работу, которая не может уместиться в одном обновлении, используйте сопрограмму . Но в вашем случае вам может понадобиться только улучшить свой алгоритм.
Поскольку вы предоставили только OnCollisionEnter
, я могу помочь только улучшить этот метод, и вы будете нести ответственность за изменение остальной части кода для его проверки.
Сначала измените тип treeList
с List
на HashSet
в DataStorage
. Наборы хороши, когда вы хотите быстро вставить, удалить и содержать. Больше информации о комплектах . При этом вам больше не нужно будет перебирать всю коллекцию, чтобы найти, кто столкнулся. Удаление петли также позволяет удалить GameObject
прямо из набора. Это необходимо, поскольку у вас не может быть дубликатов в наборе (где вы изначально установили ссылку на gameObject на ноль). Ваш новый OnCollisionEnter
сейчас:
void OnCollisionEnter(Collision collision) {
GameObject data = GameObject.Find("Data");
var treeList = data.GetComponent<DataStorage>().treeList;
// compare references
if (treeList.Contains(collision.gameObject)) {
treeList.Remove(collision.gameObject);
GameObject.Destroy(collision.gameObject);
}
}
Надеюсь, это поможет и направит вас на правильный путь.