Хорошо, я пытался понять логику вашего кода, но есть несколько вещей, которые я не понимаю, может быть, лучше, если я попытаюсь объяснить свое дерево диалога Unity.
Сначала: Нам нужно создать объект Tree. Если вам просто нужно бинарное дерево, вам нужны только древовидные переменные:
public class BinaryTree{
private string root;
private BinaryTree left;
private BinaryTree right
getters/setters
}
этот объект даже не должен быть компонентом Unity. root - это «диалог» слева - «optionA» справа - «optionB», если вам не нужен несколько ответов, просто сделайте left = right. Если вам нужен способ определить несколько ответов, я предлагаю вам создать такой объект:
public class Tree{
private Dictionary<string,string> root;
private List<Tree> next;
getters/setters
}
root снова является вашим диалогом. Ключ (который идентифицирует ваш ответ) и значение, которое является фактическим диалогом. next - это список деревьев (вы определяете свой ответ, создавая цикл в следующем и проверяя ключ словаря).
Теперь в методе «Начало» вам нужно создать новый объект Tree и установить ваши ближайшие. Пример
Start(){
BinaryTree bn = new BinaryTree();
bn.Root = "Is this a question?";
BinaryTree left = new BinaryTree();
left.Root = "Nope";
bn.Left = left;
BinaryTree right = new BinaryTree();
right.Root = "Yes it is...";
bn.Right = right;
}
Почти то же самое для версии дерева:
Start(){
Tree bn = new Tree();
bn.Root = new Dictionary<string, string>();
bn.Root.Add("key1", "Do you need something?");
bn.Next = new List<Tree>();
Tree answer1 = new Tree();
answer1.Root = new Dictionary<string, string>();
answer1.Root.Add("key2", "Yes");
bn.Next.Add();
... iterate...
}
Конечно, это всего лишь базовый пример. Лучший способ инициализировать это - добавить ваше диалоговое окно в массив и выполнить итерацию. Во всяком случае.
Теперь вы можете (например) создать кнопку. В Start вы можете инициализировать его текстовое значение для своего корня. В методе PointerDown / Clicked вы можете создать массив возможных ключей ответа, и, например, вы можете создать несколько кнопок для нескольких ответов (или просто использовать 2 статических ответа на кнопку с BinaryTree) и изменить текст на основе answer root value (или значение left / right). каждая из кнопок ответа должна в методе PointerDown / Clicked отправить значение ключа (или левый / правый объект) вашего пользовательского выбора (на практике следующее значение, которое будет отображаться в основной кнопке вопроса). Конечно, «кнопка вопроса» после щелчка снова должна отображать следующий ответ (и, возможно, вы можете решить добавить переменную вопроса bool в свой объект ... или, может быть, вы просто можете использовать только левую сторону для вопроса ... или, может быть, вы можете решить, что если в следующем списке есть только одно значение, это вопрос, и он должен просто показать его в текстовом значении главной кнопки).
И если следующий ну, конечно, вы можете закончить разговор.
Существует несколько способов сделать это.