Ну прям диалоговой системой это трудно назвать. Для лучшей диалоговой системы лучше создать класс где можно будет указать текст, картинку, и тд тп, и потом просто создать массив этого класса. Потом просто все идет по такой же схеме только можно будет уже удобно указывать текст диалога и фото. Можно будет еще сделать что-бы событие вызывалось когда проигрывается какой-то сценарий диалога, можно сделать еще что-бы были паузы между точками и запятыми, и тогда уже можно будет назвать не плохой диалоговой системой
Не переменная, а поле. Не функция, а метод. Все имена методов с большой буквы (MSDN, у нас тут на PHP). Соблюдать инкапсуляцию - не делать поля открытыми. Использовать сериализуемые поля, использовать геттеры и сеттеры для доступа из других классов. Наличие в коде двух методов запуска одной корутины (не произносить коруНтина), работающей с одним текстом, без передачи ссылки на корутину в поле и возможности её остановки, в перспективе грозит запуском 2х экземпляров корутины одновременно (нет контроля запуска корутины или флага окончания её работы). Остановить все корутины = остановить ВСЕ корутины в данном скрипте (solid? ). Будет +1 новая корутина, будут проблемы.
Не тестил код, но скорее всего дело в том, что текст это массив предложений. И тебе надо будет разбить весь свой текст на отдельные элементы массива и запихать вовнутрь ИНСПЕКТОРА (правое окно юнити), когда тыкнешь на объект, в который ты кинул скрипт
Если пропустить диалог, пока строчка еще не закончила печататься, не будет ли проблем из-за наложения одной корутины на другую? Сейчас не могу проверить, но у меня частенько с этим бывали баги. Думаю, стоит перед стартом новой корутины принудительно останавливать предыдущую, для более стабильной работы.
Да, всё верно подмечено, в конце видео я немного обрезал этот момент, но там я создал кнопку на весь экран, и дал ей название ScipText, к кнопке была привязана функция scipTextClick(), она проверяла все ли буквы выставлены, если да то запускалась функция NextLine(), если нет, то запускалась StopAllCoroutines(), и заменялся текст по текущему индексу dialogueText.text = lines[index].
Чел, я понимаю хочется громко обозвать ролик.Но это не диалоговая система, а ссаный скрипт по выводу текста в UI, ну да, к чести ты смог написать функцию которая выводит его по 1ой букве....
@@drag_bruh5739 по сути нормальная диалоговая система должна иметь звук при печати , возможность выбора ответа для разных решения событий и.т.д а так это буквально чисто скрипт по выводу текста с небольшой анимацией
это все очень круто но мне нужно создать переменные и в зависимости от их значения загружать разные текстовые фалы тип как с анимацией ты на 1 части диалога выбираеш что ответить и с этого ответа ты переходиш к другой части диалога переход которого соответствует значению некоторых переменных я понимаю как примерно это сделать но не достаточно чтобы реализовать
Я думаю, что вы уже давно решили свою проблему, но похожие вопросы, например с анимациями, я решал через машину состояний (enum). Сейчас планирую пробовать создать свою новеллу, мне кажется это как раз то, что нужно.
Вызов метода ToCharArray() у строки в данном случае совершенно бесполезен и даже вреден, аллоцируется лишняя память только на него. Других ошибок тоже полно, такой себе туториал
Всего 12 часов и Ютуб уже рекомендует такой классный ролик. Спасибо за полезный материал. Всё было понятно и интересно разъяснено. Успехов!
Очень полезный видос, видела от другого блогера на 30 мин, а здесь всё легко и понятно. Очень помогло для создания игры за 7 дней
Всем спасибо за просмотр = )
Блин а как сделать систему диалогов НПС с НПС и чтобы во время этого процесса они просто стояли???
активацию скрипта по тригеру
Ну прям диалоговой системой это трудно назвать. Для лучшей диалоговой системы лучше создать класс где можно будет указать текст, картинку, и тд тп, и потом просто создать массив этого класса. Потом просто все идет по такой же схеме только можно будет уже удобно указывать текст диалога и фото. Можно будет еще сделать что-бы событие вызывалось когда проигрывается какой-то сценарий диалога, можно сделать еще что-бы были паузы между точками и запятыми, и тогда уже можно будет назвать не плохой диалоговой системой
А еще звуки печатания текста, можно будет даже сделать что-бы при определенном сценарии диалога менялся этот звук
Не переменная, а поле. Не функция, а метод. Все имена методов с большой буквы (MSDN, у нас тут на PHP).
Соблюдать инкапсуляцию - не делать поля открытыми.
Использовать сериализуемые поля, использовать геттеры и сеттеры для доступа из других классов.
Наличие в коде двух методов запуска одной корутины (не произносить коруНтина), работающей с одним текстом, без передачи ссылки на корутину в поле и возможности её остановки, в перспективе грозит запуском 2х экземпляров корутины одновременно (нет контроля запуска корутины или флага окончания её работы).
Остановить все корутины = остановить ВСЕ корутины в данном скрипте (solid? ). Будет +1 новая корутина, будут проблемы.
Не могу закинуть свой текст в скрипт, в чём проблема подскажите пожалуйста
Не тестил код, но скорее всего дело в том, что текст это массив предложений. И тебе надо будет разбить весь свой текст на отдельные элементы массива и запихать вовнутрь ИНСПЕКТОРА (правое окно юнити), когда тыкнешь на объект, в который ты кинул скрипт
была таже проблема используй
текст легаси
Если пропустить диалог, пока строчка еще не закончила печататься, не будет ли проблем из-за наложения одной корутины на другую? Сейчас не могу проверить, но у меня частенько с этим бывали баги. Думаю, стоит перед стартом новой корутины принудительно останавливать предыдущую, для более стабильной работы.
Да, всё верно подмечено, в конце видео я немного обрезал этот момент, но там я создал кнопку на весь экран, и дал ей название ScipText, к кнопке была привязана функция scipTextClick(), она проверяла все ли буквы выставлены, если да то запускалась функция NextLine(), если нет, то запускалась StopAllCoroutines(), и заменялся текст по текущему индексу dialogueText.text = lines[index].
Чел, я понимаю хочется громко обозвать ролик.Но это не диалоговая система, а ссаный скрипт по выводу текста в UI, ну да, к чести ты смог написать функцию которая выводит его по 1ой букве....
ну расскажи что такая диалоговая система?
@@drag_bruh5739 по сути нормальная диалоговая система должна иметь звук при печати , возможность выбора ответа для разных решения событий и.т.д а так это буквально чисто скрипт по выводу текста с небольшой анимацией
Спасибо за видео))
Спасибо
А я свою систему писал часа 3-4…
это все очень круто но мне нужно создать переменные и в зависимости от их значения загружать разные текстовые фалы тип как с анимацией ты на 1 части диалога выбираеш что ответить и с этого ответа ты переходиш к другой части диалога переход которого соответствует значению некоторых переменных я понимаю как примерно это сделать но не достаточно чтобы реализовать
какая же жиза
Я думаю, что вы уже давно решили свою проблему, но похожие вопросы, например с анимациями, я решал через машину состояний (enum). Сейчас планирую пробовать создать свою новеллу, мне кажется это как раз то, что нужно.
@@erenjeger3049 оо я использовал программу inky пришлось запарится чтобы разобраться но желаемого я добился
Да я добился того чего хотел используя inky @@erenjeger3049
спасибо большое
Комментарии для продвижения видео
Вызов метода ToCharArray() у строки в данном случае совершенно бесполезен и даже вреден, аллоцируется лишняя память только на него. Других ошибок тоже полно, такой себе туториал
помогло. Но работает через раз:(
Tmp_Text >
скинь скрипт пж
cs 1002 пишет
слишком напоминает код другого блогера
Уж извините. Все это костыли на коленках)
Для чего-то простого норм
Ужасный код за 5 минут, без обид
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class dialog3 : MonoBehaviour {
public string[] lines;
public float speedText;
public Text dialogueText;
public int index;
void Start(){
dialogueText.text = string.Empty;
StartDialogue();
}
void StartDialogue(){
index = 0;
StartCoroutine(TypeLine());
}
IEnumerator TypeLine(){
foreach(char c in lines[index].ToCharArray()){
dialogueText.text += c;
yield return new WaitForSeconds(speedText);
}
}
public void scipTextClick(){
if(dialogueText.text == lines[index]){
NextLines();
}
else{
StopAllCorountines();
dialogueText.text = lines[index];
}
}
void NextLines(){
if(index < lines.Length - 1){
index ++;
dialogueText.text = string.Empty;
StartCoroutine(TypeLine());
}
else{
gameObject.SetActive(false);
}
}
}