com.unity.uiextensions/Scripts/Editor/UIExtensionsMenuOptions.cs

1029 lines
52 KiB
C#
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using UnityEngine.UI.Extensions;
namespace UnityEditor.UI
{
/// <summary>
/// This script adds the Extensions UI menu options to the Unity Editor.
/// </summary>
static internal class ExtensionMenuOptions
{
#region Unity Builder section - Do not change unless UI Source (Editor\MenuOptions) changes
#region Unity Builder properties - Do not change unless UI Source (Editor\MenuOptions) changes
private const string kUILayerName = "UI";
private const float kWidth = 160f;
private const float kThickHeight = 30f;
private const float kThinHeight = 20f;
private const string kStandardSpritePath = "UI/Skin/UISprite.psd";
private const string kBackgroundSpriteResourcePath = "UI/Skin/Background.psd";
private const string kInputFieldBackgroundPath = "UI/Skin/InputFieldBackground.psd";
private const string kKnobPath = "UI/Skin/Knob.psd";
private const string kCheckmarkPath = "UI/Skin/Checkmark.psd";
private static Vector2 s_ThickGUIElementSize = new Vector2(kWidth, kThickHeight);
private static Vector2 s_ThinGUIElementSize = new Vector2(kWidth, kThinHeight);
private static Vector2 s_ImageGUIElementSize = new Vector2(100f, 100f);
private static Color s_DefaultSelectableColor = new Color(1f, 1f, 1f, 1f);
private static Color s_TextColor = new Color(50f / 255f, 50f / 255f, 50f / 255f, 1f);
#endregion
#region Unity Builder methods - Do not change unless UI Source (Editor\MenuOptions) changes
private static void SetPositionVisibleinSceneView(RectTransform canvasRTransform, RectTransform itemTransform)
{
// Find the best scene view
SceneView sceneView = SceneView.lastActiveSceneView;
if (sceneView == null && SceneView.sceneViews.Count > 0)
sceneView = SceneView.sceneViews[0] as SceneView;
// Couldn't find a SceneView. Don't set position.
if (sceneView == null || sceneView.camera == null)
return;
// Create world space Plane from canvas position.
Vector2 localPlanePosition;
Camera camera = sceneView.camera;
Vector3 position = Vector3.zero;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRTransform, new Vector2(camera.pixelWidth / 2, camera.pixelHeight / 2), camera, out localPlanePosition))
{
// Adjust for canvas pivot
localPlanePosition.x = localPlanePosition.x + canvasRTransform.sizeDelta.x * canvasRTransform.pivot.x;
localPlanePosition.y = localPlanePosition.y + canvasRTransform.sizeDelta.y * canvasRTransform.pivot.y;
localPlanePosition.x = Mathf.Clamp(localPlanePosition.x, 0, canvasRTransform.sizeDelta.x);
localPlanePosition.y = Mathf.Clamp(localPlanePosition.y, 0, canvasRTransform.sizeDelta.y);
// Adjust for anchoring
position.x = localPlanePosition.x - canvasRTransform.sizeDelta.x * itemTransform.anchorMin.x;
position.y = localPlanePosition.y - canvasRTransform.sizeDelta.y * itemTransform.anchorMin.y;
Vector3 minLocalPosition;
minLocalPosition.x = canvasRTransform.sizeDelta.x * (0 - canvasRTransform.pivot.x) + itemTransform.sizeDelta.x * itemTransform.pivot.x;
minLocalPosition.y = canvasRTransform.sizeDelta.y * (0 - canvasRTransform.pivot.y) + itemTransform.sizeDelta.y * itemTransform.pivot.y;
Vector3 maxLocalPosition;
maxLocalPosition.x = canvasRTransform.sizeDelta.x * (1 - canvasRTransform.pivot.x) - itemTransform.sizeDelta.x * itemTransform.pivot.x;
maxLocalPosition.y = canvasRTransform.sizeDelta.y * (1 - canvasRTransform.pivot.y) - itemTransform.sizeDelta.y * itemTransform.pivot.y;
position.x = Mathf.Clamp(position.x, minLocalPosition.x, maxLocalPosition.x);
position.y = Mathf.Clamp(position.y, minLocalPosition.y, maxLocalPosition.y);
}
itemTransform.anchoredPosition = position;
itemTransform.localRotation = Quaternion.identity;
itemTransform.localScale = Vector3.one;
}
private static GameObject CreateUIElementRoot(string name, MenuCommand menuCommand, Vector2 size)
{
GameObject parent = menuCommand.context as GameObject;
if (parent == null || parent.GetComponentInParent<Canvas>() == null)
{
parent = GetOrCreateCanvasGameObject();
}
GameObject child = new GameObject(name);
Undo.RegisterCreatedObjectUndo(child, "Create " + name);
Undo.SetTransformParent(child.transform, parent.transform, "Parent " + child.name);
GameObjectUtility.SetParentAndAlign(child, parent);
RectTransform rectTransform = child.AddComponent<RectTransform>();
rectTransform.sizeDelta = size;
if (parent != menuCommand.context) // not a context click, so center in sceneview
{
SetPositionVisibleinSceneView(parent.GetComponent<RectTransform>(), rectTransform);
}
Selection.activeGameObject = child;
return child;
}
static GameObject CreateUIObject(string name, GameObject parent)
{
GameObject go = new GameObject(name);
go.AddComponent<RectTransform>();
GameObjectUtility.SetParentAndAlign(go, parent);
return go;
}
static public void AddCanvas(MenuCommand menuCommand)
{
var go = CreateNewUI();
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
if (go.transform.parent as RectTransform)
{
RectTransform rect = go.transform as RectTransform;
rect.anchorMin = Vector2.zero;
rect.anchorMax = Vector2.one;
rect.anchoredPosition = Vector2.zero;
rect.sizeDelta = Vector2.zero;
}
Selection.activeGameObject = go;
}
static public GameObject CreateNewUI()
{
// Root for the UI
var root = new GameObject("Canvas");
root.layer = LayerMask.NameToLayer(kUILayerName);
Canvas canvas = root.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
root.AddComponent<CanvasScaler>();
root.AddComponent<GraphicRaycaster>();
Undo.RegisterCreatedObjectUndo(root, "Create " + root.name);
// if there is no event system add one...
CreateEventSystem(false);
return root;
}
public static void CreateEventSystem(MenuCommand menuCommand)
{
GameObject parent = menuCommand.context as GameObject;
CreateEventSystem(true, parent);
}
private static void CreateEventSystem(bool select)
{
CreateEventSystem(select, null);
}
private static void CreateEventSystem(bool select, GameObject parent)
{
var esys = Object.FindObjectOfType<EventSystem>();
if (esys == null)
{
var eventSystem = new GameObject("EventSystem");
GameObjectUtility.SetParentAndAlign(eventSystem, parent);
esys = eventSystem.AddComponent<EventSystem>();
eventSystem.AddComponent<StandaloneInputModule>();
eventSystem.AddComponent<TouchInputModule>();
Undo.RegisterCreatedObjectUndo(eventSystem, "Create " + eventSystem.name);
}
if (select && esys != null)
{
Selection.activeGameObject = esys.gameObject;
}
}
// Helper function that returns a Canvas GameObject; preferably a parent of the selection, or other existing Canvas.
static public GameObject GetOrCreateCanvasGameObject()
{
GameObject selectedGo = Selection.activeGameObject;
// Try to find a gameobject that is the selected GO or one if its parents.
Canvas canvas = (selectedGo != null) ? selectedGo.GetComponentInParent<Canvas>() : null;
if (canvas != null && canvas.gameObject.activeInHierarchy)
return canvas.gameObject;
// No canvas in selection or its parents? Then use just any canvas..
canvas = Object.FindObjectOfType(typeof(Canvas)) as Canvas;
if (canvas != null && canvas.gameObject.activeInHierarchy)
return canvas.gameObject;
// No canvas in the scene at all? Then create a new one.
return ExtensionMenuOptions.CreateNewUI();
}
private static void SetDefaultColorTransitionValues(Selectable slider)
{
ColorBlock colors = slider.colors;
colors.highlightedColor = new Color(0.882f, 0.882f, 0.882f);
colors.pressedColor = new Color(0.698f, 0.698f, 0.698f);
colors.disabledColor = new Color(0.521f, 0.521f, 0.521f);
}
private static void SetDefaultTextValues(Text lbl)
{
// Set text values we want across UI elements in default controls.
// Don't set values which are the same as the default values for the Text component,
// since there's no point in that, and it's good to keep them as consistent as possible.
lbl.color = s_TextColor;
}
#endregion
#endregion
#region UI Extensions "Create" Menu items
[MenuItem("GameObject/UI/Extensions/Horizontal Scroll Snap", false)]
static public void AddHorizontalScrollSnap(MenuCommand menuCommand)
{
GameObject horizontalScrollSnapRoot = CreateUIElementRoot("Horizontal Scroll Snap", menuCommand, s_ThickGUIElementSize);
GameObject childContent = CreateUIObject("Content", horizontalScrollSnapRoot);
GameObject childPage01 = CreateUIObject("Page_01", childContent);
GameObject childText = CreateUIObject("Text", childPage01);
// Set RectTransform to stretch
RectTransform rectTransformScrollSnapRoot = horizontalScrollSnapRoot.GetComponent<RectTransform>();
rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
rectTransformScrollSnapRoot.sizeDelta = new Vector2(300f, 150f);
Image image = horizontalScrollSnapRoot.AddComponent<Image>();
image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
image.type = Image.Type.Sliced;
image.color = new Color(1f, 1f, 1f, 0.392f);
ScrollRect sr = horizontalScrollSnapRoot.AddComponent<ScrollRect>();
sr.vertical = false;
sr.horizontal = true;
horizontalScrollSnapRoot.AddComponent<HorizontalScrollSnap>();
//Setup Content container
RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
rectTransformContent.anchorMin = Vector2.zero;
rectTransformContent.anchorMax = new Vector2(1f, 1f);
//rectTransformContent.anchoredPosition = Vector2.zero;
rectTransformContent.sizeDelta = Vector2.zero;
sr.content = rectTransformContent;
//Setup 1st Child
Image pageImage = childPage01.AddComponent<Image>();
pageImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
pageImage.type = Image.Type.Sliced;
pageImage.color = s_DefaultSelectableColor;
RectTransform rectTransformPage01 = childPage01.GetComponent<RectTransform>();
rectTransformPage01.anchorMin = new Vector2(0f, 0.5f);
rectTransformPage01.anchorMax = new Vector2(0f, 0.5f);
//rectTransformPage01.anchoredPosition = Vector2.zero;
//rectTransformPage01.sizeDelta = Vector2.zero;
rectTransformPage01.pivot = new Vector2(0f, 0.5f);
//Setup Text on Page01
Text text = childText.AddComponent<Text>();
text.text = "Page_01";
text.alignment = TextAnchor.MiddleCenter;
text.color = new Color(0.196f, 0.196f, 0.196f);
//Setup Text 1st Child
RectTransform rectTransformPage01Text = childText.GetComponent<RectTransform>();
rectTransformPage01Text.anchorMin = new Vector2(0.5f, 0.5f);
rectTransformPage01Text.anchorMax = new Vector2(0.5f, 0.5f);
//rectTransformPage01Text.anchoredPosition = Vector2.zero;
//rectTransformPage01Text.sizeDelta = Vector2.zero;
rectTransformPage01Text.pivot = new Vector2(0.5f, 0.5f);
//Need to add example child components like in the Asset (SJ)
Selection.activeGameObject = horizontalScrollSnapRoot;
}
[MenuItem("GameObject/UI/Extensions/Vertical Scroll Snap", false)]
static public void AddVerticallScrollSnap(MenuCommand menuCommand)
{
GameObject verticalScrollSnapRoot = CreateUIElementRoot("Vertical Scroll Snap", menuCommand, s_ThickGUIElementSize);
GameObject childContent = CreateUIObject("Content", verticalScrollSnapRoot);
GameObject childPage01 = CreateUIObject("Page_01", childContent);
GameObject childText = CreateUIObject("Text", childPage01);
// Set RectTransform to stretch
RectTransform rectTransformScrollSnapRoot = verticalScrollSnapRoot.GetComponent<RectTransform>();
rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
rectTransformScrollSnapRoot.sizeDelta = new Vector2(300f, 150f);
Image image = verticalScrollSnapRoot.AddComponent<Image>();
image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
image.type = Image.Type.Sliced;
image.color = new Color(1f, 1f, 1f, 0.392f);
ScrollRect sr = verticalScrollSnapRoot.AddComponent<ScrollRect>();
sr.vertical = true;
sr.horizontal = false;
verticalScrollSnapRoot.AddComponent<VerticalScrollSnap>();
//Setup Content container
RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
rectTransformContent.anchorMin = Vector2.zero;
rectTransformContent.anchorMax = new Vector2(1f, 1f);
//rectTransformContent.anchoredPosition = Vector2.zero;
rectTransformContent.sizeDelta = Vector2.zero;
sr.content = rectTransformContent;
//Setup 1st Child
Image pageImage = childPage01.AddComponent<Image>();
pageImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
pageImage.type = Image.Type.Sliced;
pageImage.color = s_DefaultSelectableColor;
RectTransform rectTransformPage01 = childPage01.GetComponent<RectTransform>();
rectTransformPage01.anchorMin = new Vector2(0.5f, 0f);
rectTransformPage01.anchorMax = new Vector2(0.5f, 0f);
rectTransformPage01.anchoredPosition = new Vector2(-rectTransformPage01.sizeDelta.x / 2, rectTransformPage01.sizeDelta.y / 2);
//rectTransformPage01.anchoredPosition = Vector2.zero;
//rectTransformPage01.sizeDelta = Vector2.zero;
rectTransformPage01.pivot = new Vector2(0f, 0.5f);
//Setup Text on Page01
Text text = childText.AddComponent<Text>();
text.text = "Page_01";
text.alignment = TextAnchor.MiddleCenter;
text.color = new Color(0.196f, 0.196f, 0.196f);
//Setup Text 1st Child
RectTransform rectTransformPage01Text = childText.GetComponent<RectTransform>();
rectTransformPage01Text.anchorMin = new Vector2(0.5f, 0.5f);
rectTransformPage01Text.anchorMax = new Vector2(0.5f, 0.5f);
//rectTransformPage01Text.anchoredPosition = Vector2.zero;
//rectTransformPage01Text.sizeDelta = Vector2.zero;
rectTransformPage01Text.pivot = new Vector2(0.5f, 0.5f);
//Need to add example child components like in the Asset (SJ)
Selection.activeGameObject = verticalScrollSnapRoot;
}
[MenuItem("GameObject/UI/Extensions/UI Button", false)]
static public void AddUIButton(MenuCommand menuCommand)
{
GameObject uiButtonRoot = CreateUIElementRoot("UI Button", menuCommand, s_ThickGUIElementSize);
GameObject childText = CreateUIObject("Text", uiButtonRoot);
Image image = uiButtonRoot.AddComponent<Image>();
image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
image.type = Image.Type.Sliced;
image.color = s_DefaultSelectableColor;
Button bt = uiButtonRoot.AddComponent<Button>();
uiButtonRoot.AddComponent<UISelectableExtension>();
SetDefaultColorTransitionValues(bt);
Text text = childText.AddComponent<Text>();
text.text = "Button";
text.alignment = TextAnchor.MiddleCenter;
text.color = new Color(0.196f, 0.196f, 0.196f);
RectTransform textRectTransform = childText.GetComponent<RectTransform>();
textRectTransform.anchorMin = Vector2.zero;
textRectTransform.anchorMax = Vector2.one;
textRectTransform.sizeDelta = Vector2.zero;
Selection.activeGameObject = uiButtonRoot;
}
[MenuItem("GameObject/UI/Extensions/UI Flippable", false)]
static public void AddUIFlippableImage(MenuCommand menuCommand)
{
GameObject go = CreateUIElementRoot("UI Flippable", menuCommand, s_ImageGUIElementSize);
go.AddComponent<Image>();
go.AddComponent<UIFlippable>();
Selection.activeGameObject = go;
}
[MenuItem("GameObject/UI/Extensions/UI Window Base", false)]
static public void AddUIWindowBase(MenuCommand menuCommand)
{
GameObject go = CreateUIElementRoot("UI Window Base", menuCommand, s_ThickGUIElementSize);
go.AddComponent<UIWindowBase>();
go.AddComponent<Image>();
Selection.activeGameObject = go;
}
[MenuItem("GameObject/UI/Extensions/Accordion/Accordion Group", false)]
static public void AddAccordionGroup(MenuCommand menuCommand)
{
GameObject go = CreateUIElementRoot("Accordion Group", menuCommand, s_ThickGUIElementSize);
go.AddComponent<VerticalLayoutGroup>();
go.AddComponent<ContentSizeFitter>();
go.AddComponent<ToggleGroup>();
go.AddComponent<Accordion>();
Selection.activeGameObject = go;
}
[MenuItem("GameObject/UI/Extensions/Accordion/Accordion Element", false)]
static public void AddAccordionElement(MenuCommand menuCommand)
{
GameObject go = CreateUIElementRoot("Accordion Element", menuCommand, s_ThickGUIElementSize);
go.AddComponent<LayoutElement>();
go.AddComponent<AccordionElement>();
Selection.activeGameObject = go;
}
[MenuItem("GameObject/UI/Extensions/AutoComplete ComboBox", false)]
static public void AddAutoCompleteComboBox(MenuCommand menuCommand)
{
GameObject autoCompleteComboBoxRoot = CreateUIElementRoot("AutoCompleteComboBox", menuCommand, s_ThickGUIElementSize);
//Create Template
GameObject itemTemplate = AddButtonAsChild(autoCompleteComboBoxRoot);
//Create Inputfield
GameObject inputField = AddInputFieldAsChild(autoCompleteComboBoxRoot);
//Create Overlay
GameObject overlay = CreateUIObject("Overlay", autoCompleteComboBoxRoot);
GameObject overlayScrollPanel = CreateUIObject("ScrollPanel", overlay);
GameObject overlayScrollPanelItems = CreateUIObject("Items", overlayScrollPanel);
GameObject overlayScrollPanelScrollBar = AddScrollbarAsChild(overlayScrollPanel);
//Create Arrow Button
GameObject arrowButton = AddButtonAsChild(autoCompleteComboBoxRoot);
//Setup ComboBox
var autoCompleteComboBox = autoCompleteComboBoxRoot.AddComponent<AutoCompleteComboBox>();
var cbbRT = autoCompleteComboBoxRoot.GetComponent<RectTransform>();
//Setup Template
itemTemplate.name = "ItemTemplate";
var itemTemplateRT = itemTemplate.GetComponent<RectTransform>();
itemTemplateRT.sizeDelta = cbbRT.sizeDelta;
var itemTemplateButton = itemTemplate.GetComponent<Button>();
itemTemplateButton.transition = Selectable.Transition.None;
var itemTemplateLayoutElement = itemTemplate.AddComponent<LayoutElement>();
itemTemplateLayoutElement.minHeight = cbbRT.rect.height;
itemTemplate.SetActive(false);
//Setup InputField
var inputFieldRT = inputField.GetComponent<RectTransform>();
inputFieldRT.anchorMin = Vector2.zero;
inputFieldRT.anchorMax = Vector2.one;
inputFieldRT.sizeDelta = Vector2.zero;
Events.UnityEventTools.AddPersistentListener<string>(inputField.GetComponent<InputField>().onValueChange, new UnityEngine.Events.UnityAction<string>(autoCompleteComboBox.OnValueChanged));
//Setup Overlay
var overlayRT = overlay.GetComponent<RectTransform>();
overlayRT.anchorMin = new Vector2(0f, 1f);
overlayRT.anchorMax = new Vector2(0f, 1f);
overlayRT.sizeDelta = new Vector2(0f, 1f);
overlayRT.pivot = new Vector2(0f, 1f);
overlay.AddComponent<Image>().color = new Color(0.243f, 0.871f, 0f, 0f);
Events.UnityEventTools.AddBoolPersistentListener(overlay.AddComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(autoCompleteComboBox.ToggleDropdownPanel), true);
//Overlay Scroll Panel
var overlayScrollPanelRT = overlayScrollPanel.GetComponent<RectTransform>();
overlayScrollPanelRT.position += new Vector3(0, -cbbRT.sizeDelta.y, 0);
overlayScrollPanelRT.anchorMin = new Vector2(0f, 1f);
overlayScrollPanelRT.anchorMax = new Vector2(0f, 1f);
overlayScrollPanelRT.sizeDelta = new Vector2(cbbRT.sizeDelta.x, cbbRT.sizeDelta.y * 3);
overlayScrollPanelRT.pivot = new Vector2(0f, 1f);
overlayScrollPanel.AddComponent<Image>();
overlayScrollPanel.AddComponent<Mask>();
var scrollRect = overlayScrollPanel.AddComponent<ScrollRect>();
scrollRect.horizontal = false;
scrollRect.movementType = ScrollRect.MovementType.Clamped;
scrollRect.verticalScrollbar = overlayScrollPanelScrollBar.GetComponent<Scrollbar>();
//Overlay Items list
var overlayScrollPanelItemsRT = overlayScrollPanelItems.GetComponent<RectTransform>();
overlayScrollPanelItemsRT.position += new Vector3(5, 0, 0);
overlayScrollPanelItemsRT.anchorMin = new Vector2(0f, 1f);
overlayScrollPanelItemsRT.anchorMax = new Vector2(0f, 1f);
overlayScrollPanelItemsRT.sizeDelta = new Vector2(120f, 5f);
overlayScrollPanelItemsRT.pivot = new Vector2(0f, 1f);
scrollRect.content = overlayScrollPanelItemsRT;
var overlayScrollPanelItemsVLG = overlayScrollPanelItems.AddComponent<VerticalLayoutGroup>();
overlayScrollPanelItemsVLG.padding = new RectOffset(0, 0, 5, 0);
var overlayScrollPanelItemsFitter = overlayScrollPanelItems.AddComponent<ContentSizeFitter>();
overlayScrollPanelItemsFitter.verticalFit = ContentSizeFitter.FitMode.MinSize;
//Overlay Scrollbar
var overlayScrollPanelScrollbarRT = overlayScrollPanelScrollBar.GetComponent<RectTransform>();
overlayScrollPanelScrollbarRT.anchorMin = new Vector2(1f, 0f);
overlayScrollPanelScrollbarRT.anchorMax = Vector2.one;
overlayScrollPanelScrollbarRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, 0f);
overlayScrollPanelScrollbarRT.pivot = Vector2.one;
overlayScrollPanelScrollbarRT.GetComponent<Scrollbar>().direction = Scrollbar.Direction.BottomToTop;
overlayScrollPanelScrollBar.transform.GetChild(0).name = "SlidingArea";
//Arrow Button
arrowButton.name = "ArrowBtn";
var arrowButtonRT = arrowButton.GetComponent<RectTransform>();
arrowButtonRT.anchorMin = Vector2.one;
arrowButtonRT.anchorMax = Vector2.one;
arrowButtonRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, cbbRT.sizeDelta.y);
arrowButtonRT.pivot = Vector2.one;
Events.UnityEventTools.AddBoolPersistentListener(arrowButton.GetComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(autoCompleteComboBox.ToggleDropdownPanel), true);
arrowButton.GetComponentInChildren<Text>().text = "▼";
Selection.activeGameObject = autoCompleteComboBoxRoot;
}
[MenuItem("GameObject/UI/Extensions/ComboBox", false)]
static public void AddComboBox(MenuCommand menuCommand)
{
GameObject comboBoxRoot = CreateUIElementRoot("ComboBox", menuCommand, s_ThickGUIElementSize);
//Create Template
GameObject itemTemplate = AddButtonAsChild(comboBoxRoot);
//Create Inputfield
GameObject inputField = AddInputFieldAsChild(comboBoxRoot);
//Create Overlay
GameObject overlay = CreateUIObject("Overlay", comboBoxRoot);
GameObject overlayScrollPanel = CreateUIObject("ScrollPanel", overlay);
GameObject overlayScrollPanelItems = CreateUIObject("Items", overlayScrollPanel);
GameObject overlayScrollPanelScrollBar = AddScrollbarAsChild(overlayScrollPanel);
//Create Arrow Button
GameObject arrowButton = AddButtonAsChild(comboBoxRoot);
//Setup ComboBox
var comboBox = comboBoxRoot.AddComponent<ComboBox>();
var cbbRT = comboBoxRoot.GetComponent<RectTransform>();
//Setup Template
itemTemplate.name = "ItemTemplate";
var itemTemplateRT = itemTemplate.GetComponent<RectTransform>();
itemTemplateRT.sizeDelta = cbbRT.sizeDelta;
var itemTemplateButton = itemTemplate.GetComponent<Button>();
itemTemplateButton.transition = Selectable.Transition.None;
var itemTemplateLayoutElement = itemTemplate.AddComponent<LayoutElement>();
itemTemplateLayoutElement.minHeight = cbbRT.rect.height;
itemTemplate.SetActive(false);
//Setup InputField
var inputFieldRT = inputField.GetComponent<RectTransform>();
inputFieldRT.anchorMin = Vector2.zero;
inputFieldRT.anchorMax = Vector2.one;
inputFieldRT.sizeDelta = Vector2.zero;
Events.UnityEventTools.AddPersistentListener<string>(inputField.GetComponent<InputField>().onValueChange, new UnityEngine.Events.UnityAction<string>(comboBox.OnValueChanged));
//Setup Overlay
var overlayRT = overlay.GetComponent<RectTransform>();
overlayRT.anchorMin = new Vector2(0f, 1f);
overlayRT.anchorMax = new Vector2(0f, 1f);
overlayRT.sizeDelta = new Vector2(0f, 1f);
overlayRT.pivot = new Vector2(0f, 1f);
overlay.AddComponent<Image>().color = new Color(0.243f, 0.871f, 0f, 0f);
Events.UnityEventTools.AddBoolPersistentListener(overlay.AddComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(comboBox.ToggleDropdownPanel), true);
//Overlay Scroll Panel
var overlayScrollPanelRT = overlayScrollPanel.GetComponent<RectTransform>();
overlayScrollPanelRT.position += new Vector3(0, -cbbRT.sizeDelta.y, 0);
overlayScrollPanelRT.anchorMin = new Vector2(0f, 1f);
overlayScrollPanelRT.anchorMax = new Vector2(0f, 1f);
overlayScrollPanelRT.sizeDelta = new Vector2(cbbRT.sizeDelta.x, cbbRT.sizeDelta.y * 3);
overlayScrollPanelRT.pivot = new Vector2(0f, 1f);
overlayScrollPanel.AddComponent<Image>();
overlayScrollPanel.AddComponent<Mask>();
var scrollRect = overlayScrollPanel.AddComponent<ScrollRect>();
scrollRect.horizontal = false;
scrollRect.movementType = ScrollRect.MovementType.Clamped;
scrollRect.verticalScrollbar = overlayScrollPanelScrollBar.GetComponent<Scrollbar>();
//Overlay Items list
var overlayScrollPanelItemsRT = overlayScrollPanelItems.GetComponent<RectTransform>();
overlayScrollPanelItemsRT.position += new Vector3(5, 0, 0);
overlayScrollPanelItemsRT.anchorMin = new Vector2(0f, 1f);
overlayScrollPanelItemsRT.anchorMax = new Vector2(0f, 1f);
overlayScrollPanelItemsRT.sizeDelta = new Vector2(120f, 5f);
overlayScrollPanelItemsRT.pivot = new Vector2(0f, 1f);
scrollRect.content = overlayScrollPanelItemsRT;
var overlayScrollPanelItemsVLG = overlayScrollPanelItems.AddComponent<VerticalLayoutGroup>();
overlayScrollPanelItemsVLG.padding = new RectOffset(0, 0, 5, 0);
var overlayScrollPanelItemsFitter = overlayScrollPanelItems.AddComponent<ContentSizeFitter>();
overlayScrollPanelItemsFitter.verticalFit = ContentSizeFitter.FitMode.MinSize;
//Overlay Scrollbar
var overlayScrollPanelScrollbarRT = overlayScrollPanelScrollBar.GetComponent<RectTransform>();
overlayScrollPanelScrollbarRT.anchorMin = new Vector2(1f, 0f);
overlayScrollPanelScrollbarRT.anchorMax = Vector2.one;
overlayScrollPanelScrollbarRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, 0f);
overlayScrollPanelScrollbarRT.pivot = Vector2.one;
overlayScrollPanelScrollbarRT.GetComponent<Scrollbar>().direction = Scrollbar.Direction.BottomToTop;
overlayScrollPanelScrollBar.transform.GetChild(0).name = "SlidingArea";
//Arrow Button
arrowButton.name = "ArrowBtn";
var arrowButtonRT = arrowButton.GetComponent<RectTransform>();
arrowButtonRT.anchorMin = Vector2.one;
arrowButtonRT.anchorMax = Vector2.one;
arrowButtonRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, cbbRT.sizeDelta.y);
arrowButtonRT.pivot = Vector2.one;
Events.UnityEventTools.AddBoolPersistentListener(arrowButton.GetComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(comboBox.ToggleDropdownPanel), true);
arrowButton.GetComponentInChildren<Text>().text = "▼";
Selection.activeGameObject = comboBoxRoot;
}
[MenuItem("GameObject/UI/Extensions/DropDownList", false)]
static public void AddDropDownList(MenuCommand menuCommand)
{
GameObject dropDownListRoot = CreateUIElementRoot("DropDownList", menuCommand, s_ThickGUIElementSize);
//Create Template
GameObject itemTemplate = AddButtonAsChild(dropDownListRoot);
GameObject itemTemplateImage = AddImageAsChild(itemTemplate);
itemTemplateImage.GetComponent<Transform>().SetSiblingIndex(0);
//Create Main Button
GameObject mainButton = AddButtonAsChild(dropDownListRoot);
GameObject mainButtonImage = AddImageAsChild(mainButton);
mainButtonImage.GetComponent<Transform>().SetSiblingIndex(0);
//Create Overlay
GameObject overlay = CreateUIObject("Overlay", dropDownListRoot);
GameObject overlayScrollPanel = CreateUIObject("ScrollPanel", overlay);
GameObject overlayScrollPanelItems = CreateUIObject("Items", overlayScrollPanel);
GameObject overlayScrollPanelScrollBar = AddScrollbarAsChild(overlayScrollPanel);
//Create Arrow Button
GameObject arrowText = AddTextAsChild(dropDownListRoot);
//Setup DropDownList
var dropDownList = dropDownListRoot.AddComponent<DropDownList>();
var cbbRT = dropDownListRoot.GetComponent<RectTransform>();
//Setup Template
itemTemplate.name = "ItemTemplate";
var itemTemplateRT = itemTemplate.GetComponent<RectTransform>();
itemTemplateRT.sizeDelta = cbbRT.sizeDelta;
var itemTemplateButton = itemTemplate.GetComponent<Button>();
itemTemplateButton.transition = Selectable.Transition.None;
var itemTemplateLayoutElement = itemTemplate.AddComponent<LayoutElement>();
itemTemplateLayoutElement.minHeight = cbbRT.rect.height;
itemTemplate.SetActive(false);
//Item Template Image
var itemTemplateImageRT = itemTemplateImage.GetComponent<RectTransform>();
itemTemplateImageRT.anchorMin = Vector2.zero;
itemTemplateImageRT.anchorMax = new Vector2(0f, 1f);
itemTemplateImageRT.pivot = new Vector2(0f, 1f);
itemTemplateImageRT.sizeDelta = Vector2.one;
itemTemplateImageRT.offsetMin = new Vector2(4f, 4f);
itemTemplateImageRT.offsetMax = new Vector2(22f, -4f);
itemTemplateImage.GetComponent<Image>().color = new Color(0, 0, 0, 0);
//Setup Main Button
mainButton.name = "MainButton";
var mainButtonRT = mainButton.GetComponent<RectTransform>();
mainButtonRT.anchorMin = Vector2.zero;
mainButtonRT.anchorMax = Vector2.one;
mainButtonRT.sizeDelta = Vector2.zero;
Events.UnityEventTools.AddBoolPersistentListener(mainButton.GetComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(dropDownList.ToggleDropdownPanel), true);
var mainButtonText = mainButton.GetComponentInChildren<Text>();
mainButtonText.alignment = TextAnchor.MiddleLeft;
mainButtonText.text = "Select Item...";
var mainButtonTextRT = mainButtonText.GetComponent<RectTransform>();
mainButtonTextRT.anchorMin = Vector2.zero;
mainButtonTextRT.anchorMin = Vector2.zero;
mainButtonTextRT.pivot = new Vector2(0f, 1f);
mainButtonTextRT.offsetMin = new Vector2(10f,0f);
mainButtonTextRT.offsetMax = new Vector2(-4f,0f);
//Main Button Image
var mainButtonImageRT = mainButtonImage.GetComponent<RectTransform>();
mainButtonImageRT.anchorMin = Vector2.zero;
mainButtonImageRT.anchorMax = new Vector2(0f, 1f);
mainButtonImageRT.pivot = new Vector2(0f, 1f);
mainButtonImageRT.sizeDelta = Vector2.one;
mainButtonImageRT.offsetMin = new Vector2(4f, 4f);
mainButtonImageRT.offsetMax = new Vector2(22f, -4f);
mainButtonImageRT.GetComponent<Image>().color = new Color(1, 1, 1, 0);
//Setup Overlay
var overlayRT = overlay.GetComponent<RectTransform>();
overlayRT.anchorMin = new Vector2(0f, 1f);
overlayRT.anchorMax = new Vector2(0f, 1f);
overlayRT.sizeDelta = new Vector2(0f, 1f);
overlayRT.pivot = new Vector2(0f, 1f);
overlay.AddComponent<Image>().color = new Color(0.243f, 0.871f, 0f, 0f);
Events.UnityEventTools.AddBoolPersistentListener(overlay.AddComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(dropDownList.ToggleDropdownPanel), true);
//Overlay Scroll Panel
var overlayScrollPanelRT = overlayScrollPanel.GetComponent<RectTransform>();
overlayScrollPanelRT.position += new Vector3(0, -cbbRT.sizeDelta.y, 0);
overlayScrollPanelRT.anchorMin = new Vector2(0f, 1f);
overlayScrollPanelRT.anchorMax = new Vector2(0f, 1f);
overlayScrollPanelRT.sizeDelta = new Vector2(cbbRT.sizeDelta.x, cbbRT.sizeDelta.y * 3);
overlayScrollPanelRT.pivot = new Vector2(0f, 1f);
overlayScrollPanel.AddComponent<Image>();
overlayScrollPanel.AddComponent<Mask>();
var scrollRect = overlayScrollPanel.AddComponent<ScrollRect>();
scrollRect.horizontal = false;
scrollRect.movementType = ScrollRect.MovementType.Clamped;
scrollRect.verticalScrollbar = overlayScrollPanelScrollBar.GetComponent<Scrollbar>();
//Overlay Items list
var overlayScrollPanelItemsRT = overlayScrollPanelItems.GetComponent<RectTransform>();
overlayScrollPanelItemsRT.position += new Vector3(5, 0, 0);
overlayScrollPanelItemsRT.anchorMin = new Vector2(0f, 1f);
overlayScrollPanelItemsRT.anchorMax = new Vector2(0f, 1f);
overlayScrollPanelItemsRT.sizeDelta = new Vector2(120f, 5f);
overlayScrollPanelItemsRT.pivot = new Vector2(0f, 1f);
scrollRect.content = overlayScrollPanelItemsRT;
var overlayScrollPanelItemsVLG = overlayScrollPanelItems.AddComponent<VerticalLayoutGroup>();
overlayScrollPanelItemsVLG.padding = new RectOffset(0, 0, 5, 0);
var overlayScrollPanelItemsFitter = overlayScrollPanelItems.AddComponent<ContentSizeFitter>();
overlayScrollPanelItemsFitter.verticalFit = ContentSizeFitter.FitMode.MinSize;
//Overlay Scrollbar
var overlayScrollPanelScrollbarRT = overlayScrollPanelScrollBar.GetComponent<RectTransform>();
overlayScrollPanelScrollbarRT.anchorMin = new Vector2(1f, 0f);
overlayScrollPanelScrollbarRT.anchorMax = Vector2.one;
overlayScrollPanelScrollbarRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, 0f);
overlayScrollPanelScrollbarRT.pivot = Vector2.one;
overlayScrollPanelScrollbarRT.GetComponent<Scrollbar>().direction = Scrollbar.Direction.BottomToTop;
overlayScrollPanelScrollBar.transform.GetChild(0).name = "SlidingArea";
//Arrow Button
arrowText.name = "Arrow";
var arrowTextRT = arrowText.GetComponent<RectTransform>();
arrowTextRT.anchorMin = new Vector2(1f, 0f);
arrowTextRT.anchorMax = Vector2.one;
arrowTextRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, cbbRT.sizeDelta.y);
arrowTextRT.pivot = new Vector2(1f, 0.5f);
var arrowTextComponent = arrowText.GetComponent<Text>();
arrowTextComponent.text = "▼";
arrowTextComponent.alignment = TextAnchor.MiddleCenter;
var arrowTextCanvasGroup = arrowText.AddComponent<CanvasGroup>();
arrowTextCanvasGroup.interactable = false;
arrowTextCanvasGroup.blocksRaycasts = false;
Selection.activeGameObject = dropDownListRoot;
}
[MenuItem("GameObject/UI/Extensions/Selection Box", false)]
static public void AddSelectionBox(MenuCommand menuCommand)
{
var go = CreateNewUI();
go.name = "Selection Box";
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
RectTransform rect = go.transform as RectTransform;
rect.anchorMin = Vector2.zero;
rect.anchorMax = Vector2.one;
rect.anchoredPosition = Vector2.zero;
rect.sizeDelta = Vector2.zero;
Image image = go.AddComponent<Image>();
image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
image.type = Image.Type.Sliced;
image.fillCenter = false;
image.color = new Color(1f, 1f, 1f, 0.392f);
SelectionBox selectableArea = go.AddComponent<SelectionBox>();
selectableArea.selectionMask = rect;
selectableArea.color = new Color(0.816f, 0.816f, 0.816f, 0.353f);
GameObject childSelectableItem = CreateUIObject("Selectable", go);
childSelectableItem.AddComponent<Image>();
childSelectableItem.AddComponent<ExampleSelectable>();
Selection.activeGameObject = go;
}
[MenuItem("GameObject/UI/Extensions/Bound Tooltip/Tooltip", false)]
static public void AddBoundTooltip(MenuCommand menuCommand)
{
GameObject go = CreateUIElementRoot("Tooltip", menuCommand, s_ImageGUIElementSize);
var tooltip = go.AddComponent<BoundTooltipTrigger>();
tooltip.text = "This is my Tooltip Text";
var boundTooltip = go.AddComponent<Image>();
boundTooltip.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
// if there is no ToolTipItem add one...
CreateToolTipItem(false, go);
Selection.activeGameObject = go;
}
private static void CreateToolTipItem(bool select)
{
CreateToolTipItem(select, null);
}
private static void CreateToolTipItem(bool select, GameObject parent)
{
var btti = Object.FindObjectOfType<BoundTooltipItem>();
if (btti == null)
{
var boundTooltipItem = CreateUIObject("ToolTipItem", parent.GetComponentInParent<Canvas>().gameObject);
btti = boundTooltipItem.AddComponent<BoundTooltipItem>();
var boundTooltipItemCanvasGroup = boundTooltipItem.AddComponent<CanvasGroup>();
boundTooltipItemCanvasGroup.interactable = false;
boundTooltipItemCanvasGroup.blocksRaycasts = false;
var boundTooltipItemImage = boundTooltipItem.AddComponent<Image>();
boundTooltipItemImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
var boundTooltipItemText = CreateUIObject("Text", boundTooltipItem);
var boundTooltipItemTextRT = boundTooltipItemText.GetComponent<RectTransform>();
boundTooltipItemTextRT.anchorMin = Vector2.zero;
boundTooltipItemTextRT.anchorMax = Vector2.one;
boundTooltipItemTextRT.sizeDelta = Vector2.one;
var boundTooltipItemTextcomponent = boundTooltipItemText.AddComponent<Text>();
boundTooltipItemTextcomponent.alignment = TextAnchor.MiddleCenter;
Undo.RegisterCreatedObjectUndo(boundTooltipItem, "Create " + boundTooltipItem.name);
}
if (select && btti != null)
{
Selection.activeGameObject = btti.gameObject;
}
}
[MenuItem("GameObject/UI/Extensions/Progress Bar", false)]
static public void AddSlider(MenuCommand menuCommand)
{
// Create GOs Hierarchy
GameObject root = CreateUIElementRoot("Progress Bar", menuCommand, s_ThinGUIElementSize);
GameObject background = CreateUIObject("Background", root);
GameObject fillArea = CreateUIObject("Fill Area", root);
GameObject fill = CreateUIObject("Fill", fillArea);
// Background
Image backgroundImage = background.AddComponent<Image>();
backgroundImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
backgroundImage.type = Image.Type.Sliced;
backgroundImage.color = s_DefaultSelectableColor;
RectTransform backgroundRect = background.GetComponent<RectTransform>();
backgroundRect.anchorMin = new Vector2(0, 0.25f);
backgroundRect.anchorMax = new Vector2(1, 0.75f);
backgroundRect.sizeDelta = new Vector2(0, 0);
// Fill Area
RectTransform fillAreaRect = fillArea.GetComponent<RectTransform>();
fillAreaRect.anchorMin = new Vector2(0, 0.25f);
fillAreaRect.anchorMax = new Vector2(1, 0.75f);
fillAreaRect.anchoredPosition = Vector2.zero;
fillAreaRect.sizeDelta = Vector2.zero;
// Fill
Image fillImage = fill.AddComponent<Image>();
fillImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
fillImage.type = Image.Type.Sliced;
fillImage.color = s_DefaultSelectableColor;
RectTransform fillRect = fill.GetComponent<RectTransform>();
fillRect.sizeDelta = Vector2.zero;
// Setup slider component
Slider slider = root.AddComponent<Slider>();
slider.value = 0;
slider.fillRect = fill.GetComponent<RectTransform>();
slider.targetGraphic = fillImage;
slider.direction = Slider.Direction.LeftToRight;
SetDefaultColorTransitionValues(slider);
}
[MenuItem("GameObject/UI/Extensions/Primatives/UI Line Renderer", false)]
static public void AddUILineRenderer(MenuCommand menuCommand)
{
GameObject go = CreateUIElementRoot("UI LineRenderer", menuCommand, s_ImageGUIElementSize);
go.AddComponent<UILineRenderer>();
Selection.activeGameObject = go;
}
[MenuItem("GameObject/UI/Extensions/Primatives/UI Line Texture Renderer", false)]
static public void AddUILineTextureRenderer(MenuCommand menuCommand)
{
GameObject go = CreateUIElementRoot("UI LineTextureRenderer", menuCommand, s_ImageGUIElementSize);
go.AddComponent<UILineTextureRenderer>();
Selection.activeGameObject = go;
}
[MenuItem("GameObject/UI/Extensions/Primatives/UI Circle", false)]
static public void AddUICircle(MenuCommand menuCommand)
{
GameObject go = CreateUIElementRoot("UI Circle", menuCommand, s_ImageGUIElementSize);
go.AddComponent<UICircle>();
Selection.activeGameObject = go;
}
#endregion
#region Helper Functions
private static GameObject AddInputFieldAsChild(GameObject parent)
{
GameObject root = CreateUIObject("InputField", parent);
GameObject childPlaceholder = CreateUIObject("Placeholder", root);
GameObject childText = CreateUIObject("Text", root);
Image image = root.AddComponent<Image>();
image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kInputFieldBackgroundPath);
image.type = Image.Type.Sliced;
image.color = s_DefaultSelectableColor;
InputField inputField = root.AddComponent<InputField>();
SetDefaultColorTransitionValues(inputField);
Text text = childText.AddComponent<Text>();
text.text = "";
text.supportRichText = false;
SetDefaultTextValues(text);
Text placeholder = childPlaceholder.AddComponent<Text>();
placeholder.text = "Enter text...";
placeholder.fontStyle = FontStyle.Italic;
// Make placeholder color half as opaque as normal text color.
Color placeholderColor = text.color;
placeholderColor.a *= 0.5f;
placeholder.color = placeholderColor;
RectTransform textRectTransform = childText.GetComponent<RectTransform>();
textRectTransform.anchorMin = Vector2.zero;
textRectTransform.anchorMax = Vector2.one;
textRectTransform.sizeDelta = Vector2.zero;
textRectTransform.offsetMin = new Vector2(10, 6);
textRectTransform.offsetMax = new Vector2(-10, -7);
RectTransform placeholderRectTransform = childPlaceholder.GetComponent<RectTransform>();
placeholderRectTransform.anchorMin = Vector2.zero;
placeholderRectTransform.anchorMax = Vector2.one;
placeholderRectTransform.sizeDelta = Vector2.zero;
placeholderRectTransform.offsetMin = new Vector2(10, 6);
placeholderRectTransform.offsetMax = new Vector2(-10, -7);
inputField.textComponent = text;
inputField.placeholder = placeholder;
return root;
}
private static GameObject AddScrollbarAsChild(GameObject parent)
{
// Create GOs Hierarchy
GameObject scrollbarRoot = CreateUIObject("Scrollbar", parent);
GameObject sliderArea = CreateUIObject("Sliding Area", scrollbarRoot);
GameObject handle = CreateUIObject("Handle", sliderArea);
Image bgImage = scrollbarRoot.AddComponent<Image>();
bgImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
bgImage.type = Image.Type.Sliced;
bgImage.color = s_DefaultSelectableColor;
Image handleImage = handle.AddComponent<Image>();
handleImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
handleImage.type = Image.Type.Sliced;
handleImage.color = s_DefaultSelectableColor;
RectTransform sliderAreaRect = sliderArea.GetComponent<RectTransform>();
sliderAreaRect.sizeDelta = new Vector2(-20, -20);
sliderAreaRect.anchorMin = Vector2.zero;
sliderAreaRect.anchorMax = Vector2.one;
RectTransform handleRect = handle.GetComponent<RectTransform>();
handleRect.sizeDelta = new Vector2(20, 20);
Scrollbar scrollbar = scrollbarRoot.AddComponent<Scrollbar>();
scrollbar.handleRect = handleRect;
scrollbar.targetGraphic = handleImage;
SetDefaultColorTransitionValues(scrollbar);
return scrollbarRoot;
}
private static GameObject AddTextAsChild(GameObject parent)
{
GameObject go = CreateUIObject("Text", parent);
Text lbl = go.AddComponent<Text>();
lbl.text = "New Text";
SetDefaultTextValues(lbl);
return go;
}
private static GameObject AddImageAsChild(GameObject parent)
{
GameObject go = CreateUIObject("Image", parent);
go.AddComponent<Image>();
return go;
}
private static GameObject AddButtonAsChild(GameObject parent)
{
GameObject buttonRoot = CreateUIObject("Button", parent);
GameObject childText = new GameObject("Text");
GameObjectUtility.SetParentAndAlign(childText, buttonRoot);
Image image = buttonRoot.AddComponent<Image>();
image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
image.type = Image.Type.Sliced;
image.color = s_DefaultSelectableColor;
Button bt = buttonRoot.AddComponent<Button>();
SetDefaultColorTransitionValues(bt);
Text text = childText.AddComponent<Text>();
text.text = "Button";
text.alignment = TextAnchor.MiddleCenter;
SetDefaultTextValues(text);
RectTransform textRectTransform = childText.GetComponent<RectTransform>();
textRectTransform.anchorMin = Vector2.zero;
textRectTransform.anchorMax = Vector2.one;
textRectTransform.sizeDelta = Vector2.zero;
return buttonRoot;
}
#endregion
}
}