using UnityEditor; using UnityEngine; using UnityEngine.UIElements; [RequireComponent(typeof(UIDocument))] public class DialogueBox : MonoBehaviour { private UIDocument uiDocument; private VisualElement root; private Button[] buttons; public void Awake() { uiDocument = GetComponent<UIDocument>(); } public void OnEnable() { root = uiDocument.rootVisualElement; var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/UI/DialogueBox/DialogueBox.uxml"); var styleSheet = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/UI/DialogueBox/DialogueBox.uss"); VisualElement tree = visualTree.CloneTree(); tree.styleSheets.Add(styleSheet); root.Add(tree); buttons = root.Query<Button>().ToList().ToArray(); SetActor("ActorName"); SetText("DialogueText"); for(var i = 0; i < buttons.Length; i++) { var index = i; buttons[i].RegisterCallback<MouseUpEvent>(_ => GetComponent<Storyline>().ApplyTransition(index)); } } public void SetActor(string actor) { root.Q<Label>("Actor").text = actor; } public void SetText(string text) { root.Q<TextElement>("Dialogue").text = text; } public void SetTransitions(Storyline.Transition[] transitions) { for(var i = 0; i < buttons.Length; i++) { if(i < transitions.Length) { buttons[i].visible = true; buttons[i].text = transitions[i].transitionText; } else { buttons[i].visible = false; } } } }