Поиск и получение переменных определенного типа c и имени из разных экземпляров классов - PullRequest
0 голосов
/ 13 марта 2020

У меня есть список объектов (разных типов), и я хочу через него l oop искать переменные, называемые цветом типа Color, чтобы изменить их.

Есть ли способ сделать это без отражения ? Если нет, какой самый эффективный способ сделать с отражением? В списке будет около 200+ объектов, и он должен обновляться каждый кадр. Кроме того, я не могу создать суперкласс, такой как ColoredObjects или что-то еще, потому что эти классы встроены, и я не могу их изменить.

1 Ответ

2 голосов
/ 13 марта 2020

Если ваш список состоит из GameObjects:

    Color colorToSet = Color.red;

    foreach (var item in objList)
    {
        foreach (Component component in item.GetComponents<Component>())
        {
            foreach (var property in component.GetType().GetProperties())
            {
                if (property.PropertyType == typeof(Color) && property.CanWrite)
                {
                    property.SetValue(component, colorToSet);
                }
            }

            foreach (var field in component.GetType().GetFields())
            {
                if (field.FieldType == typeof(Color))
                {
                    field.SetValue(component, colorToSet);
                }
            }
        }
    }

Если это список из Monobehaviour сценариев, удалите .GetComponents() l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...