yurickon Posted August 5, 2025 Posted August 5, 2025 (edited) Всех приветствую! Уважаемые разработчики, я пишу большой скрипт на C# для квестов (для назначения данных из редактора) в своей игре, и натолкнулся на следующее. Мне нужно создать массив массивов классов. Звучит как тавтология, но зато четко отражает суть) Одинарный массив классов создаётся и отображается в редакторе превосходно, но вот вложенный в класс класс (почитал, C# такое вроде поддерживает), хоть и отображается в редакторе, но отсутствует поле с присвоением индекса! Пример кода: public class quest //В компоненте создаём класс ( public class quest_id //Создаём вложенный класс { // здесь объявляем переменные для текущей итерации квеста } ) //далее, здесь же, объявляем наш класс: public quest[] quest_main; //если объявить так, то вложенный класс quest_id не отобразиться в редакторе //если объявить так, то вложенный класс отобразится в редакторе только в виде имени, без возможности указать количество элементов данного массива классов (попросту нет поля с вводом этих элементов), так же не отображаются публичные переменные вложенного класс в редакторе: public quest[] quest_main; // виден в редакторе и можно назначать элементы массива public quest.quest_id[] quest_main_id;//виден в редакторе, но нет возможности назначать элементы массива (поле с вводом отсутствует) Надеюсь, объяснил) Спасибо за любую помощь! Edited August 5, 2025 by yurickon
alexander Posted August 5, 2025 Posted August 5, 2025 День добрый. Вы объявили вложенный класс, но нигде не объявили массив инстансов вложенного класса. Например: public class quest { public class quest_id { string name; int id; } public quest_id[] ids; // !!! } public quest[] quest_main; 1
yurickon Posted August 5, 2025 Author Posted August 5, 2025 @alexander Таак, это интересно! Да, кажется, я этого не сделал... Ладно, приду домой, реализую, по результатам отпишусь. Большое спасибо за подсказку!
yurickon Posted August 5, 2025 Author Posted August 5, 2025 (edited) Итак, что у меня получается в проекте. Код: [Component(PropertyGuid = "4b09e5e2cd367e2092566aad0df573a6f8a97f1c")] public class npc_quest_adv : Component { public Quest_adv_number[] quest_adv_npc; public class Quest_adv_number { public Quest_adv_item[] quest_adv_Item; public class Quest_adv_item { public int Save_dialoq_data; [Parameter(Group = "НОМЕР ЗАПИСИ В БЛОКНОТЕ", Tooltip = "НОМЕР ЗАПИСИ В БЛОКНОТЕ [0] / Итерация записи блокнота [1]")] public int[] Notepad_quest_id = new int[2]; [Parameter(Group = "ПЕРЕКЛЮЧЕНИЯ СОБЫТИЯ В ДИАЛОГЕ", Tooltip = "В этой вкладке назначаем переменные, для блокнота")] public int Quest_adv_men_dial = 0;//переменная обновления диалогов в квестах [ShowInEditor] [Parameter(Group = "ЗАПИСЬ В БЛОКНОТ", Tooltip = "В этой вкладке назначаем переменные, для блокнота")] public int[] Quest_adv_notepad_name; [Parameter(Group = "ЗАПИСЬ В БЛОКНОТ", Tooltip = "В этой вкладке назначаем переменные, для блокнота")] public int[] Quest_adv_notepad_destr; [Parameter(Group = "ЗАПИСЬ В БЛОКНОТ", Tooltip = "В этой вкладке назначаем переменные, для блокнота")] public int[] Quest_adv_notepad_msg; } } } Результат: Как видим, все по прежнему. Что я делаю не так? Спасибо! p.s. @alexander Для окончательной проверки вставил в компонент ваш код. Результат тот же что и у меня: Переменные внутреннего класса сделал public Edited August 5, 2025 by yurickon
alexander Posted August 6, 2025 Posted August 6, 2025 Прикол! Выглядит, как баг в пропертях. Если написать вот так (вынести вложенный класс наружу), то всё будет работать: public class test : Component { public Quest_adv_number[] quest_adv_npc; public class Quest_adv_number { public Quest_adv_item[] quest_adv_Item; } public class Quest_adv_item { public int Save_dialoq_data; [Parameter(Group = "НОМЕР ЗАПИСИ В БЛОКНОТЕ", Tooltip = "НОМЕР ЗАПИСИ В БЛОКНОТЕ [0] / Итерация записи блокнота [1]")] public int[] Notepad_quest_id = new int[2]; [Parameter(Group = "ПЕРЕКЛЮЧЕНИЯ СОБЫТИЯ В ДИАЛОГЕ", Tooltip = "В этой вкладке назначаем переменные, для блокнота")] public int Quest_adv_men_dial = 0;//переменная обновления диалогов в квестах [ShowInEditor] [Parameter(Group = "ЗАПИСЬ В БЛОКНОТ", Tooltip = "В этой вкладке назначаем переменные, для блокнота")] public int[] Quest_adv_notepad_name; [Parameter(Group = "ЗАПИСЬ В БЛОКНОТ", Tooltip = "В этой вкладке назначаем переменные, для блокнота")] public int[] Quest_adv_notepad_destr; [Parameter(Group = "ЗАПИСЬ В БЛОКНОТ", Tooltip = "В этой вкладке назначаем переменные, для блокнота")] public int[] Quest_adv_notepad_msg; } } 1
yurickon Posted August 6, 2025 Author Posted August 6, 2025 @alexander Ого! Да, так я не пробовал, а должен был!) Огромное спасибо!
Recommended Posts