Создание визуальной новеллы в Unity 6 (4/10)
Реализация интерфейса выбора
Без выбора не было бы визуальной новеллы, и именно этим мы и займемся. Для начала создадим пустой игровой объект и назовем его "ButtonsChoice". Это будет контейнер для наших динамически создаваемых вариантов, и нам нужно будет добавить "Vertical Layout Group", чтобы правильно их отобразить. Создайте несколько кнопок, добавьте их в контейнер и настройте параметры, чтобы убедиться, что все выглядит хорошо. Кнопки должны быть достаточно большими, чтобы на них поместился текст. Вы также можете выбрать свойство «Наилучшее соответствие» для текста кнопки, чтобы подстраховаться.
Теперь сохраним одну из кнопок как префаб ChoiceButton и удалим их все из контейнера кнопок. Они нам сейчас не нужны.
Добавим следующие строки в скрипт InkManager.
[SerializeField] private VerticalLayoutGroup _choiceButtonContainer;
[SerializeField] private Button _choiceButtonPrefab;
Назначьте объект ButtonsChoice, который мы только что создали, и префаб ChoiceButton соответствующим полям в редакторе.
Теперь нам нужно написать код для создания и отображения вариантов. Вы увидите, что мы можем получить доступ к текущим вариантам с помощью _story.currentChoices.
В нашей основной функции обработки выбора мы сначала проверяем, не показываем ли мы уже некоторые варианты. Затем мы перебираем все доступные варианты и создаем кнопку для каждого из них. Наконец, мы добавляем обработчик событий OnClick, который будет запускаться, когда игрок нажимает кнопку выбора. Давайте сейчас реализуем недостающие функции.
В этой функции мы создаем новую кнопку из префаба, вставляем ее в наш контейнер и устанавливаем текст, который мы передали в качестве параметра. Затем мы возвращаем кнопку обратно в нашу функцию DisplayChoices(), где назначаем обработчик события OnClick:
Сначала нам нужно сообщить Ink, какой выбор был нажат, используя ChooseChoiceIndex(). Затем вы увидите здесь новую функцию. После щелчка на одном из вариантов нам нужно убрать их все с экрана, что и сделает RefreshChoiceView(). После этого мы продолжим историю с помощью нашей старой функции DisplayNextLine().
Обновление вариантов довольно простое: мы просто уничтожаем все объекты внутри контейнера кнопки.
Теперь, когда мы можем создавать и отображать варианты, нам нужно знать, когда это делать. Это возвращает меня к свойству _story.canContinue, о котором я уже говорил. Если мы не можем продолжить, это может быть связано с тем, что мы стоим перед выбором. Простой способ убедиться в этом - просто проверить свойство_story.currentChoices.
Давайте теперь обновим функцию DisplayNextLine().
Нажмите кнопку play, и вы сможете просмотреть всю историю!
Вы можете заметить, что ink рассматривает текст выбора как часть истории, и поэтому мы отображаем его в текстовом представлении. Если вы не хотите, чтобы он это делал, вы можете, например, выполнить _story.Continue() в OnClickChoiceButton(), чтобы пропустить эту строку.
На сегодня это все. В следующий раз мы сосредоточимся на персонажах и их эмоциях, что должно сделать нашу игру намного интереснее и увлекательнее!
unity
visual novel
визуальная новелла
Senja_97
А можно готовую работу посмотреть?
Mar 10 2025 11:31