Суббота, 28 Декабря 2024, 11:51

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Нужно сократить колличество классов Записавший в тип стринг
MegaMan11Дата: Среда, 02 Декабря 2020, 22:39 | Сообщение # 1
частый гость
Сейчас нет на сайте
Ребят Привет! Хочу избавиться от однотипных Классов, хочу один сделать класс только раз и на всегда в редакторе имя переменной записывать (например). Как это сделать по красоте?
Вот пример моего кода
Код


public class One : Device
{
    public override void working()
    {
        if (dates.one) // в статичном классе со всеми данными смотрим бул или тру
      { On(); } else { Off(); };
    }
}
public class  Device :MonoBehaviour
{
   public virtual void On()
    {
        spriteRenderer.enabled = true;
    }

    public virtual void Off()
    {
        spriteRenderer.enabled = false;
    }

}

И тут получается 100 классов так

public class Too : Device
{
    public override void working()
    {
        if (dates.too)  
      { On(); } else { Off(); };
    }
}
public class Free : Device
{
    public override void working()
    {
        if (dates.free)  
      { On(); } else { Off(); };
    }
}
public class Fooo : Device
{
    public override void working()
    {
        if (dates.fooo)  
      { On(); } else { Off(); };
    }
}
и так далее 100 раз



Сообщение отредактировал MegaMan11 - Среда, 02 Декабря 2020, 23:04
RangerДата: Пятница, 08 Января 2021, 09:14 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
Насколько понял логика у всех 100 чилдов одинаковая.
1. способ:
dates.one, dates.two, etc преобразовать в битовый массив или лист
в Device :MonoBehaviour указать serialized ключ (по факту индекс) на проверку (если редактируется из редактора юнити), или публичный сеттер, если объекты генерятся динамически
Working перенести в Device :MonoBehaviour будет сверять свой ключ с получаемым листом (массивом) dates.keys
2. способ, если надо сохранить dates так как он есть сейчас - через рефлексию. тогда ключом будет имя поля члена класса по которому проверяется, через рефлексию вытаскиваем тип dates вместе с его полями и сравниваем имя поля в true с указанным ключом.

3. способ почти аналогичен первому, но в dates добавить метод на true false от индекса one,two, three, etc
Код
if (dates.CheckIndex(keyIndex))  
      { On(); } else { Off(); };

Все способы имеют ++ и --.

С новым годом и рождеством!


  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг