фильтр контента в ObjectField

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Re: фильтр контента в ObjectField

Сообщение Trifov 15 апр 2021, 12:48

samana писал(а):
Trifov писал(а):использую EditorGUI.BeginChangeCheck(); для отслеживания изменений в полях. есть что-то подобное, но чтобы работало и в едиторе и в плей модах?

Если вам нужно отслеживать изменения членов экземпляра класса, то используйте свойства.
EditorGUI.BeginChangeCheck это просто удобная штука для отслеживания изменений в инспекторе или окне. Она ни как напрямую не связана с тем, что в классе поменялись какие-то значения.

а можно пример?
я делаю так:
Синтаксис:
Используется csharp
EditorGUI.BeginChangeCheck();
_brushesCount = EditorGUILayout.DelayedIntField(_brushesCount);
if (EditorGUI.EndChangeCheck()){
if (_brushesCount != _brushes.Count){
if (_brushesCount > _brushes.Count){
while (_brushes.Count < _brushesCount)
_brushes.Add(new BrushPopup(new BiomUtility.BiomBrush()));
} else {
_brushes.RemoveRange(_brushesCount, _brushes.Count - _brushesCount);
}
}
}
 
Trifov
UNец
 
Сообщения: 45
Зарегистрирован: 07 апр 2021, 11:43

Re: фильтр контента в ObjectField

Сообщение samana 15 апр 2021, 19:00

А все эти переменные _brushesCount и _brushes принадлежат какому-то классу? Вы ведь откуда-то их берёте? Или это временные переменные кастомного иинспектора (или окна) ?

Я хотел сказать лишь о том, что ваш класс должен уметь делать всё сам изначально. И инспектор (или окно) не должно за него выполнять какую-то логическую задачу, например в вашем случае инспектор почему-то сам решает что делать со списком кистей, хотя этим должен заниматься сам класс, а инспектор лишь отображение.

Просто разрабатывайте класс так, словно у него никогда не будет инспектора.
Я не знаю как выглядит ваш класс (если он есть вообще), поэтому могу лишь предполагать.
Ниже некий класс, у которого есть приватный список кистей и публичное свойство кол-во кистей. То-есть пользователь может изменять только кол-во кистей, а вся работа с добавлением или удалением кистей в списке - происходит внутри класса (а не в инспекторе).
Синтаксис:
Используется csharp
// Какой-то класс с данныими о кистях
public class BrushesPallete
{
    // приватный список кистей
    private List<BrushPopup> _brushes = new List<BrushPopup>();

    // ПУБЛИЧНОЕ СВОЙСТВО КОЛ-ВА КИСТЕЙ
    public int BrushesCount
    {
        get => _brushes.Count;
        set
        {
            if (value > _brushes.Count) addBrushes(value - _brushes.Count);
            else if (value < _brushes.Count) _brushes.RemoveRange(value, _brushes.Count - value);
        }
    }


    private void addBrushes(int count)
    {
        _brushes.AddRange(Enumerable.Repeat(new BrushPopup(new BiomUtility.BiomBrush()), count));

        // или так
        //for (int i = 0; i < count; i++)
        //{
        //    _brushes.Add(new BrushPopup(new BiomUtility.BiomBrush()));
        //}
    }
}


После чего, инспектор может манипулировать значением свойства кол-во кистей и всё, остальные манипуляции выполняет сам класс.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: фильтр контента в ObjectField

Сообщение Trifov 16 апр 2021, 10:02

samana писал(а):А все эти переменные _brushesCount и _brushes принадлежат какому-то классу? Вы ведь откуда-то их берёте? Или это временные переменные кастомного иинспектора (или окна) ?
После чего, инспектор может манипулировать значением свойства кол-во кистей и всё, остальные манипуляции выполняет сам класс.

да. это временные переменные кастомного редактора. по сути библиотека изображений. потом она сохраняется и дальше не изменяется... до добавления новых изображений. потому класс не долже уметь(мне так кажется) ничего добавлять...
Trifov
UNец
 
Сообщения: 45
Зарегистрирован: 07 апр 2021, 11:43

Пред.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 26