Разные виды кнопок в одном списке

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

Разные виды кнопок в одном списке

Сообщение rhymer 13 апр 2019, 12:42

Здравствуйте! Подскажите, пожалуйста, как реализовать нужный функционал - не могу даже представить, с какой стороны подойти к решению вопроса.

Имеется список, используемый для генерации кнопок. У каждой кнопки в списке есть настройки.
Изображение
Каждый элемент списка - экземпляр класса Button Content, который несёт в себе два параметра: текст кнопки, и Scriptable object, который загружается при нажатии на кнопку.
Синтаксис:
Используется csharp
[Serializable]
public class ButtonContent
{
    public string buttonText;
    public Node gotoNode;
}

Всё отлично работает, кнопки создаются, новые ноды загружаются в соответствии с указанными в инспекторе.
Требуется, чтобы кнопки в списке были разными, в идеале - наследующими класс Button Content. Делать они будут то же самое, но gotoNode будет определяться разными способами, а в инспекторе будет возможность выбора кнопки с последующей настройкой в инспекторе параметров метода, выбирающего gotoNode? к примеру - рандомно из списка, или выбирая один из двух вариантов в зависимости от значения некой переменной. Выглядеть это в инспекторе должно примерно так:
Изображение
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Разные виды кнопок в одном списке

Сообщение samana 13 апр 2019, 13:43

Здравствуйте. Я вообще не уверен в том, что правильно понял задумку, но вы хотите, чтобы у кнопок были разные ноды, которые выглядят в инспекторе тоже по-разному? Если да, то этим вроде занимается CustomPropertyDrawer, который рисует "свою часть инспектора по своему".

Ещё есть такая штука https://docs.unity3d.com/ScriptReferenc ... ditor.html, с помощью которой, в custom инспекторе можно отобразить custom инспектор другого класса.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Разные виды кнопок в одном списке

Сообщение rhymer 13 апр 2019, 17:27

вы хотите, чтобы у кнопок были разные ноды, которые выглядят в инспекторе тоже по-разному?

Не совсем. Я хочу, чтобы у каждой кнопки были два параметра: текст кнопки и нода, которую загружать следующей. Но я хочу, чтобы при нажатии на разные кнопки срабатывали разные методы, присваивающие параметру gotoNode значение. Например, при нажатии на первую кнопку из списка вызывается метод, который выбирает случайную ноду из списка нодов, при нажатии на вторую кнопку срабатывает метод, который выбирает ноду из двух после сравнения двух переменных, и т.д. В идеале - через virtual и переопределение метода.

Проблема в том, что я не знаю, как это сделать не слишком громоздко. А ещё в том, что переменные для каждого метода разные и должны быть настраиваемый через инспектор.
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Разные виды кнопок в одном списке

Сообщение getAlex 17 апр 2019, 22:22

Я мог бы сказать как это сделать, но мне кажется что это будет бесполезно т.к. вам скорее всего нужно что-то вроде визуального скриптинга с нодами https://assetstore.unity.com/packages/t ... nvas-33903
Вы пишете велосипед, только без колёс.
Вам не понадобятся "го ту" и прописывать текстом имя ноды, вы сможете соединять их мышкой. Не говоря уже про ветвления, которые у вас не возможны. И про визуальную составляющую, чтоб иметь полную картину происходящего.
Вам просто нужно будет создать ваши кастомные ноды с нужными вам полями, с выходами и входами, а затем просто накидать их, заполнить поля и соединить. Каждая нода -просто отдельный класс, наследуемый от ноды. Смысл этой системы в возможности комбинировать результаты, последовательность вызова, маршруты вызова, и всё это визуально видеть.
getAlex
Адепт
 
Сообщения: 1775
Зарегистрирован: 10 авг 2013, 18:30

Re: Разные виды кнопок в одном списке

Сообщение rhymer 20 апр 2019, 12:27

getAlex писал(а):Я мог бы сказать как это сделать, но мне кажется что это будет бесполезно т.к. вам скорее всего нужно что-то вроде визуального скриптинга с нодами https://assetstore.unity.com/packages/t ... nvas-33903
Вы пишете велосипед, только без колёс.

Я уже видел эту штуку. Это было бы отличным решением моей проблемы, если бы не одно НО. К сожалению, создать что-то подобное сам я попросту не в состоянии - я программировать толком не умею, просто я уже давно отчаялся найти человека, который был бы готов помочь мне с реализацией моей идеи, которую я вынашиваю уже много лет. На готовые ассеты у меня, во-первых, попросту нет денег, а во-вторых - это уже своего рода принцип: реализовать всё на чистом юнити, не используя сторонние модули.
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Разные виды кнопок в одном списке

Сообщение getAlex 20 апр 2019, 19:34

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

Давайте рассуждать логически:
1) Если у вас нет денег и вы не умеете программировать, то вы не найдёте человека, который вам поможет. Потому что вам нечего ему предложить. Идеи ничего не стоят. Проценты с мифических продаж в перспективе ему даром не нужны, т.к. он и без вас сможет всё сделать и забрать себе все 100%, а не делиться своей работой с бесполезным и ничего не делающим человеком.

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

3) Есть десятки аналогичных бесплатных ассетов https://assetstore.unity.com/packages/t ... ing-115704
То что вы поленились потратить лишних 10 секунд чтоб их найти, а кучу лет пытались создавать велосипеды и костыли - говорит о вас не лучшим образом. И никто в здравом уме к вам после такого не присоединиться

4) Если у вас нет пару лишних баксов, то вся ваша психология будет направлена на выживание, здесь и сейчас, и вы не сможете использовать приёмы долговременной выгоды или здраво и спокойно смотреть на вещи. Т.к. вас будет полностью поглощать ваш процесс выживания и вы за этой стеной перед вашими глазами не будете видеть горизонта. От чего проиграете в долгосрочной перспективе. Вам не проект нужно делать, а денег для начала собрать, при этом ещё не превратившись в нувориша по достижению цели, если вы сейчас так бедны.
getAlex
Адепт
 
Сообщения: 1775
Зарегистрирован: 10 авг 2013, 18:30

Re: Разные виды кнопок в одном списке

Сообщение samana 20 апр 2019, 23:07

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

Re: Разные виды кнопок в одном списке

Сообщение rhymer 21 апр 2019, 02:21

getAlex писал(а):Проценты с мифических продаж

Процентов с мифических продаж не будет, потому что не стоит задачи сделать коммерчески успешный продукт. Стоит задача реализовать задумку и поделиться результатом с теми, кому это будет интересно.

getAlex писал(а): делиться своей работой с бесполезным и ничего не делающим человеком.
Почему вы решили, что я бесполезный и ничего не делающий? Я достаточно опытный видеомонтажер, художник, 3D-моделлер и сценарист, проект небольшой, и единственный аспект, который я не потяну сам - программирование и музыкальное сопровождение. Как уже показала практика, изобретать велосипеды и строгать костыли куда продуктивнее, чем пытаться втолковать что-то снобам, уверенным что
getAlex писал(а):Идеи ничего не стоят
.


getAlex писал(а):вы не рациональный человек
Абсолютно верно. Я не рационален. Я убеждён, что использование ассетов делает мой продукт не моим. К тому же, в ассетах функционал либо недостаточен, а значит, он мне не поможет, либо избыточен, и загружать свой проект тем, что не пригодится я не считаю правильным.

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

getAlex писал(а):
То что вы поленились потратить лишних 10 секунд чтоб их найти, а кучу лет пытались создавать велосипеды и костыли - говорит о вас не лучшим образом. И никто в здравом уме к вам после такого не присоединиться

В своё время я перелопатил немало бесплатных ассетов, и выше я уже объяснил, почему не считаю приемлимым их использовать.

getAlex писал(а): Если у вас нет пару лишних баксов, то вся ваша психология будет направлена на выживание, здесь и сейчас, и вы не сможете использовать приёмы долговременной выгоды или здраво и спокойно смотреть на вещи. Т.к. вас будет полностью поглощать ваш процесс выживания и вы за этой стеной перед вашими глазами не будете видеть горизонта. От чего проиграете в долгосрочной перспективе. Вам не проект нужно делать, а денег для начала собрать, при этом ещё не превратившись в нувориша по достижению цели, если вы сейчас так бедны.


Ну а это уже просто за гранью добра и зла. Не стоит мерить всех своей меркой - деньги далеко не для всех являются мерилом успеха. У меня есть основная работа, которую я люблю. Она не приносит мне капиталы, но даёт моральное удовлетворение и я не намерен от неё отказываться. Этот проект - хобби, способ творческой реализации. Сейчас творческий процесс споткнулся о технические проблемы, но я надеюсь их преодолеть с помощью советов, благо в сообществе есть люди, готовые подсказать и помочь советом по существу. Если хобби принесёт какие-либо дивиденды - тем лучше. Если нет - я не расстроюсь. Мне будет довольно того, что моя идея реализована, увидела свет и стала интересна хоть кому-то, кроме меня.

samana писал(а):А сам метод выбор ноды , сделать с помощью стратегии.
А вам - огромное спасибо за ответ по существу. О кастомном инспекторе я уже задумался. А можно чуть поподробнее о стратегии? Где об этом можно почитать?
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Разные виды кнопок в одном списке

Сообщение samana 21 апр 2019, 12:45

rhymer писал(а):О кастомном инспекторе я уже задумался. А можно чуть поподробнее о стратегии? Где об этом можно почитать?

О паттернах много статей, например вот здесь https://refactoring.guru/ru/design-patterns/strategy
Сегодня пробовал написать под вашу задачу инспектор, чтобы было как на ваших скриншотах, но ничего не получилось толком. ~x(
Создать в родительском инспекторе, инспекторы его дочерних объектов разных типов - это ад какой-то. Наверно, если делать все эти объекты (ButtonContext и его разные объекты-настройки) с помощью ScriptableObject-ов, то наверно получится отрисовать в родительском инспекторе, инспекторы его полей-объектов разных типов, но с помощью Serializable классов, у меня это не получилось.
Я даже удивился, почему в юнити нет такого, чтобы была возможность автоматически рисовать инспектор другого Serializable класса.

Например для простоты, есть класс с полем settings, которое имеет базовый тип SettingsBase, но в дальнейшем этому полю settings конечно можно назначить любой производный тип, от этого базового типа SettingsBase. Как автоматически рисовать содержимое поля settings в зависимости от его текущего значения, которое может быть разным типом? Или если есть массив таких настроек SettingsBase, который заполнен производными типами, как его отобразить на экране, без вот этого действия ~x( X(
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск


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

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

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