Last active
November 30, 2021 05:46
-
-
Save quartorz/13300b6c3e99317b75a2231604e78ec5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#if IS_DEBUG | |
using System; | |
using UnityEngine; | |
using UnityEngine.EventSystems; | |
using UnityEngine.UI; | |
/// <summary> | |
/// uGUIを使ってウィンドウを表示するやつ | |
/// </summary> | |
public class DebugWindow : MonoBehaviour, IDisposable, IBeginDragHandler, IDragHandler | |
{ | |
Canvas _canvas; | |
Sprite _whiteSprite; | |
Font _font; | |
RectTransform _rectTransform; | |
Text _title; | |
RectTransform _container; | |
Vector2 _dragStartPosition; | |
ScrollRect _scrollRect; | |
VerticalLayoutGroup _scrollRectLayoutGroup; | |
LayoutElement _scrollRectLayoutElement; | |
RectTransform _viewportTransform; | |
Mask _viewportMask; | |
Image _viewportImage; | |
VerticalLayoutGroup _viewportLayoutGroup; | |
ContentSizeFitter _scrollRectSizeFitter; | |
ContentSizeFitter _viewportSizeFitter; | |
float? _fixedHeight; | |
public string title { get => _title.text; set => gameObject.name = _title.text = value; } | |
public float width { get => _rectTransform.sizeDelta.x; set => _rectTransform.sizeDelta = new Vector2(value, 0); } | |
public Action onDestroy; | |
/// <summary> | |
/// <c>null</c>なら自動で調整して、<c>null</c>じゃない場合は指定した高さに固定する | |
/// </summary> | |
public float? fixedHeight { | |
get => _fixedHeight; | |
set { | |
if ((_fixedHeight = value) is float v) { | |
_scrollRect.enabled = true; | |
_scrollRectLayoutGroup.enabled = false; | |
_scrollRectSizeFitter.enabled = false; | |
_scrollRectLayoutElement.enabled = true; | |
_viewportMask.enabled = true; | |
_viewportImage.enabled = true; | |
_viewportLayoutGroup.enabled = false; | |
_viewportSizeFitter.enabled = false; | |
_viewportTransform.anchorMin = Vector2.zero; | |
_viewportTransform.anchorMax = Vector2.one; | |
_viewportTransform.offsetMin = _viewportTransform.offsetMax = Vector2.zero; | |
_scrollRectLayoutElement.minHeight = v; | |
} | |
else { | |
_scrollRect.enabled = false; | |
_scrollRectLayoutGroup.enabled = true; | |
_scrollRectSizeFitter.enabled = true; | |
_scrollRectLayoutElement.enabled = false; | |
_viewportMask.enabled = false; | |
_viewportImage.enabled = false; | |
_viewportLayoutGroup.enabled = true; | |
_viewportSizeFitter.enabled = true; | |
} | |
} | |
} | |
public static DebugWindow Create(Canvas canvas, Sprite white, Font font, string title = null) | |
{ | |
var gameObject = new GameObject(title ?? "DebugWindow"); | |
var c = gameObject.AddComponent<DebugWindow>(); | |
c.Setup(canvas, white, font); | |
return c; | |
} | |
void Setup(Canvas canvas, Sprite white, Font font) | |
{ | |
_canvas = canvas; | |
_whiteSprite = white; | |
_font = font; | |
_rectTransform = gameObject.AddComponent<RectTransform>(); | |
_rectTransform.SetParent(canvas.transform, false); | |
_rectTransform.pivot = _rectTransform.anchorMin = _rectTransform.anchorMax = Vector2.up; | |
_rectTransform.anchoredPosition = Vector2.zero; | |
// 高さは子の高さに勝手に合う | |
_rectTransform.sizeDelta = new Vector2(300, 0); | |
var background = gameObject.AddComponent<Image>(); | |
background.raycastTarget = true; | |
background.sprite = _whiteSprite; | |
background.color = new Color(1, 1, 1, 0.27f); | |
var verticalLayout = gameObject.AddComponent<VerticalLayoutGroup>(); | |
verticalLayout.padding = new RectOffset(2, 2, 2, 2); | |
verticalLayout.spacing = 2; | |
verticalLayout.childControlWidth = true; | |
verticalLayout.childControlHeight = true; | |
verticalLayout.childScaleWidth = verticalLayout.childScaleHeight = false; | |
verticalLayout.childForceExpandWidth = true; | |
verticalLayout.childForceExpandHeight = false; | |
var headerGameObject = new GameObject("Header"); | |
headerGameObject.transform.SetParent(verticalLayout.transform, false); | |
var header = headerGameObject.AddComponent<HorizontalLayoutGroup>(); | |
// 幅は親に勝手に合う | |
header.GetRectTransform().sizeDelta = new Vector2(0, 36); | |
header.padding = new RectOffset(2, 2, 2, 2); | |
header.spacing = 2; | |
header.childControlWidth = header.childControlHeight = true; | |
header.childScaleWidth = header.childScaleHeight = false; | |
header.childForceExpandWidth = false; | |
header.childForceExpandHeight = true; | |
var headerImage = headerGameObject.AddComponent<Image>(); | |
headerImage.sprite = _whiteSprite; | |
headerImage.color = new Color(0, 0, 0, 0.5f); | |
headerGameObject.AddComponent<LayoutElement>().minHeight = 36; | |
_title = CreateText("Title", gameObject.name); | |
_title.gameObject.AddComponent<LayoutElement>().flexibleWidth = 1; | |
_title.transform.SetParent(header.transform, false); | |
var collapseButton = CreateButton("CollapseButton", "_"); | |
var collapseButtonLayoutElement = collapseButton.gameObject.AddComponent<LayoutElement>(); | |
collapseButtonLayoutElement.preferredWidth = collapseButtonLayoutElement.minWidth = 32; | |
collapseButtonLayoutElement.flexibleWidth = 0; | |
collapseButton.GetRectTransform().sizeDelta = new Vector2(32, 32); | |
collapseButton.transform.SetParent(header.transform, false); | |
var closeButton = Instantiate(collapseButton, header.transform); | |
closeButton.gameObject.name = "CloseButton"; | |
closeButton.transform.GetChild(0).GetComponent<Text>().text = "×"; | |
var sizeFitter = gameObject.AddComponent<ContentSizeFitter>(); | |
sizeFitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained; | |
sizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; | |
var scrollRect = new GameObject("ScrollRect"); | |
var scrollRectTransform = scrollRect.AddComponent<RectTransform>(); | |
scrollRectTransform.SetParent(_rectTransform); | |
_scrollRect = scrollRect.AddComponent<ScrollRect>(); | |
_scrollRect.horizontal = false; | |
_scrollRectLayoutGroup = scrollRect.AddComponent<VerticalLayoutGroup>(); | |
_scrollRectSizeFitter = scrollRect.AddComponent<ContentSizeFitter>(); | |
_scrollRectSizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; | |
_scrollRectLayoutElement = scrollRect.AddComponent<LayoutElement>(); | |
var viewport = new GameObject("Viewport"); | |
_viewportTransform = viewport.AddComponent<RectTransform>(); | |
_viewportTransform.SetParent(scrollRectTransform); | |
_viewportLayoutGroup = viewport.AddComponent<VerticalLayoutGroup>(); | |
_viewportLayoutGroup.childControlHeight = false; | |
_viewportSizeFitter = viewport.AddComponent<ContentSizeFitter>(); | |
_viewportSizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; | |
_viewportMask = viewport.AddComponent<Mask>(); | |
_viewportMask.showMaskGraphic = false; | |
_viewportImage = viewport.AddComponent<Image>(); | |
_viewportImage.sprite = _whiteSprite; | |
var container = new GameObject("Container"); | |
_container = container.AddComponent<RectTransform>(); | |
_container.SetParent(_viewportTransform, false); | |
_container.pivot = Vector2.one; | |
var containerVerticalLayout = container.AddComponent<VerticalLayoutGroup>(); | |
containerVerticalLayout.padding = new RectOffset(2, 2, 2, 2); | |
containerVerticalLayout.spacing = 0; | |
containerVerticalLayout.childControlWidth = true; | |
containerVerticalLayout.childControlHeight = false; | |
containerVerticalLayout.childScaleWidth = containerVerticalLayout.childScaleHeight = false; | |
containerVerticalLayout.childForceExpandWidth = true; | |
containerVerticalLayout.childForceExpandHeight = false; | |
var containerSizeFitter = container.AddComponent<ContentSizeFitter>(); | |
containerSizeFitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained; | |
containerSizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; | |
var containerImage = container.AddComponent<Image>(); | |
containerImage.sprite = _whiteSprite; | |
containerImage.color = new Color(0, 0, 0, 0.5f); | |
_scrollRect.content = _container; | |
_scrollRect.viewport = _viewportTransform; | |
collapseButton.onClick.AddListener(() => scrollRect.SetActive(!scrollRect.activeSelf)); | |
closeButton.onClick.AddListener(Destroy); | |
fixedHeight = null; | |
} | |
public void Dispose() | |
{ | |
_canvas = null; | |
_whiteSprite = null; | |
_font = null; | |
_rectTransform = null; | |
_title = null; | |
_container = null; | |
_scrollRect = null; | |
_scrollRectLayoutGroup = null; | |
_scrollRectSizeFitter = null; | |
_scrollRectLayoutElement = null; | |
_viewportTransform = null; | |
_viewportMask = null; | |
_viewportImage = null; | |
_viewportLayoutGroup = null; | |
_viewportSizeFitter = null; | |
} | |
public void OnBeginDrag(PointerEventData eventData) | |
{ | |
_dragStartPosition = _rectTransform.anchoredPosition; | |
} | |
public void OnDrag(PointerEventData eventData) | |
{ | |
_rectTransform.anchoredPosition = _dragStartPosition + (eventData.position - eventData.pressPosition) / _canvas.scaleFactor; | |
} | |
public void Destroy() | |
{ | |
Destroy(gameObject); | |
} | |
void OnDestroy() | |
{ | |
onDestroy?.Invoke(); | |
Dispose(); | |
} | |
public void Clear() | |
{ | |
foreach (Transform element in _container) { | |
Destroy(element.gameObject); | |
} | |
Canvas.ForceUpdateCanvases(); | |
} | |
public void Remove(GameObject element) | |
{ | |
Destroy(element); | |
Canvas.ForceUpdateCanvases(); | |
} | |
public void AddSpacer(float height) | |
{ | |
var gameObject = new GameObject("Spacer"); | |
gameObject.GetRectTransform().sizeDelta = new Vector2(0, height); | |
gameObject.transform.SetParent(_container, false); | |
} | |
public Button AddButton(string text, Action onClick = null) | |
{ | |
var button = CreateButton("Button", text); | |
button.transform.SetParent(_container, false); | |
if (onClick != null) { | |
button.onClick.AddListener(() => onClick()); | |
} | |
Canvas.ForceUpdateCanvases(); | |
return button; | |
} | |
public Text AddText(string value) | |
{ | |
var text = CreateText("Text", value); | |
var rectTransform = text.rectTransform; | |
rectTransform.SetParent(_container, false); | |
rectTransform.sizeDelta = new Vector2(0, 32); | |
Canvas.ForceUpdateCanvases(); | |
return text; | |
} | |
public Slider AddSlider(int min, int max, Action<int> onChange = null) | |
{ | |
var slider = CreateSlider(); | |
slider.wholeNumbers = true; | |
slider.minValue = min; | |
slider.maxValue = max; | |
slider.transform.SetParent(_container, false); | |
if (onChange != null) { | |
slider.onValueChanged.AddListener(v => onChange((int)v)); | |
} | |
Canvas.ForceUpdateCanvases(); | |
return slider; | |
} | |
public Slider AddSlider(float min, float max, Action<float> onChange = null) | |
{ | |
var slider = CreateSlider(); | |
slider.minValue = min; | |
slider.maxValue = max; | |
slider.transform.SetParent(_container, false); | |
if (onChange != null) { | |
slider.onValueChanged.AddListener(v => onChange(v)); | |
} | |
Canvas.ForceUpdateCanvases(); | |
return slider; | |
} | |
public Toggle AddToggle(string label, Action<bool> onChange = null) | |
{ | |
var toggle = CreateToggle(label); | |
toggle.transform.SetParent(_container, false); | |
if (onChange != null) { | |
toggle.onValueChanged.AddListener(v => onChange(v)); | |
} | |
Canvas.ForceUpdateCanvases(); | |
return toggle; | |
} | |
public InputField AddInputField(string value = null, string placeholder = null, Action<string> onEndEdit = null) | |
{ | |
var inputField = CreateInputField(placeholder); | |
inputField.transform.SetParent(_container, false); | |
if (!string.IsNullOrEmpty(value)) { | |
inputField.text = value; | |
} | |
if (onEndEdit != null) { | |
inputField.onEndEdit.AddListener(v => onEndEdit(v)); | |
} | |
Canvas.ForceUpdateCanvases(); | |
return inputField; | |
} | |
public Dropdown AddDropdown(Action<string> onChange = null) | |
{ | |
var dropdown = CreateDropdown(); | |
dropdown.transform.SetParent(_container, false); | |
if (onChange != null) { | |
dropdown.onValueChanged.AddListener(i => { | |
onChange(dropdown.options[i].text); | |
}); | |
} | |
Canvas.ForceUpdateCanvases(); | |
return dropdown; | |
} | |
Text CreateText(string name, string value) | |
{ | |
var textGameObject = new GameObject(name); | |
var text = textGameObject.AddComponent<Text>(); | |
text.text = value; | |
text.font = _font; | |
text.fontSize = 24; | |
text.lineSpacing = 0.5f; | |
text.alignment = TextAnchor.MiddleLeft; | |
text.color = Color.white; | |
text.resizeTextMaxSize = 24; | |
text.resizeTextForBestFit = true; | |
textGameObject.AddComponent<LayoutElement>(); | |
return text; | |
} | |
Button CreateButton(string name, string label) | |
{ | |
var buttonGameObject = new GameObject(name); | |
var image = buttonGameObject.AddComponent<Image>(); | |
image.sprite = _whiteSprite; | |
var button = buttonGameObject.AddComponent<Button>(); | |
buttonGameObject.GetRectTransform().sizeDelta = new Vector2(0, 32); | |
var text = CreateText("Text", label); | |
text.color = Color.black; | |
text.alignment = TextAnchor.MiddleCenter; | |
var textTransform = text.rectTransform; | |
textTransform.SetParent(buttonGameObject.transform, false); | |
textTransform.offsetMin = textTransform.offsetMax = Vector2.zero; | |
textTransform.pivot = textTransform.anchorMin = Vector2.zero; | |
textTransform.anchorMax = Vector2.one; | |
buttonGameObject.AddComponent<LayoutElement>(); | |
return button; | |
} | |
Slider CreateSlider() | |
{ | |
var sliderRoot = new GameObject("Slider"); | |
var slider = sliderRoot.AddComponent<Slider>(); | |
var sliderTransform = sliderRoot.GetRectTransform(); | |
sliderRoot.AddComponent<LayoutElement>(); | |
sliderTransform.sizeDelta = new Vector2(0, 20); | |
var background = new GameObject("Background"); | |
var backgroundTransform = background.GetRectTransform(); | |
backgroundTransform.anchorMin = new Vector2(0, 0.25f); | |
backgroundTransform.anchorMax = new Vector2(1, 0.75f); | |
background.transform.SetParent(sliderTransform, false); | |
var backgroundImage = background.AddComponent<Image>(); | |
backgroundImage.sprite = _whiteSprite; | |
backgroundImage.type = Image.Type.Sliced; | |
backgroundTransform.offsetMin = backgroundTransform.offsetMax = Vector2.zero; | |
var fillArea = new GameObject("FillArea"); | |
var fillAreaTransform = fillArea.GetRectTransform(); | |
fillAreaTransform.SetParent(sliderTransform, false); | |
fillAreaTransform.anchorMin = new Vector2(0, 0.25f); | |
fillAreaTransform.anchorMax = new Vector2(1, 0.75f); | |
fillAreaTransform.offsetMin = new Vector2(5, 0); | |
fillAreaTransform.offsetMax = new Vector2(-15, 0); | |
var fill = new GameObject("Fill"); | |
var fillTransform = fill.GetRectTransform(); | |
fillTransform.SetParent(fillAreaTransform, false); | |
fillTransform.offsetMin = new Vector2(-5, 0); | |
fillTransform.offsetMax = new Vector2(15, 0); | |
var fillImage = fill.AddComponent<Image>(); | |
fillImage.sprite = _whiteSprite; | |
fillImage.type = Image.Type.Sliced; | |
var slideArea = new GameObject("Handle Slide Area"); | |
var slideAreaTransform = slideArea.GetRectTransform(); | |
slideAreaTransform.SetParent(sliderTransform, false); | |
slideAreaTransform.anchorMin = Vector2.zero; | |
slideAreaTransform.anchorMax = Vector2.one; | |
slideAreaTransform.offsetMin = new Vector2(10, 0); | |
slideAreaTransform.offsetMax = new Vector2(-10, 0); | |
var handle = new GameObject("Handle"); | |
var handleTransform = handle.GetRectTransform(); | |
handleTransform.SetParent(slideAreaTransform, false); | |
handleTransform.offsetMin = handleTransform.offsetMax = Vector2.zero; | |
handleTransform.sizeDelta = new Vector2(20, 0); | |
var handleImage = handle.AddComponent<Image>(); | |
handleImage.sprite = _whiteSprite; | |
slider.targetGraphic = handleImage; | |
slider.fillRect = fillTransform; | |
slider.handleRect = handleTransform; | |
return slider; | |
} | |
Toggle CreateToggle(string label) | |
{ | |
var toggleRoot = new GameObject("Toggle"); | |
var toggle = toggleRoot.AddComponent<Toggle>(); | |
var toggleTransform = toggle.GetRectTransform(); | |
toggleTransform.sizeDelta = new Vector2(0, 32); | |
var background = new GameObject("Background"); | |
var backgroundImage = background.AddComponent<Image>(); | |
backgroundImage.sprite = _whiteSprite; | |
var backgroundTransform = backgroundImage.rectTransform; | |
backgroundTransform.SetParent(toggleTransform, false); | |
backgroundTransform.anchorMin = backgroundTransform.anchorMax = Vector2.up; | |
backgroundTransform.sizeDelta = new Vector2(24, 24); | |
backgroundTransform.anchoredPosition = new Vector2(12, -16); | |
var checkmark = CreateText("Checkmark", "✓"); | |
checkmark.fontSize = 18; | |
checkmark.alignment = TextAnchor.MiddleCenter; | |
checkmark.color = Color.black; | |
checkmark.resizeTextForBestFit = false; | |
var checkmarkTransform = checkmark.rectTransform; | |
checkmarkTransform.SetParent(backgroundTransform, false); | |
checkmarkTransform.anchorMin = Vector2.zero; | |
checkmarkTransform.anchorMax = Vector2.one; | |
checkmarkTransform.offsetMin = Vector2.zero; | |
checkmarkTransform.offsetMax = Vector2.zero; | |
var text = CreateText("Text", label); | |
var textTransform = text.rectTransform; | |
textTransform.SetParent(toggleTransform, false); | |
textTransform.anchorMin = Vector2.zero; | |
textTransform.anchorMax = Vector2.one; | |
textTransform.offsetMin = new Vector2(25, 0); | |
textTransform.offsetMax = Vector2.zero; | |
toggle.targetGraphic = backgroundImage; | |
toggle.graphic = checkmark; | |
return toggle; | |
} | |
InputField CreateInputField(string placeholderText) | |
{ | |
var root = new GameObject("InputField"); | |
var rootImage = root.AddComponent<Image>(); | |
rootImage.sprite = _whiteSprite; | |
rootImage.rectTransform.sizeDelta = new Vector2(0, 40); | |
var inputField = root.AddComponent<InputField>(); | |
inputField.targetGraphic = rootImage; | |
var rootTransform = root.transform; | |
var placeholder = CreateText("Placeholder", ""); | |
placeholder.fontSize = 24; | |
placeholder.color = Color.gray; | |
placeholder.text = placeholderText; | |
placeholder.horizontalOverflow = HorizontalWrapMode.Wrap; | |
var placeholderTransform = placeholder.rectTransform; | |
placeholderTransform.SetParent(rootTransform, false); | |
placeholderTransform.anchorMin = Vector2.zero; | |
placeholderTransform.anchorMax = Vector2.one; | |
placeholderTransform.offsetMin = new Vector2(5, 0); | |
placeholderTransform.offsetMax = new Vector2(-5, 0); | |
inputField.placeholder = placeholder; | |
var text = CreateText("Text", ""); | |
text.fontSize = 24; | |
text.color = Color.black; | |
var textTransform = text.rectTransform; | |
textTransform.SetParent(rootTransform, false); | |
textTransform.anchorMin = Vector2.zero; | |
textTransform.anchorMax = Vector2.one; | |
textTransform.offsetMin = new Vector2(5, 0); | |
textTransform.offsetMax = new Vector2(-5, 0); | |
inputField.textComponent = text; | |
text.horizontalOverflow = HorizontalWrapMode.Wrap; | |
return inputField; | |
} | |
Dropdown CreateDropdown() | |
{ | |
var templateGameObject = new GameObject("Template"); | |
var template = templateGameObject.AddComponent<RectTransform>(); | |
var scrollRect = templateGameObject.AddComponent<ScrollRect>(); | |
templateGameObject.AddComponent<Canvas>(); | |
templateGameObject.AddComponent<GraphicRaycaster>(); | |
templateGameObject.AddComponent<CanvasGroup>(); | |
template.anchorMin = Vector2.zero; | |
template.anchorMax = Vector2.right; | |
template.pivot = new Vector2(0.5f, 1); | |
template.Translate(0, -50, 0); | |
var viewport = new GameObject("Viewport"); | |
var viewportTransform = viewport.AddComponent<RectTransform>(); | |
var viewportImage = viewport.AddComponent<Image>(); | |
viewportImage.sprite = _whiteSprite; | |
viewportImage.color = new Color(0.93f, 0.93f, 0.93f); | |
viewport.AddComponent<Mask>(); | |
viewportTransform.anchorMin = Vector2.zero; | |
viewportTransform.anchorMax = Vector2.one; | |
viewportTransform.pivot = Vector2.up; | |
viewportTransform.offsetMax = new Vector2(0, 0); | |
viewportTransform.SetParent(template, false); | |
scrollRect.viewport = viewportTransform; | |
var content = new GameObject("Content"); | |
var contentTransform = content.AddComponent<RectTransform>(); | |
contentTransform.sizeDelta = new Vector2(0, 28); | |
contentTransform.anchorMin = Vector2.up; | |
contentTransform.anchorMax = Vector2.one; | |
contentTransform.pivot = new Vector2(0.5f, 1); | |
contentTransform.SetParent(viewportTransform, false); | |
scrollRect.content = contentTransform; | |
var itemGameObject = new GameObject("Item"); | |
var itemTransform = itemGameObject.AddComponent<RectTransform>(); | |
var itemToggle = itemGameObject.AddComponent<Toggle>(); | |
itemTransform.sizeDelta = new Vector2(0, 35); | |
itemTransform.anchorMin = new Vector2(0, 0.5f); | |
itemTransform.anchorMax = new Vector2(1, 0.5f); | |
itemTransform.pivot = new Vector2(0.5f, 0.5f); | |
itemTransform.SetParent(contentTransform, false); | |
var itemToggleColors = itemToggle.colors; | |
itemToggleColors.normalColor = new Color(0.93f, 0.93f, 0.93f); | |
itemToggle.colors = itemToggleColors; | |
var itemBackgroundGameObject = new GameObject("ItemBackground"); | |
var itemBackgroundTransform = itemBackgroundGameObject.AddComponent<RectTransform>(); | |
var itemBackground = itemBackgroundGameObject.AddComponent<Image>(); | |
itemBackgroundTransform.anchorMin = Vector2.zero; | |
itemBackgroundTransform.anchorMax = Vector2.one; | |
itemBackgroundTransform.offsetMin = Vector2.zero; | |
itemBackgroundTransform.offsetMax = Vector2.zero; | |
itemBackgroundTransform.SetParent(itemTransform, false); | |
itemBackground.sprite = _whiteSprite; | |
itemToggle.targetGraphic = itemBackground; | |
var itemCheckmark = new GameObject("ItemCheckmark"); | |
var itemCheckmarkTransform = itemCheckmark.AddComponent<RectTransform>(); | |
itemCheckmarkTransform.sizeDelta = new Vector2(25, 25); | |
itemCheckmarkTransform.anchorMin = new Vector2(0, 0.5f); | |
itemCheckmarkTransform.anchorMax = new Vector2(0, 0.5f); | |
itemCheckmarkTransform.pivot = new Vector2(0.5f, 0.5f); | |
itemCheckmarkTransform.anchoredPosition = new Vector2(15, 0); | |
itemCheckmarkTransform.SetParent(itemTransform, false); | |
var itemCheckmarkText = itemCheckmark.AddComponent<Text>(); | |
itemCheckmarkText.alignment = TextAnchor.MiddleCenter; | |
itemCheckmarkText.font = _font; | |
itemCheckmarkText.fontSize = 24; | |
itemCheckmarkText.color = Color.black; | |
itemCheckmarkText.text = "✓"; | |
itemToggle.graphic = itemCheckmarkText; | |
var itemLabel = new GameObject("ItemLabel"); | |
var itemLabelTransform = itemLabel.AddComponent<RectTransform>(); | |
itemLabelTransform.anchorMin = Vector2.zero; | |
itemLabelTransform.anchorMax = Vector2.one; | |
itemLabelTransform.pivot = new Vector2(0.5f, 0.5f); | |
itemLabelTransform.offsetMin = new Vector2(35, 2); | |
itemLabelTransform.offsetMax = new Vector2(-10, -1); | |
itemLabelTransform.SetParent(itemTransform, false); | |
var itemLabelText = itemLabel.AddComponent<Text>(); | |
itemLabelText.alignment = TextAnchor.MiddleLeft; | |
itemLabelText.font = _font; | |
itemLabelText.fontSize = 24; | |
itemLabelText.color = Color.black; | |
var root = new GameObject("Dropdown"); | |
var dropdown = root.AddComponent<Dropdown>(); | |
var image = root.AddComponent<Image>(); | |
image.sprite = _whiteSprite; | |
var text = CreateText("Text", ""); | |
text.fontSize = 24; | |
text.color = Color.black; | |
text.alignment = TextAnchor.MiddleLeft; | |
var textTransform = text.rectTransform; | |
textTransform.anchorMin = Vector2.zero; | |
textTransform.anchorMax = Vector2.one; | |
textTransform.offsetMin = Vector2.zero; | |
textTransform.offsetMax = Vector2.zero; | |
textTransform.SetParent(dropdown.transform, false); | |
var arrow = CreateText("Arrow", "▾"); | |
arrow.fontSize = 24; | |
arrow.color = Color.black; | |
arrow.alignment = TextAnchor.MiddleCenter; | |
var arrowTransform = arrow.rectTransform; | |
arrowTransform.anchorMin = new Vector2(1, 0.5f); | |
arrowTransform.anchorMax = new Vector2(1, 0.5f); | |
arrowTransform.pivot = new Vector2(1f, 0.5f); | |
arrowTransform.anchoredPosition = Vector2.zero; | |
arrowTransform.sizeDelta = new Vector2(24, 24); | |
arrowTransform.SetParent(dropdown.transform, false); | |
template.SetParent(dropdown.transform); | |
template.gameObject.SetActive(false); | |
dropdown.GetRectTransform().sizeDelta = new Vector2(0, 30); | |
dropdown.targetGraphic = image; | |
dropdown.itemText = itemLabelText; | |
dropdown.template = template; | |
dropdown.captionText = text; | |
return dropdown; | |
} | |
} | |
#endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment