summaryrefslogtreecommitdiff
path: root/Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/UIControls/DefaultControls.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/UIControls/DefaultControls.cs')
-rw-r--r--Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/UIControls/DefaultControls.cs581
1 files changed, 581 insertions, 0 deletions
diff --git a/Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/UIControls/DefaultControls.cs b/Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/UIControls/DefaultControls.cs
new file mode 100644
index 0000000..a22ff9a
--- /dev/null
+++ b/Assets/uGUI-2017.1/UnityEngine.UI/UI/Core/UIControls/DefaultControls.cs
@@ -0,0 +1,581 @@
+using UnityEngine;
+using System.Collections.Generic;
+
+namespace UnityEngine.UI
+{
+ public static class DefaultControls
+ {
+ public struct Resources
+ {
+ public Sprite standard;
+ public Sprite background;
+ public Sprite inputField;
+ public Sprite knob;
+ public Sprite checkmark;
+ public Sprite dropdown;
+ public Sprite mask;
+ }
+
+ private const float kWidth = 160f;
+ private const float kThickHeight = 30f;
+ private const float kThinHeight = 20f;
+ private static Vector2 s_ThickElementSize = new Vector2(kWidth, kThickHeight);
+ private static Vector2 s_ThinElementSize = new Vector2(kWidth, kThinHeight);
+ private static Vector2 s_ImageElementSize = new Vector2(100f, 100f);
+ private static Color s_DefaultSelectableColor = new Color(1f, 1f, 1f, 1f);
+ private static Color s_PanelColor = new Color(1f, 1f, 1f, 0.392f);
+ private static Color s_TextColor = new Color(50f / 255f, 50f / 255f, 50f / 255f, 1f);
+
+ // Helper methods at top
+
+ private static GameObject CreateUIElementRoot(string name, Vector2 size)
+ {
+ GameObject child = new GameObject(name);
+ RectTransform rectTransform = child.AddComponent<RectTransform>();
+ rectTransform.sizeDelta = size;
+ return child;
+ }
+
+ static GameObject CreateUIObject(string name, GameObject parent)
+ {
+ GameObject go = new GameObject(name);
+ go.AddComponent<RectTransform>();
+ SetParentAndAlign(go, parent);
+ return go;
+ }
+
+ 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;
+
+ // Reset() is not called when playing. We still want the default font to be assigned
+ lbl.AssignDefaultFont();
+ }
+
+ 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 SetParentAndAlign(GameObject child, GameObject parent)
+ {
+ if (parent == null)
+ return;
+
+ child.transform.SetParent(parent.transform, false);
+ SetLayerRecursively(child, parent.layer);
+ }
+
+ private static void SetLayerRecursively(GameObject go, int layer)
+ {
+ go.layer = layer;
+ Transform t = go.transform;
+ for (int i = 0; i < t.childCount; i++)
+ SetLayerRecursively(t.GetChild(i).gameObject, layer);
+ }
+
+ // Actual controls
+
+ public static GameObject CreatePanel(Resources resources)
+ {
+ GameObject panelRoot = CreateUIElementRoot("Panel", s_ThickElementSize);
+
+ // Set RectTransform to stretch
+ RectTransform rectTransform = panelRoot.GetComponent<RectTransform>();
+ rectTransform.anchorMin = Vector2.zero;
+ rectTransform.anchorMax = Vector2.one;
+ rectTransform.anchoredPosition = Vector2.zero;
+ rectTransform.sizeDelta = Vector2.zero;
+
+ Image image = panelRoot.AddComponent<Image>();
+ image.sprite = resources.background;
+ image.type = Image.Type.Sliced;
+ image.color = s_PanelColor;
+
+ return panelRoot;
+ }
+
+ public static GameObject CreateButton(Resources resources)
+ {
+ GameObject buttonRoot = CreateUIElementRoot("Button", s_ThickElementSize);
+
+ GameObject childText = new GameObject("Text");
+ childText.AddComponent<RectTransform>();
+ SetParentAndAlign(childText, buttonRoot);
+
+ Image image = buttonRoot.AddComponent<Image>();
+ image.sprite = resources.standard;
+ 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;
+ }
+
+ public static GameObject CreateText(Resources resources)
+ {
+ GameObject go = CreateUIElementRoot("Text", s_ThickElementSize);
+
+ Text lbl = go.AddComponent<Text>();
+ lbl.text = "New Text";
+ SetDefaultTextValues(lbl);
+
+ return go;
+ }
+
+ public static GameObject CreateImage(Resources resources)
+ {
+ GameObject go = CreateUIElementRoot("Image", s_ImageElementSize);
+ go.AddComponent<Image>();
+ return go;
+ }
+
+ public static GameObject CreateRawImage(Resources resources)
+ {
+ GameObject go = CreateUIElementRoot("RawImage", s_ImageElementSize);
+ go.AddComponent<RawImage>();
+ return go;
+ }
+
+ public static GameObject CreateSlider(Resources resources)
+ {
+ // Create GOs Hierarchy
+ GameObject root = CreateUIElementRoot("Slider", s_ThinElementSize);
+
+ GameObject background = CreateUIObject("Background", root);
+ GameObject fillArea = CreateUIObject("Fill Area", root);
+ GameObject fill = CreateUIObject("Fill", fillArea);
+ GameObject handleArea = CreateUIObject("Handle Slide Area", root);
+ GameObject handle = CreateUIObject("Handle", handleArea);
+
+ // Background
+ Image backgroundImage = background.AddComponent<Image>();
+ backgroundImage.sprite = resources.background;
+ 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 = new Vector2(-5, 0);
+ fillAreaRect.sizeDelta = new Vector2(-20, 0);
+
+ // Fill
+ Image fillImage = fill.AddComponent<Image>();
+ fillImage.sprite = resources.standard;
+ fillImage.type = Image.Type.Sliced;
+ fillImage.color = s_DefaultSelectableColor;
+
+ RectTransform fillRect = fill.GetComponent<RectTransform>();
+ fillRect.sizeDelta = new Vector2(10, 0);
+
+ // Handle Area
+ RectTransform handleAreaRect = handleArea.GetComponent<RectTransform>();
+ handleAreaRect.sizeDelta = new Vector2(-20, 0);
+ handleAreaRect.anchorMin = new Vector2(0, 0);
+ handleAreaRect.anchorMax = new Vector2(1, 1);
+
+ // Handle
+ Image handleImage = handle.AddComponent<Image>();
+ handleImage.sprite = resources.knob;
+ handleImage.color = s_DefaultSelectableColor;
+
+ RectTransform handleRect = handle.GetComponent<RectTransform>();
+ handleRect.sizeDelta = new Vector2(20, 0);
+
+ // Setup slider component
+ Slider slider = root.AddComponent<Slider>();
+ slider.fillRect = fill.GetComponent<RectTransform>();
+ slider.handleRect = handle.GetComponent<RectTransform>();
+ slider.targetGraphic = handleImage;
+ slider.direction = Slider.Direction.LeftToRight;
+ SetDefaultColorTransitionValues(slider);
+
+ return root;
+ }
+
+ public static GameObject CreateScrollbar(Resources resources)
+ {
+ // Create GOs Hierarchy
+ GameObject scrollbarRoot = CreateUIElementRoot("Scrollbar", s_ThinElementSize);
+
+ GameObject sliderArea = CreateUIObject("Sliding Area", scrollbarRoot);
+ GameObject handle = CreateUIObject("Handle", sliderArea);
+
+ Image bgImage = scrollbarRoot.AddComponent<Image>();
+ bgImage.sprite = resources.background;
+ bgImage.type = Image.Type.Sliced;
+ bgImage.color = s_DefaultSelectableColor;
+
+ Image handleImage = handle.AddComponent<Image>();
+ handleImage.sprite = resources.standard;
+ 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;
+ }
+
+ public static GameObject CreateToggle(Resources resources)
+ {
+ // Set up hierarchy
+ GameObject toggleRoot = CreateUIElementRoot("Toggle", s_ThinElementSize);
+
+ GameObject background = CreateUIObject("Background", toggleRoot);
+ GameObject checkmark = CreateUIObject("Checkmark", background);
+ GameObject childLabel = CreateUIObject("Label", toggleRoot);
+
+ // Set up components
+ Toggle toggle = toggleRoot.AddComponent<Toggle>();
+ toggle.isOn = true;
+
+ Image bgImage = background.AddComponent<Image>();
+ bgImage.sprite = resources.standard;
+ bgImage.type = Image.Type.Sliced;
+ bgImage.color = s_DefaultSelectableColor;
+
+ Image checkmarkImage = checkmark.AddComponent<Image>();
+ checkmarkImage.sprite = resources.checkmark;
+
+ Text label = childLabel.AddComponent<Text>();
+ label.text = "Toggle";
+ SetDefaultTextValues(label);
+
+ toggle.graphic = checkmarkImage;
+ toggle.targetGraphic = bgImage;
+ SetDefaultColorTransitionValues(toggle);
+
+ RectTransform bgRect = background.GetComponent<RectTransform>();
+ bgRect.anchorMin = new Vector2(0f, 1f);
+ bgRect.anchorMax = new Vector2(0f, 1f);
+ bgRect.anchoredPosition = new Vector2(10f, -10f);
+ bgRect.sizeDelta = new Vector2(kThinHeight, kThinHeight);
+
+ RectTransform checkmarkRect = checkmark.GetComponent<RectTransform>();
+ checkmarkRect.anchorMin = new Vector2(0.5f, 0.5f);
+ checkmarkRect.anchorMax = new Vector2(0.5f, 0.5f);
+ checkmarkRect.anchoredPosition = Vector2.zero;
+ checkmarkRect.sizeDelta = new Vector2(20f, 20f);
+
+ RectTransform labelRect = childLabel.GetComponent<RectTransform>();
+ labelRect.anchorMin = new Vector2(0f, 0f);
+ labelRect.anchorMax = new Vector2(1f, 1f);
+ labelRect.offsetMin = new Vector2(23f, 1f);
+ labelRect.offsetMax = new Vector2(-5f, -2f);
+
+ return toggleRoot;
+ }
+
+ public static GameObject CreateInputField(Resources resources)
+ {
+ GameObject root = CreateUIElementRoot("InputField", s_ThickElementSize);
+
+ GameObject childPlaceholder = CreateUIObject("Placeholder", root);
+ GameObject childText = CreateUIObject("Text", root);
+
+ Image image = root.AddComponent<Image>();
+ image.sprite = resources.inputField;
+ 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;
+ }
+
+ public static GameObject CreateDropdown(Resources resources)
+ {
+ GameObject root = CreateUIElementRoot("Dropdown", s_ThickElementSize);
+
+ GameObject label = CreateUIObject("Label", root);
+ GameObject arrow = CreateUIObject("Arrow", root);
+ GameObject template = CreateUIObject("Template", root);
+ GameObject viewport = CreateUIObject("Viewport", template);
+ GameObject content = CreateUIObject("Content", viewport);
+ GameObject item = CreateUIObject("Item", content);
+ GameObject itemBackground = CreateUIObject("Item Background", item);
+ GameObject itemCheckmark = CreateUIObject("Item Checkmark", item);
+ GameObject itemLabel = CreateUIObject("Item Label", item);
+
+ // Sub controls.
+
+ GameObject scrollbar = CreateScrollbar(resources);
+ scrollbar.name = "Scrollbar";
+ SetParentAndAlign(scrollbar, template);
+
+ Scrollbar scrollbarScrollbar = scrollbar.GetComponent<Scrollbar>();
+ scrollbarScrollbar.SetDirection(Scrollbar.Direction.BottomToTop, true);
+
+ RectTransform vScrollbarRT = scrollbar.GetComponent<RectTransform>();
+ vScrollbarRT.anchorMin = Vector2.right;
+ vScrollbarRT.anchorMax = Vector2.one;
+ vScrollbarRT.pivot = Vector2.one;
+ vScrollbarRT.sizeDelta = new Vector2(vScrollbarRT.sizeDelta.x, 0);
+
+ // Setup item UI components.
+
+ Text itemLabelText = itemLabel.AddComponent<Text>();
+ SetDefaultTextValues(itemLabelText);
+ itemLabelText.alignment = TextAnchor.MiddleLeft;
+
+ Image itemBackgroundImage = itemBackground.AddComponent<Image>();
+ itemBackgroundImage.color = new Color32(245, 245, 245, 255);
+
+ Image itemCheckmarkImage = itemCheckmark.AddComponent<Image>();
+ itemCheckmarkImage.sprite = resources.checkmark;
+
+ Toggle itemToggle = item.AddComponent<Toggle>();
+ itemToggle.targetGraphic = itemBackgroundImage;
+ itemToggle.graphic = itemCheckmarkImage;
+ itemToggle.isOn = true;
+
+ // Setup template UI components.
+
+ Image templateImage = template.AddComponent<Image>();
+ templateImage.sprite = resources.standard;
+ templateImage.type = Image.Type.Sliced;
+
+ ScrollRect templateScrollRect = template.AddComponent<ScrollRect>();
+ templateScrollRect.content = (RectTransform)content.transform;
+ templateScrollRect.viewport = (RectTransform)viewport.transform;
+ templateScrollRect.horizontal = false;
+ templateScrollRect.movementType = ScrollRect.MovementType.Clamped;
+ templateScrollRect.verticalScrollbar = scrollbarScrollbar;
+ templateScrollRect.verticalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHideAndExpandViewport;
+ templateScrollRect.verticalScrollbarSpacing = -3;
+
+ Mask scrollRectMask = viewport.AddComponent<Mask>();
+ scrollRectMask.showMaskGraphic = false;
+
+ Image viewportImage = viewport.AddComponent<Image>();
+ viewportImage.sprite = resources.mask;
+ viewportImage.type = Image.Type.Sliced;
+
+ // Setup dropdown UI components.
+
+ Text labelText = label.AddComponent<Text>();
+ SetDefaultTextValues(labelText);
+ labelText.alignment = TextAnchor.MiddleLeft;
+
+ Image arrowImage = arrow.AddComponent<Image>();
+ arrowImage.sprite = resources.dropdown;
+
+ Image backgroundImage = root.AddComponent<Image>();
+ backgroundImage.sprite = resources.standard;
+ backgroundImage.color = s_DefaultSelectableColor;
+ backgroundImage.type = Image.Type.Sliced;
+
+ Dropdown dropdown = root.AddComponent<Dropdown>();
+ dropdown.targetGraphic = backgroundImage;
+ SetDefaultColorTransitionValues(dropdown);
+ dropdown.template = template.GetComponent<RectTransform>();
+ dropdown.captionText = labelText;
+ dropdown.itemText = itemLabelText;
+
+ // Setting default Item list.
+ itemLabelText.text = "Option A";
+ dropdown.options.Add(new Dropdown.OptionData {text = "Option A"});
+ dropdown.options.Add(new Dropdown.OptionData {text = "Option B"});
+ dropdown.options.Add(new Dropdown.OptionData {text = "Option C"});
+ dropdown.RefreshShownValue();
+
+ // Set up RectTransforms.
+
+ RectTransform labelRT = label.GetComponent<RectTransform>();
+ labelRT.anchorMin = Vector2.zero;
+ labelRT.anchorMax = Vector2.one;
+ labelRT.offsetMin = new Vector2(10, 6);
+ labelRT.offsetMax = new Vector2(-25, -7);
+
+ RectTransform arrowRT = arrow.GetComponent<RectTransform>();
+ arrowRT.anchorMin = new Vector2(1, 0.5f);
+ arrowRT.anchorMax = new Vector2(1, 0.5f);
+ arrowRT.sizeDelta = new Vector2(20, 20);
+ arrowRT.anchoredPosition = new Vector2(-15, 0);
+
+ RectTransform templateRT = template.GetComponent<RectTransform>();
+ templateRT.anchorMin = new Vector2(0, 0);
+ templateRT.anchorMax = new Vector2(1, 0);
+ templateRT.pivot = new Vector2(0.5f, 1);
+ templateRT.anchoredPosition = new Vector2(0, 2);
+ templateRT.sizeDelta = new Vector2(0, 150);
+
+ RectTransform viewportRT = viewport.GetComponent<RectTransform>();
+ viewportRT.anchorMin = new Vector2(0, 0);
+ viewportRT.anchorMax = new Vector2(1, 1);
+ viewportRT.sizeDelta = new Vector2(-18, 0);
+ viewportRT.pivot = new Vector2(0, 1);
+
+ RectTransform contentRT = content.GetComponent<RectTransform>();
+ contentRT.anchorMin = new Vector2(0f, 1);
+ contentRT.anchorMax = new Vector2(1f, 1);
+ contentRT.pivot = new Vector2(0.5f, 1);
+ contentRT.anchoredPosition = new Vector2(0, 0);
+ contentRT.sizeDelta = new Vector2(0, 28);
+
+ RectTransform itemRT = item.GetComponent<RectTransform>();
+ itemRT.anchorMin = new Vector2(0, 0.5f);
+ itemRT.anchorMax = new Vector2(1, 0.5f);
+ itemRT.sizeDelta = new Vector2(0, 20);
+
+ RectTransform itemBackgroundRT = itemBackground.GetComponent<RectTransform>();
+ itemBackgroundRT.anchorMin = Vector2.zero;
+ itemBackgroundRT.anchorMax = Vector2.one;
+ itemBackgroundRT.sizeDelta = Vector2.zero;
+
+ RectTransform itemCheckmarkRT = itemCheckmark.GetComponent<RectTransform>();
+ itemCheckmarkRT.anchorMin = new Vector2(0, 0.5f);
+ itemCheckmarkRT.anchorMax = new Vector2(0, 0.5f);
+ itemCheckmarkRT.sizeDelta = new Vector2(20, 20);
+ itemCheckmarkRT.anchoredPosition = new Vector2(10, 0);
+
+ RectTransform itemLabelRT = itemLabel.GetComponent<RectTransform>();
+ itemLabelRT.anchorMin = Vector2.zero;
+ itemLabelRT.anchorMax = Vector2.one;
+ itemLabelRT.offsetMin = new Vector2(20, 1);
+ itemLabelRT.offsetMax = new Vector2(-10, -2);
+
+ template.SetActive(false);
+
+ return root;
+ }
+
+ public static GameObject CreateScrollView(Resources resources)
+ {
+ GameObject root = CreateUIElementRoot("Scroll View", new Vector2(200, 200));
+
+ GameObject viewport = CreateUIObject("Viewport", root);
+ GameObject content = CreateUIObject("Content", viewport);
+
+ // Sub controls.
+
+ GameObject hScrollbar = CreateScrollbar(resources);
+ hScrollbar.name = "Scrollbar Horizontal";
+ SetParentAndAlign(hScrollbar, root);
+ RectTransform hScrollbarRT = hScrollbar.GetComponent<RectTransform>();
+ hScrollbarRT.anchorMin = Vector2.zero;
+ hScrollbarRT.anchorMax = Vector2.right;
+ hScrollbarRT.pivot = Vector2.zero;
+ hScrollbarRT.sizeDelta = new Vector2(0, hScrollbarRT.sizeDelta.y);
+
+ GameObject vScrollbar = CreateScrollbar(resources);
+ vScrollbar.name = "Scrollbar Vertical";
+ SetParentAndAlign(vScrollbar, root);
+ vScrollbar.GetComponent<Scrollbar>().SetDirection(Scrollbar.Direction.BottomToTop, true);
+ RectTransform vScrollbarRT = vScrollbar.GetComponent<RectTransform>();
+ vScrollbarRT.anchorMin = Vector2.right;
+ vScrollbarRT.anchorMax = Vector2.one;
+ vScrollbarRT.pivot = Vector2.one;
+ vScrollbarRT.sizeDelta = new Vector2(vScrollbarRT.sizeDelta.x, 0);
+
+ // Setup RectTransforms.
+
+ // Make viewport fill entire scroll view.
+ RectTransform viewportRT = viewport.GetComponent<RectTransform>();
+ viewportRT.anchorMin = Vector2.zero;
+ viewportRT.anchorMax = Vector2.one;
+ viewportRT.sizeDelta = Vector2.zero;
+ viewportRT.pivot = Vector2.up;
+
+ // Make context match viewpoprt width and be somewhat taller.
+ // This will show the vertical scrollbar and not the horizontal one.
+ RectTransform contentRT = content.GetComponent<RectTransform>();
+ contentRT.anchorMin = Vector2.up;
+ contentRT.anchorMax = Vector2.one;
+ contentRT.sizeDelta = new Vector2(0, 300);
+ contentRT.pivot = Vector2.up;
+
+ // Setup UI components.
+
+ ScrollRect scrollRect = root.AddComponent<ScrollRect>();
+ scrollRect.content = contentRT;
+ scrollRect.viewport = viewportRT;
+ scrollRect.horizontalScrollbar = hScrollbar.GetComponent<Scrollbar>();
+ scrollRect.verticalScrollbar = vScrollbar.GetComponent<Scrollbar>();
+ scrollRect.horizontalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHideAndExpandViewport;
+ scrollRect.verticalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHideAndExpandViewport;
+ scrollRect.horizontalScrollbarSpacing = -3;
+ scrollRect.verticalScrollbarSpacing = -3;
+
+ Image rootImage = root.AddComponent<Image>();
+ rootImage.sprite = resources.background;
+ rootImage.type = Image.Type.Sliced;
+ rootImage.color = s_PanelColor;
+
+ Mask viewportMask = viewport.AddComponent<Mask>();
+ viewportMask.showMaskGraphic = false;
+
+ Image viewportImage = viewport.AddComponent<Image>();
+ viewportImage.sprite = resources.mask;
+ viewportImage.type = Image.Type.Sliced;
+
+ return root;
+ }
+ }
+}