private static void SetupCanvas(CanvasDialogueUI ui, DialogueSystemController dialogueManager) { if (FindObjectOfType <UnityEngine.EventSystems.EventSystem>() == null) { new GameObject("EventSystem", typeof(UnityEngine.EventSystems.EventSystem), typeof(UnityEngine.EventSystems.StandaloneInputModule)); } var canvas = dialogueManager.GetComponentInChildren <Canvas>(); if (canvas == null) { var canvasObject = new GameObject("Canvas"); canvasObject.layer = 5; // Built-in UI layer. canvasObject.AddComponent <Canvas>(); canvasObject.AddComponent <UnityEngine.UI.CanvasScaler>(); canvasObject.AddComponent <UnityEngine.UI.GraphicRaycaster>(); canvas = canvasObject.GetComponent <Canvas>(); canvas.renderMode = RenderMode.ScreenSpaceOverlay; canvasObject.transform.SetParent(dialogueManager.transform); } var uiInstance = Instantiate(ui) as CanvasDialogueUI; uiInstance.name = uiInstance.name.Replace("(Clone)", string.Empty); uiInstance.transform.SetParent(canvas.transform, false); dialogueManager.displaySettings.dialogueUI = uiInstance.gameObject; }
public static void HandleCanvasDialogueUI(CanvasDialogueUI ui, DialogueSystemController dialogueManager) { if (ui == null) { return; } if (Tools.IsPrefab(ui.gameObject) && (ui.GetComponentInParent <Canvas>() == null)) { if (EditorUtility.DisplayDialog("Canvas-Based Dialogue UI", "Would you like to add an instance of this dialogue UI prefab as a child of the Dialogue Manager?", "Add Instance", "Use Prefab")) { SetupCanvas(ui, dialogueManager); } else { //--- Allow prefabs now: dialogueManager.displaySettings.dialogueUI = null; } } }