Не так сложен чёрт как его малюют) Для эффекта "печатанья" диалога (что буковки падают начиная с определённой высоты вниз с определённой скоростью) я использую, как и писал выше, использую сторонний плагин Animate_text. Он достаёт текст из встроенного файла и печатает его, пока он не допечатывается (с возможностью тегами устанавливать паузы в речи). А вот система, определяющая ответ игрока посложнее, да. Все тексты я храню внутри игры в json-файле (таблице в которой кроме текста также указано какой персонаж говорит, какую эмоцию ему надо включить и с какой стороны - левой или правой - от диалогового окна он должен заговорить, а также как представить / назвать персонажа над диалоговым окном). Редактирую диалоги я прямо в гугл-экселе, а потом вставляю методом ctrl+c ctrl+v в программу, когда нужно проверить очередной билд. Начнем с того, что пока печатается текст - игроку запрещено нажимать на законы и факты, а также не доступна кнопка продолжения диалога. Это сделано для того, чтобы избежать различных багов в логике (впрочем, игрок может дважды кликнуть по мышке и промотать реплику до самого конца, если он почему-то хочет увидеть весь текст целиком). В момент, когда текст допечатывается появляется кнопка "продолжить" и возможность нажимать на любые факты и законы. Дальше может произойти одно из двух: либо игрок нажимает на кнопку "продолжить", либо на факт/закон. - Если игрок нажимает на "продолжить", то игра заглядывает в табличный файл, где хранятся все реплики персонажей, и проверяет - а нужно ли вообще на этой реплике игроку было указывать факт или закон? Если не нужно - происходит переход к следующей по порядку реплике в таблице. Если же нужно указать что-то в книжке, то происходит проверка: а игрок ОБЯЗАН был ответить определённым законом/фактом на вопрос или это не обязательно? Если не обязательно - происходит всё также переход на следующую реплику. Если обязательно - происходит запоминание на какой реплике игрок совершил ошибку, а зачем переход на один из специальных текстов ошибки ("Ой, я чувствую, что мне нужно было указать на факт или закон"), после чего возврат на то место, где игрок ошибся. - Если игрок нажимает на закон или факт логика примерно схожая - происходит проверка - нужно ли было нажимать на закон или факт, обязан ли это был сделать игрок, куда перейти если игрок прав и т.д.
Там ещё много всяких разных условий (например, нужно ли принудительно кидать не на следующую реплику, а на какую-то конкретную другую - помогает создавать "ветки" диалогов) и эффектов (нужно ли открыть дополнительную страницу законов или фактов, нужно ли отыграть определённый визуальный эффект диалога - например вспышку на весь экран, шатание камеры, или звук, нужно ли проверить как игрок прошёл одно из предыдущих дел, чтобы перейти на конкретный другой вариант реплики и увести диалог в другое русло).
Всё это я сделал на простой логике с помощью стандартных встроенных функций движка.
А самое крутое - я смог добавить возможность загружать в игру стороннюю предзаготовленную таблицу, что даст игрокам лёгкую возможность самим создавать свои судебные дела (и даже целые "кампании" из многих игровых дней), используя готовые анимации персонажей и механику суда так, как им будет угодно. Можно их переименовывать и делать свои сюжеты. Нечто подобное сейчас делают фанаты Ace Attorney, создавая собственные сюжетные дела.
Интересно было бы почитать как вы реализовали механику диалогов и прочих текстовых элементов в С3. Выглядит весьма сложно и комплексно.
Не так сложен чёрт как его малюют)
Для эффекта "печатанья" диалога (что буковки падают начиная с определённой высоты вниз с определённой скоростью) я использую, как и писал выше, использую сторонний плагин Animate_text. Он достаёт текст из встроенного файла и печатает его, пока он не допечатывается (с возможностью тегами устанавливать паузы в речи).
А вот система, определяющая ответ игрока посложнее, да.
Все тексты я храню внутри игры в json-файле (таблице в которой кроме текста также указано какой персонаж говорит, какую эмоцию ему надо включить и с какой стороны - левой или правой - от диалогового окна он должен заговорить, а также как представить / назвать персонажа над диалоговым окном). Редактирую диалоги я прямо в гугл-экселе, а потом вставляю методом ctrl+c ctrl+v в программу, когда нужно проверить очередной билд.
Начнем с того, что пока печатается текст - игроку запрещено нажимать на законы и факты, а также не доступна кнопка продолжения диалога. Это сделано для того, чтобы избежать различных багов в логике (впрочем, игрок может дважды кликнуть по мышке и промотать реплику до самого конца, если он почему-то хочет увидеть весь текст целиком).
В момент, когда текст допечатывается появляется кнопка "продолжить" и возможность нажимать на любые факты и законы. Дальше может произойти одно из двух: либо игрок нажимает на кнопку "продолжить", либо на факт/закон.
- Если игрок нажимает на "продолжить", то игра заглядывает в табличный файл, где хранятся все реплики персонажей, и проверяет - а нужно ли вообще на этой реплике игроку было указывать факт или закон? Если не нужно - происходит переход к следующей по порядку реплике в таблице. Если же нужно указать что-то в книжке, то происходит проверка: а игрок ОБЯЗАН был ответить определённым законом/фактом на вопрос или это не обязательно? Если не обязательно - происходит всё также переход на следующую реплику. Если обязательно - происходит запоминание на какой реплике игрок совершил ошибку, а зачем переход на один из специальных текстов ошибки ("Ой, я чувствую, что мне нужно было указать на факт или закон"), после чего возврат на то место, где игрок ошибся.
- Если игрок нажимает на закон или факт логика примерно схожая - происходит проверка - нужно ли было нажимать на закон или факт, обязан ли это был сделать игрок, куда перейти если игрок прав и т.д.
Там ещё много всяких разных условий (например, нужно ли принудительно кидать не на следующую реплику, а на какую-то конкретную другую - помогает создавать "ветки" диалогов) и эффектов (нужно ли открыть дополнительную страницу законов или фактов, нужно ли отыграть определённый визуальный эффект диалога - например вспышку на весь экран, шатание камеры, или звук, нужно ли проверить как игрок прошёл одно из предыдущих дел, чтобы перейти на конкретный другой вариант реплики и увести диалог в другое русло).
Всё это я сделал на простой логике с помощью стандартных встроенных функций движка.
А самое крутое - я смог добавить возможность загружать в игру стороннюю предзаготовленную таблицу, что даст игрокам лёгкую возможность самим создавать свои судебные дела (и даже целые "кампании" из многих игровых дней), используя готовые анимации персонажей и механику суда так, как им будет угодно. Можно их переименовывать и делать свои сюжеты. Нечто подобное сейчас делают фанаты Ace Attorney, создавая собственные сюжетные дела.