Страница 1 из 1

Custom editor (Решено)

СообщениеДобавлено: 19 апр 2013, 21:52
AMD
Доброго времени суток, уважаемые форумчане.

Сразу к делу, у меня есть скрипт кастомного инспектора, так вот столкнулся с такой занятной проблемкой, по какой-то не ясной причине не удается "добраться" (а точнее получить) значения массива массивов (bool[][]), одномерный массив удается получить, а вот такой нет.

Синтаксис:
Используется csharp

    public void OnEnable()
    {
        subject = target as DeterminingBuilding;

        ResourcesName = subject.ResourcesName;
        ResourcesAmount = subject.ResourcesAmount;
     }
 


Безусловно в скрипте на который делается кастомный инспектор, они имеются и имют уровень доступа публичный

Собственно вопрос, действительно нельзя получить значения или я не правильно делаю?

Ах, да, всем заранее спасибо!


Решение в конце.

Re: Custom editor

СообщениеДобавлено: 19 апр 2013, 22:02
seaman
То ли я чего не пойму...
А как приведенный скрипт связан с заданным вопросом?

Re: Custom editor

СообщениеДобавлено: 19 апр 2013, 22:05
AMD
С помощью вот этого кусочка получаю значения.

Все остальные получаемые таким же способом успешно проходят юнит тесты этот нет.

Дело в том что, строчка дебага говорит, это эти массивы объявлены, но не заданы. (подчеркну, остальное полученное таким же способом успешно выводится)

Re: Custom editor

СообщениеДобавлено: 20 апр 2013, 07:17
Nicloay
Чет я не заметил что ты используешь target. В едиторе доступ к пропертям идет обычно через него http://docs.unity3d.com/Documentation/S ... arget.html



Upd: ступил. Сорри :)

Re: Custom editor

СообщениеДобавлено: 20 апр 2013, 10:23
AndreyMust19
Получить можно только то, что сериализуется. Если вы сохраните в несериализуемый массив, то при следующем запуске [unity 3D] он все равно пропадет. По-моему двумерные и разреженные массивы движок не сериализует.
Если вам нужен массив битов, то лучше создайте класс "BitArray" или "BitMatrix" (в сети наверняка нечто подобное есть). bool в представлении C# это тот же int, а с битовым массивом вы здорово сэкономите память, особенно это важно для передачи данных по сети.

Re: Custom editor

СообщениеДобавлено: 20 апр 2013, 20:49
AMD
Решено костыльным способом, через создание класса не наследованного, в нем создается либо нужный массив, либо нужные переменные, класс сериализуется и создается в нужном месте как массив.
Либо создается еще один класс в котором указывается массив предыдущего класса.

Т.е. принцип матрешки

Синтаксис:
Используется csharp
[Serializable]
public class ResourcesPoint
{
    public string Names;
    public int Amounts;
}

[Serializable]
public class StageSerialized
{
    public string Name;
    public string Info;

    public ResourcesPoint[]Resources;
}


И где-то в нужном скрипте:

Синтаксис:
Используется csharp
public StageSerialized[] Stages;