Переменная canvasList
представляет собой List
из GameObject
, а Unity's GameObject
происходит от UnityEngine.Object
, который имеет свойство name
, которое вы используете.
Распределение памяти пришло от этого: canvasList[i].name != "MainUICanvas"
Это связано с тем, что свойство Object.name
должно возвращать строку с нативной стороны, и это означает, что новая строка создается при каждом обращении к этому свойству. Вот почему была добавлена функция GameObject.CompareTag
, чтобы можно было сравнивать имя объекта без выделения памяти. Функция GameObject.CompareTag
будет сравнивать имя объекта на нативной стороне без необходимости создавать или возвращать новую строку на стороне C #. Это удаляет выделение памяти.
К сожалению, большинство примеров кода Unity на своем сайте и в других местах используют Object.name
вместо функции GameObject.CompareTag
, которая заставляет больше людей чаще использовать свойство Object.name
.
Это не должно выделять память:
List<GameObject> canvasList = new List<GameObject>();
public bool AnyCanvasOpen()
{
for (int i = 0; i < canvasList.Count; i++)
if (canvasList[i].activeSelf && canvasList[i].CompareTag("MainUICanvas"))
return true;
return false;
}