Tanoda
UIExtensionsMenuOptions.cs
Go to the documentation of this file.
1using UnityEngine;
3using UnityEngine.UI;
6
7namespace UnityEditor.UI
8{
12
13 static internal class ExtensionMenuOptions
14 {
15 #region Unity Builder section - Do not change unless UI Source (Editor\MenuOptions) changes
16 #region Unity Builder properties - Do not change unless UI Source (Editor\MenuOptions) changes
17 private const string kUILayerName = "UI";
18 private const float kWidth = 160f;
19 private const float kThickHeight = 30f;
20 private const float kThinHeight = 20f;
21 private const string kStandardSpritePath = "UI/Skin/UISprite.psd";
22 private const string kBackgroundSpriteResourcePath = "UI/Skin/Background.psd";
23 private const string kInputFieldBackgroundPath = "UI/Skin/InputFieldBackground.psd";
24 private const string kKnobPath = "UI/Skin/Knob.psd";
25 private const string kCheckmarkPath = "UI/Skin/Checkmark.psd";
26
27 private static Vector2 s_ThickGUIElementSize = new Vector2(kWidth, kThickHeight);
28 private static Vector2 s_ThinGUIElementSize = new Vector2(kWidth, kThinHeight);
29 private static Vector2 s_ImageGUIElementSize = new Vector2(100f, 100f);
30 private static Color s_DefaultSelectableColor = new Color(1f, 1f, 1f, 1f);
31 private static Color s_TextColor = new Color(50f / 255f, 50f / 255f, 50f / 255f, 1f);
32 #endregion
33 #region Unity Builder methods - Do not change unless UI Source (Editor\MenuOptions) changes
34 private static void SetPositionVisibleinSceneView(RectTransform canvasRTransform, RectTransform itemTransform)
35 {
36 // Find the best scene view
37 SceneView sceneView = SceneView.lastActiveSceneView;
38 if (sceneView == null && SceneView.sceneViews.Count > 0)
39 sceneView = SceneView.sceneViews[0] as SceneView;
40
41 // Couldn't find a SceneView. Don't set position.
42 if (sceneView == null || sceneView.camera == null)
43 return;
44
45 // Create world space Plane from canvas position.
46 Vector2 localPlanePosition;
47 Camera camera = sceneView.camera;
48 Vector3 position = Vector3.zero;
49 if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRTransform, new Vector2(camera.pixelWidth / 2, camera.pixelHeight / 2), camera, out localPlanePosition))
50 {
51 // Adjust for canvas pivot
52 localPlanePosition.x = localPlanePosition.x + canvasRTransform.sizeDelta.x * canvasRTransform.pivot.x;
53 localPlanePosition.y = localPlanePosition.y + canvasRTransform.sizeDelta.y * canvasRTransform.pivot.y;
54
55 localPlanePosition.x = Mathf.Clamp(localPlanePosition.x, 0, canvasRTransform.sizeDelta.x);
56 localPlanePosition.y = Mathf.Clamp(localPlanePosition.y, 0, canvasRTransform.sizeDelta.y);
57
58 // Adjust for anchoring
59 position.x = localPlanePosition.x - canvasRTransform.sizeDelta.x * itemTransform.anchorMin.x;
60 position.y = localPlanePosition.y - canvasRTransform.sizeDelta.y * itemTransform.anchorMin.y;
61
62 Vector3 minLocalPosition;
63 minLocalPosition.x = canvasRTransform.sizeDelta.x * (0 - canvasRTransform.pivot.x) + itemTransform.sizeDelta.x * itemTransform.pivot.x;
64 minLocalPosition.y = canvasRTransform.sizeDelta.y * (0 - canvasRTransform.pivot.y) + itemTransform.sizeDelta.y * itemTransform.pivot.y;
65
66 Vector3 maxLocalPosition;
67 maxLocalPosition.x = canvasRTransform.sizeDelta.x * (1 - canvasRTransform.pivot.x) - itemTransform.sizeDelta.x * itemTransform.pivot.x;
68 maxLocalPosition.y = canvasRTransform.sizeDelta.y * (1 - canvasRTransform.pivot.y) - itemTransform.sizeDelta.y * itemTransform.pivot.y;
69
70 position.x = Mathf.Clamp(position.x, minLocalPosition.x, maxLocalPosition.x);
71 position.y = Mathf.Clamp(position.y, minLocalPosition.y, maxLocalPosition.y);
72 }
73
74 itemTransform.anchoredPosition = position;
75 itemTransform.localRotation = Quaternion.identity;
76 itemTransform.localScale = Vector3.one;
77 }
78
79 private static GameObject CreateUIElementRoot(string name, MenuCommand menuCommand, Vector2 size)
80 {
81 GameObject parent = menuCommand.context as GameObject;
82 if (parent == null || parent.GetComponentInParent<Canvas>() == null)
83 {
84 parent = GetOrCreateCanvasGameObject();
85 }
86 GameObject child = new GameObject(name);
87
88 Undo.RegisterCreatedObjectUndo(child, "Create " + name);
89 Undo.SetTransformParent(child.transform, parent.transform, "Parent " + child.name);
90 GameObjectUtility.SetParentAndAlign(child, parent);
91
92 RectTransform rectTransform = child.AddComponent<RectTransform>();
93 rectTransform.sizeDelta = size;
94 if (parent != menuCommand.context) // not a context click, so center in sceneview
95 {
96 SetPositionVisibleinSceneView(parent.GetComponent<RectTransform>(), rectTransform);
97 }
98 Selection.activeGameObject = child;
99 return child;
100 }
101
102 static GameObject CreateUIObject(string name, GameObject parent)
103 {
104 GameObject go = new GameObject(name);
105 go.AddComponent<RectTransform>();
106 GameObjectUtility.SetParentAndAlign(go, parent);
107 return go;
108 }
109
110 static public void AddCanvas(MenuCommand menuCommand)
111 {
112 var go = CreateNewUI();
113 GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
114 if (go.transform.parent as RectTransform)
115 {
116 RectTransform rect = go.transform as RectTransform;
117 rect.anchorMin = Vector2.zero;
118 rect.anchorMax = Vector2.one;
119 rect.anchoredPosition = Vector2.zero;
120 rect.sizeDelta = Vector2.zero;
121 }
122 Selection.activeGameObject = go;
123 }
124
125 static public GameObject CreateNewUI()
126 {
127 // Root for the UI
128 var root = new GameObject("Canvas");
129 root.layer = LayerMask.NameToLayer(kUILayerName);
130 Canvas canvas = root.AddComponent<Canvas>();
131 canvas.renderMode = RenderMode.ScreenSpaceOverlay;
132 root.AddComponent<CanvasScaler>();
133 root.AddComponent<GraphicRaycaster>();
134 Undo.RegisterCreatedObjectUndo(root, "Create " + root.name);
135
136 // if there is no event system add one...
137 CreateEventSystem(false);
138 return root;
139 }
140
141 public static void CreateEventSystem(MenuCommand menuCommand)
142 {
143 GameObject parent = menuCommand.context as GameObject;
144 CreateEventSystem(true, parent);
145 }
146
147 private static void CreateEventSystem(bool select)
148 {
149 CreateEventSystem(select, null);
150 }
151
152 private static void CreateEventSystem(bool select, GameObject parent)
153 {
154 var esys = Object.FindObjectOfType<EventSystem>();
155 if (esys == null)
156 {
157 var eventSystem = new GameObject("EventSystem");
158 GameObjectUtility.SetParentAndAlign(eventSystem, parent);
159 esys = eventSystem.AddComponent<EventSystem>();
160 eventSystem.AddComponent<StandaloneInputModule>();
161
162 Undo.RegisterCreatedObjectUndo(eventSystem, "Create " + eventSystem.name);
163 }
164
165 if (select && esys != null)
166 {
167 Selection.activeGameObject = esys.gameObject;
168 }
169 }
170
171 // Helper function that returns a Canvas GameObject; preferably a parent of the selection, or other existing Canvas.
172 static public GameObject GetOrCreateCanvasGameObject()
173 {
174 GameObject selectedGo = Selection.activeGameObject;
175
176 // Try to find a gameobject that is the selected GO or one if its parents.
177 Canvas canvas = (selectedGo != null) ? selectedGo.GetComponentInParent<Canvas>() : null;
178 if (canvas != null && canvas.gameObject.activeInHierarchy)
179 return canvas.gameObject;
180
181 // No canvas in selection or its parents? Then use just any canvas..
182 canvas = Object.FindObjectOfType(typeof(Canvas)) as Canvas;
183 if (canvas != null && canvas.gameObject.activeInHierarchy)
184 return canvas.gameObject;
185
186 // No canvas in the scene at all? Then create a new one.
187 return ExtensionMenuOptions.CreateNewUI();
188 }
189
190 private static void SetDefaultColorTransitionValues(Selectable slider)
191 {
192 ColorBlock colors = slider.colors;
193 colors.highlightedColor = new Color(0.882f, 0.882f, 0.882f);
194 colors.pressedColor = new Color(0.698f, 0.698f, 0.698f);
195 colors.disabledColor = new Color(0.521f, 0.521f, 0.521f);
196 }
197
198 private static void SetDefaultTextValues(Text lbl)
199 {
200 // Set text values we want across UI elements in default controls.
201 // Don't set values which are the same as the default values for the Text component,
202 // since there's no point in that, and it's good to keep them as consistent as possible.
203 lbl.color = s_TextColor;
204 }
205 #endregion
206 #endregion
207
208 #region UI Extensions "Create" Menu items
209
210 #region Scroll Snap controls
211 [MenuItem("GameObject/UI/Extensions/Horizontal Scroll Snap", false)]
212 static public void AddHorizontalScrollSnap(MenuCommand menuCommand)
213 {
214 GameObject horizontalScrollSnapRoot = CreateUIElementRoot("Horizontal Scroll Snap", menuCommand, s_ThickGUIElementSize);
215
216 GameObject childContent = CreateUIObject("Content", horizontalScrollSnapRoot);
217
218 GameObject childPage01 = CreateUIObject("Page_01", childContent);
219
220 GameObject childText = CreateUIObject("Text", childPage01);
221
222 // Set RectTransform to stretch
223 RectTransform rectTransformScrollSnapRoot = horizontalScrollSnapRoot.GetComponent<RectTransform>();
224 rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
225 rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
226 rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
227 rectTransformScrollSnapRoot.sizeDelta = new Vector2(300f, 150f);
228
229
230 Image image = horizontalScrollSnapRoot.AddComponent<Image>();
231 image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
232 image.type = Image.Type.Sliced;
233 image.color = new Color(1f, 1f, 1f, 0.392f);
234
235 ScrollRect sr = horizontalScrollSnapRoot.AddComponent<ScrollRect>();
236 sr.vertical = false;
237 sr.horizontal = true;
238 horizontalScrollSnapRoot.AddComponent<HorizontalScrollSnap>();
239
240 //Setup Content container
241 RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
242 rectTransformContent.anchorMin = Vector2.zero;
243 rectTransformContent.anchorMax = new Vector2(1f, 1f);
244 rectTransformContent.sizeDelta = Vector2.zero;
245
246 sr.content = rectTransformContent;
247
248 //Setup 1st Child
249 Image pageImage = childPage01.AddComponent<Image>();
250 pageImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
251 pageImage.type = Image.Type.Sliced;
252 pageImage.color = s_DefaultSelectableColor;
253
254 RectTransform rectTransformPage01 = childPage01.GetComponent<RectTransform>();
255 rectTransformPage01.anchorMin = new Vector2(0f, 0.5f);
256 rectTransformPage01.anchorMax = new Vector2(0f, 0.5f);
257 rectTransformPage01.pivot = new Vector2(0f, 0.5f);
258
259 //Setup Text on Page01
260 Text text = childText.AddComponent<Text>();
261 text.text = "Page_01";
262 text.alignment = TextAnchor.MiddleCenter;
263 text.color = new Color(0.196f, 0.196f, 0.196f);
264
265 //Setup Text 1st Child
266 RectTransform rectTransformPage01Text = childText.GetComponent<RectTransform>();
267 rectTransformPage01Text.anchorMin = new Vector2(0.5f, 0.5f);
268 rectTransformPage01Text.anchorMax = new Vector2(0.5f, 0.5f);
269 rectTransformPage01Text.pivot = new Vector2(0.5f, 0.5f);
270
271
272 //Need to add example child components like in the Asset (SJ)
273 Selection.activeGameObject = horizontalScrollSnapRoot;
274 }
275
276 [MenuItem("GameObject/UI/Extensions/Vertical Scroll Snap", false)]
277 static public void AddVerticallScrollSnap(MenuCommand menuCommand)
278 {
279 GameObject verticalScrollSnapRoot = CreateUIElementRoot("Vertical Scroll Snap", menuCommand, s_ThickGUIElementSize);
280
281 GameObject childContent = CreateUIObject("Content", verticalScrollSnapRoot);
282
283 GameObject childPage01 = CreateUIObject("Page_01", childContent);
284
285 GameObject childText = CreateUIObject("Text", childPage01);
286
287 // Set RectTransform to stretch
288 RectTransform rectTransformScrollSnapRoot = verticalScrollSnapRoot.GetComponent<RectTransform>();
289 rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
290 rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
291 rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
292 rectTransformScrollSnapRoot.sizeDelta = new Vector2(300f, 150f);
293
294
295 Image image = verticalScrollSnapRoot.AddComponent<Image>();
296 image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
297 image.type = Image.Type.Sliced;
298 image.color = new Color(1f, 1f, 1f, 0.392f);
299
300 ScrollRect sr = verticalScrollSnapRoot.AddComponent<ScrollRect>();
301 sr.vertical = true;
302 sr.horizontal = false;
303 verticalScrollSnapRoot.AddComponent<VerticalScrollSnap>();
304
305 //Setup Content container
306 RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
307 rectTransformContent.anchorMin = Vector2.zero;
308 rectTransformContent.anchorMax = new Vector2(1f, 1f);
309 //rectTransformContent.anchoredPosition = Vector2.zero;
310 rectTransformContent.sizeDelta = Vector2.zero;
311
312 sr.content = rectTransformContent;
313
314 //Setup 1st Child
315 Image pageImage = childPage01.AddComponent<Image>();
316 pageImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
317 pageImage.type = Image.Type.Sliced;
318 pageImage.color = s_DefaultSelectableColor;
319
320 RectTransform rectTransformPage01 = childPage01.GetComponent<RectTransform>();
321 rectTransformPage01.anchorMin = new Vector2(0.5f, 0f);
322 rectTransformPage01.anchorMax = new Vector2(0.5f, 0f);
323 rectTransformPage01.anchoredPosition = new Vector2(-rectTransformPage01.sizeDelta.x / 2, rectTransformPage01.sizeDelta.y / 2);
324 //rectTransformPage01.anchoredPosition = Vector2.zero;
325 //rectTransformPage01.sizeDelta = Vector2.zero;
326 rectTransformPage01.pivot = new Vector2(0.5f, 0f);
327
328 //Setup Text on Page01
329 Text text = childText.AddComponent<Text>();
330 text.text = "Page_01";
331 text.alignment = TextAnchor.MiddleCenter;
332 text.color = new Color(0.196f, 0.196f, 0.196f);
333
334 //Setup Text 1st Child
335 RectTransform rectTransformPage01Text = childText.GetComponent<RectTransform>();
336 rectTransformPage01Text.anchorMin = new Vector2(0.5f, 0.5f);
337 rectTransformPage01Text.anchorMax = new Vector2(0.5f, 0.5f);
338 //rectTransformPage01Text.anchoredPosition = Vector2.zero;
339 //rectTransformPage01Text.sizeDelta = Vector2.zero;
340 rectTransformPage01Text.pivot = new Vector2(0.5f, 0.5f);
341
342
343 //Need to add example child components like in the Asset (SJ)
344
345 Selection.activeGameObject = verticalScrollSnapRoot;
346 }
347
348 #region New ScrollSnapCode
349 static public void FixedScrollSnapBase(MenuCommand menuCommand, string name, ScrollSnap.ScrollDirection direction, int itemVisible, int itemCount, Vector2 itemSize)
350 {
351 GameObject scrollSnapRoot = CreateUIElementRoot(name, menuCommand, s_ThickGUIElementSize);
352 GameObject itemList = CreateUIObject("List", scrollSnapRoot);
353
354 // Set RectTransform to stretch
355 RectTransform rectTransformScrollSnapRoot = scrollSnapRoot.GetComponent<RectTransform>();
356 rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
357 rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
358 rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
359
360 if (direction == ScrollSnap.ScrollDirection.Horizontal)
361 {
362 rectTransformScrollSnapRoot.sizeDelta = new Vector2(itemVisible * itemSize.x, itemSize.y);
363 }
364 else
365 {
366 rectTransformScrollSnapRoot.sizeDelta = new Vector2(itemSize.x, itemVisible * itemSize.y);
367 }
368
369 Image image = scrollSnapRoot.AddComponent<Image>();
370 image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
371 image.type = Image.Type.Sliced;
372 image.color = new Color(1f, 1f, 1f, 1f);
373
374 Mask listMask = scrollSnapRoot.AddComponent<Mask>();
375 listMask.showMaskGraphic = false;
376
377 ScrollRect scrollRect = scrollSnapRoot.AddComponent<ScrollRect>();
378 scrollRect.vertical = direction == ScrollSnap.ScrollDirection.Vertical;
379 scrollRect.horizontal = direction == ScrollSnap.ScrollDirection.Horizontal;
380
381 ScrollSnap scrollSnap = scrollSnapRoot.AddComponent<ScrollSnap>();
382 scrollSnap.direction = direction;
383 scrollSnap.ItemsVisibleAtOnce = itemVisible;
384
385 //Setup Content container
386 RectTransform rectTransformContent = itemList.GetComponent<RectTransform>();
387 rectTransformContent.anchorMin = Vector2.zero;
388 rectTransformContent.anchorMax = new Vector2(1f, 1f);
389 rectTransformContent.sizeDelta = Vector2.zero;
390 scrollRect.content = rectTransformContent;
391
392 //Setup Item list container
393 if (direction == ScrollSnap.ScrollDirection.Horizontal)
394 {
395 itemList.AddComponent<HorizontalLayoutGroup>();
396 ContentSizeFitter sizeFitter = itemList.AddComponent<ContentSizeFitter>();
397 sizeFitter.horizontalFit = ContentSizeFitter.FitMode.MinSize;
398 }
399 else
400 {
401 itemList.AddComponent<VerticalLayoutGroup>();
402 ContentSizeFitter sizeFitter = itemList.AddComponent<ContentSizeFitter>();
403 sizeFitter.verticalFit = ContentSizeFitter.FitMode.MinSize;
404 }
405
406 //Setup children
407 for (var i = 0; i < itemCount; i++)
408 {
409 GameObject item = CreateUIObject(string.Format("Item_{0:00}", i), itemList);
410 GameObject childText = CreateUIObject("Text", item);
411
412 Image pageImage = item.AddComponent<Image>();
413 pageImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
414 pageImage.type = Image.Type.Sliced;
415 pageImage.color = s_DefaultSelectableColor;
416
417 LayoutElement elementLayout = item.AddComponent<LayoutElement>();
418 if (direction == ScrollSnap.ScrollDirection.Horizontal)
419 {
420 elementLayout.minWidth = itemSize.x;
421 }
422 else
423 {
424 elementLayout.minHeight = itemSize.y;
425 }
426
427 RectTransform rectTransformPage01 = item.GetComponent<RectTransform>();
428 rectTransformPage01.anchorMin = new Vector2(0f, 0.5f);
429 rectTransformPage01.anchorMax = new Vector2(0f, 0.5f);
430 rectTransformPage01.pivot = new Vector2(0f, 0.5f);
431
432 //Setup Text on Page01
433 Text text = childText.AddComponent<Text>();
434 text.text = item.name;
435 text.alignment = TextAnchor.MiddleCenter;
436 text.color = new Color(0.196f, 0.196f, 0.196f);
437
438 //Setup Text 1st Child
439 RectTransform rectTransformPage01Text = childText.GetComponent<RectTransform>();
440 rectTransformPage01Text.anchorMin = new Vector2(0.5f, 0.5f);
441 rectTransformPage01Text.anchorMax = new Vector2(0.5f, 0.5f);
442 rectTransformPage01Text.pivot = new Vector2(0.5f, 0.5f);
443 }
444 Selection.activeGameObject = scrollSnapRoot;
445 }
446
447 [MenuItem("GameObject/UI/Extensions/Fixed Item Scroll/Snap Horizontal Single Item", false)]
448 static public void AddFixedItemScrollSnapHorizontalSingle(MenuCommand menuCommand)
449 {
450 FixedScrollSnapBase(menuCommand, "Scroll Snap Horizontal Single", ScrollSnap.ScrollDirection.Horizontal, 1, 3, new Vector2(100, 100));
451 }
452
453 [MenuItem("GameObject/UI/Extensions/Fixed Item Scroll/Snap Horizontal Multiple Items", false)]
454 static public void AddFixedItemScrollSnapHorizontalMultiple(MenuCommand menuCommand)
455 {
456 FixedScrollSnapBase(menuCommand, "Scroll Snap Horizontal Multiple", ScrollSnap.ScrollDirection.Horizontal, 3, 15, new Vector2(100, 100));
457 }
458
459 [MenuItem("GameObject/UI/Extensions/Fixed Item Scroll/Snap Vertical Single Item", false)]
460 static public void AddFixedItemScrollSnapVerticalSingle(MenuCommand menuCommand)
461 {
462 FixedScrollSnapBase(menuCommand, "Scroll Snap Vertical Multiple", ScrollSnap.ScrollDirection.Vertical, 1, 3, new Vector2(100, 100));
463 }
464
465 [MenuItem("GameObject/UI/Extensions/Fixed Item Scroll/Snap Vertical Multiple Items", false)]
466 static public void AddFixedItemScrollSnapVerticalMultiple(MenuCommand menuCommand)
467 {
468 FixedScrollSnapBase(menuCommand, "Scroll Snap Vertical Multiple", ScrollSnap.ScrollDirection.Vertical, 3, 15, new Vector2(100, 100));
469 }
470 #endregion
471
472 #region ContentScrollSnapHorizontal
473 [MenuItem("GameObject/UI/Extensions/Content Scroll Snap Horizontal", false)]
474 static public void AddContentScrollSnapHorizontal(MenuCommand menuCommand)
475 {
476 GameObject contentScrollSnapRoot = CreateUIElementRoot("Content Scroll Snap Horizontal", menuCommand, s_ThickGUIElementSize);
477
478 GameObject childContent = CreateUIObject("Content", contentScrollSnapRoot);
479
480 GameObject childPage01 = CreateUIObject("Position 1", childContent);
481
482 GameObject childPage02 = CreateUIObject("Position 2", childContent);
483
484 GameObject childPage03 = CreateUIObject("Position 3", childContent);
485
486 GameObject childPage04 = CreateUIObject("Position 4", childContent);
487
488 GameObject childPage05 = CreateUIObject("Position 5", childContent);
489
490 //setup root
491 RectTransform contentScrollSnapRectTransform = ((RectTransform)contentScrollSnapRoot.transform);
492 contentScrollSnapRectTransform.anchorMin = new Vector2(0.5f, 0.5f);
493 contentScrollSnapRectTransform.anchorMax = new Vector2(0.5f, 0.5f);
494 contentScrollSnapRectTransform.anchoredPosition = Vector2.zero;
495 contentScrollSnapRectTransform.sizeDelta = new Vector2(100, 200);
496
497 Image image = contentScrollSnapRoot.AddComponent<Image>();
498 image.sprite = null;
499 image.color = new Color(1, 0, 0, .5f);
500
501 ScrollRect sr = contentScrollSnapRoot.AddComponent<ScrollRect>();
502 sr.vertical = false;
503 sr.horizontal = true;
504
505 //setup content container
506 RectTransform contentTransform = ((RectTransform)childContent.transform);
507 contentTransform.anchorMin = new Vector2(.5f, .5f);
508 contentTransform.anchorMax = new Vector2(.5f, .5f);
509 contentTransform.pivot = new Vector2(.5f, .5f);
510 contentTransform.sizeDelta = new Vector2(200, 300);
511
512 Image contentImage = childContent.AddComponent<Image>();
513 contentImage.sprite = null;
514 contentImage.color = new Color(0, 0, 1, .5f);
515
516 sr.content = contentTransform;
517
518 //setup child 1
519 RectTransform childPage01Transform = (RectTransform)childPage01.transform;
520 childPage01Transform.anchorMin = new Vector2(0, 1);
521 childPage01Transform.anchorMax = new Vector2(0, 1);
522 childPage01Transform.pivot = new Vector2(0, 1);
523 childPage01Transform.anchoredPosition = new Vector2(0, -125);
524
525 Image childPage01Image = childPage01.AddComponent<Image>();
526 childPage01Image.sprite = null;
527 childPage01Image.color = Color.white;
528
529 //setup child 2
530 RectTransform childPage02Transform = (RectTransform)childPage02.transform;
531 childPage02Transform.anchorMin = new Vector2(0, 1);
532 childPage02Transform.anchorMax = new Vector2(0, 1);
533 childPage02Transform.pivot = new Vector2(0, 1);
534 childPage02Transform.anchoredPosition = new Vector2(175, -150);
535
536 Image childPage02Image = childPage02.AddComponent<Image>();
537 childPage02Image.sprite = null;
538 childPage02Image.color = Color.white;
539
540 //setup child 3
541 RectTransform childPage03Transform = (RectTransform)childPage03.transform;
542 childPage03Transform.anchorMin = new Vector2(0, 1);
543 childPage03Transform.anchorMax = new Vector2(0, 1);
544 childPage03Transform.pivot = new Vector2(0, 1);
545 childPage03Transform.anchoredPosition = new Vector2(315, -125);
546 childPage03Transform.sizeDelta = new Vector2(50, 100);
547
548 Image childPage03Image = childPage03.AddComponent<Image>();
549 childPage03Image.sprite = null;
550 childPage03Image.color = Color.white;
551
552 //setup child 4
553 RectTransform childPage04Transform = (RectTransform)childPage04.transform;
554 childPage04Transform.anchorMin = new Vector2(0, 1);
555 childPage04Transform.anchorMax = new Vector2(0, 1);
556 childPage04Transform.pivot = new Vector2(0, 1);
557 childPage04Transform.anchoredPosition = new Vector2(490, -110);
558
559 Image childPage04Image = childPage04.AddComponent<Image>();
560 childPage04Image.sprite = null;
561 childPage04Image.color = Color.white;
562
563 //setup child 5
564 RectTransform childPage05Transform = (RectTransform)childPage05.transform;
565 childPage05Transform.anchorMin = new Vector2(0, 1);
566 childPage05Transform.anchorMax = new Vector2(0, 1);
567 childPage05Transform.pivot = new Vector2(0, 1);
568 childPage05Transform.anchoredPosition = new Vector2(630, -180);
569
570 Image childPage05Image = childPage05.AddComponent<Image>();
571 childPage05Image.sprite = null;
572 childPage05Image.color = Color.white;
573
574 //add scroll snap after we've added the content & items
575 contentScrollSnapRoot.AddComponent<ContentScrollSnapHorizontal>();
576 }
577 #endregion
578
579 #endregion
580
581 #region UIVertical Scroller
582 [MenuItem("GameObject/UI/Extensions/UI Vertical Scroller", false)]
583 static public void AddUIVerticallScroller(MenuCommand menuCommand)
584 {
585 GameObject uiVerticalScrollerRoot = CreateUIElementRoot("UI Vertical Scroller", menuCommand, s_ThickGUIElementSize);
586
587 GameObject uiScrollerCenter = CreateUIObject("Center", uiVerticalScrollerRoot);
588
589 GameObject childContent = CreateUIObject("Content", uiVerticalScrollerRoot);
590
591 // Set RectTransform to stretch
592 RectTransform rectTransformScrollSnapRoot = uiVerticalScrollerRoot.GetComponent<RectTransform>();
593 rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
594 rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
595 rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
596 rectTransformScrollSnapRoot.sizeDelta = new Vector2(500f, 150f);
597
598 // Add required ScrollRect
599 ScrollRect sr = uiVerticalScrollerRoot.AddComponent<ScrollRect>();
600 sr.vertical = true;
601 sr.horizontal = false;
602 sr.movementType = ScrollRect.MovementType.Unrestricted;
603 var uiscr = uiVerticalScrollerRoot.AddComponent<UIVerticalScroller>();
604
605 //Setup container center point
606 RectTransform rectTransformCenter = uiScrollerCenter.GetComponent<RectTransform>();
607 rectTransformCenter.anchorMin = new Vector2(0f, 0.3f);
608 rectTransformCenter.anchorMax = new Vector2(1f, 0.6f);
609 rectTransformCenter.sizeDelta = Vector2.zero;
610
611 uiscr.center = uiScrollerCenter.GetComponent<RectTransform>();
612
613 //Setup Content container
614 RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
615 rectTransformContent.anchorMin = Vector2.zero;
616 rectTransformContent.anchorMax = new Vector2(1f, 1f);
617 rectTransformContent.sizeDelta = Vector2.zero;
618
619 sr.content = rectTransformContent;
620
621 // Add sample children
622 for (int i = 0; i < 10; i++)
623 {
624 GameObject childPage = CreateUIObject("Page_" + i, childContent);
625
626 GameObject childText = CreateUIObject("Text", childPage);
627
628 //Setup 1st Child
629 Image pageImage = childPage.AddComponent<Image>();
630 pageImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
631 pageImage.type = Image.Type.Sliced;
632 pageImage.color = s_DefaultSelectableColor;
633
634 RectTransform rectTransformPage = childPage.GetComponent<RectTransform>();
635 rectTransformPage.anchorMin = new Vector2(0f, 0.5f);
636 rectTransformPage.anchorMax = new Vector2(1f, 0.5f);
637 rectTransformPage.sizeDelta = new Vector2(0f, 80f);
638 rectTransformPage.pivot = new Vector2(0.5f, 0.5f);
639 rectTransformPage.localPosition = new Vector3(0, 80 * i, 0);
640 childPage.AddComponent<Button>();
641
642 var childCG = childPage.AddComponent<CanvasGroup>();
643 childCG.interactable = false;
644
645 //Setup Text on Item
646 Text text = childText.AddComponent<Text>();
647 text.text = "Item_" + i;
648 text.alignment = TextAnchor.MiddleCenter;
649 text.color = new Color(0.196f, 0.196f, 0.196f);
650
651 //Setup Text on Item
652 RectTransform rectTransformPageText = childText.GetComponent<RectTransform>();
653 rectTransformPageText.anchorMin = new Vector2(0.5f, 0.5f);
654 rectTransformPageText.anchorMax = new Vector2(0.5f, 0.5f);
655 rectTransformPageText.pivot = new Vector2(0.5f, 0.5f);
656 }
657
658 Selection.activeGameObject = uiVerticalScrollerRoot;
659 }
660 #endregion
661
662 #region UI Button
663 [MenuItem("GameObject/UI/Extensions/UI Button", false)]
664 static public void AddUIButton(MenuCommand menuCommand)
665 {
666 GameObject uiButtonRoot = CreateUIElementRoot("UI Button", menuCommand, s_ThickGUIElementSize);
667 GameObject childText = CreateUIObject("Text", uiButtonRoot);
668
669 Image image = uiButtonRoot.AddComponent<Image>();
670 image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
671 image.type = Image.Type.Sliced;
672 image.color = s_DefaultSelectableColor;
673
674 Button bt = uiButtonRoot.AddComponent<Button>();
675 uiButtonRoot.AddComponent<UISelectableExtension>();
676 SetDefaultColorTransitionValues(bt);
677
678 Text text = childText.AddComponent<Text>();
679 text.text = "Button";
680 text.alignment = TextAnchor.MiddleCenter;
681 text.color = new Color(0.196f, 0.196f, 0.196f);
682
683 RectTransform textRectTransform = childText.GetComponent<RectTransform>();
684 textRectTransform.anchorMin = Vector2.zero;
685 textRectTransform.anchorMax = Vector2.one;
686 textRectTransform.sizeDelta = Vector2.zero;
687
688 Selection.activeGameObject = uiButtonRoot;
689 }
690 #endregion
691
692 #region UI Flippable
693 [MenuItem("GameObject/UI/Extensions/UI Flippable", false)]
694 static public void AddUIFlippableImage(MenuCommand menuCommand)
695 {
696 GameObject go = CreateUIElementRoot("UI Flippable", menuCommand, s_ImageGUIElementSize);
697 go.AddComponent<Image>();
698 go.AddComponent<UIFlippable>();
699 Selection.activeGameObject = go;
700 }
701 #endregion
702
703 #region UI WindowBase
704 [MenuItem("GameObject/UI/Extensions/UI Window Base", false)]
705 static public void AddUIWindowBase(MenuCommand menuCommand)
706 {
707 GameObject go = CreateUIElementRoot("UI Window Base", menuCommand, s_ThickGUIElementSize);
708 go.AddComponent<UIWindowBase>();
709 go.AddComponent<Image>();
710 Selection.activeGameObject = go;
711 }
712 #endregion
713
714 #region Accordion
715 [MenuItem("GameObject/UI/Extensions/Accordion/Accordion Group", false)]
716 static public void AddAccordionGroup(MenuCommand menuCommand)
717 {
718 GameObject go = CreateUIElementRoot("Accordion Group", menuCommand, s_ThickGUIElementSize);
719 go.AddComponent<VerticalLayoutGroup>();
720 go.AddComponent<ContentSizeFitter>();
721 go.AddComponent<ToggleGroup>();
722 go.AddComponent<Accordion>();
723 Selection.activeGameObject = go;
724 }
725
726 [MenuItem("GameObject/UI/Extensions/Accordion/Accordion Element", false)]
727 static public void AddAccordionElement(MenuCommand menuCommand)
728 {
729 GameObject go = CreateUIElementRoot("Accordion Element", menuCommand, s_ThickGUIElementSize);
730 go.AddComponent<LayoutElement>();
731 go.AddComponent<AccordionElement>();
732 Selection.activeGameObject = go;
733
734 }
735 #endregion
736
737 #region Drop Down controls
738 [MenuItem("GameObject/UI/Extensions/AutoComplete ComboBox", false)]
739 static public void AddAutoCompleteComboBox(MenuCommand menuCommand)
740 {
741 GameObject autoCompleteComboBoxRoot = CreateUIElementRoot("AutoCompleteComboBox", menuCommand, s_ThickGUIElementSize);
742
743 //Create Template
744 GameObject itemTemplate = AddButtonAsChild(autoCompleteComboBoxRoot);
745
746 //Create Inputfield
747 GameObject inputField = AddInputFieldAsChild(autoCompleteComboBoxRoot);
748
749 //Create Overlay
750 GameObject overlay = CreateUIObject("Overlay", autoCompleteComboBoxRoot);
751 GameObject overlayScrollPanel = CreateUIObject("ScrollPanel", overlay);
752 GameObject overlayScrollPanelItems = CreateUIObject("Items", overlayScrollPanel);
753 GameObject overlayScrollPanelScrollBar = AddScrollbarAsChild(overlayScrollPanel);
754
755 //Create Arrow Button
756 GameObject arrowButton = AddButtonAsChild(autoCompleteComboBoxRoot);
757
758 //Setup ComboBox
759 var autoCompleteComboBox = autoCompleteComboBoxRoot.AddComponent<AutoCompleteComboBox>();
760 var cbbRT = autoCompleteComboBoxRoot.GetComponent<RectTransform>();
761
762 //Setup Template
763 itemTemplate.name = "ItemTemplate";
764 var itemTemplateRT = itemTemplate.GetComponent<RectTransform>();
765 itemTemplateRT.sizeDelta = cbbRT.sizeDelta;
766 var itemTemplateButton = itemTemplate.GetComponent<Button>();
767 itemTemplateButton.transition = Selectable.Transition.None;
768 var itemTemplateLayoutElement = itemTemplate.AddComponent<LayoutElement>();
769 itemTemplateLayoutElement.minHeight = cbbRT.rect.height;
770 itemTemplate.SetActive(false);
771
772 //Setup InputField
773 var inputFieldRT = inputField.GetComponent<RectTransform>();
774 inputFieldRT.anchorMin = Vector2.zero;
775 inputFieldRT.anchorMax = Vector2.one;
776 inputFieldRT.sizeDelta = Vector2.zero;
777 Events.UnityEventTools.AddPersistentListener<string>(inputField.GetComponent<InputField>().onValueChanged, new UnityEngine.Events.UnityAction<string>(autoCompleteComboBox.OnValueChanged));
778
779 //Setup Overlay
780 var overlayRT = overlay.GetComponent<RectTransform>();
781 overlayRT.anchorMin = new Vector2(0f, 1f);
782 overlayRT.anchorMax = new Vector2(0f, 1f);
783 overlayRT.sizeDelta = new Vector2(0f, 1f);
784 overlayRT.pivot = new Vector2(0f, 1f);
785 overlay.AddComponent<Image>().color = new Color(0.243f, 0.871f, 0f, 0f);
786 Events.UnityEventTools.AddBoolPersistentListener(overlay.AddComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(autoCompleteComboBox.ToggleDropdownPanel), true);
787 //Overlay Scroll Panel
788 var overlayScrollPanelRT = overlayScrollPanel.GetComponent<RectTransform>();
789 overlayScrollPanelRT.position += new Vector3(0, -cbbRT.sizeDelta.y, 0);
790 overlayScrollPanelRT.anchorMin = new Vector2(0f, 1f);
791 overlayScrollPanelRT.anchorMax = new Vector2(0f, 1f);
792 overlayScrollPanelRT.sizeDelta = new Vector2(cbbRT.sizeDelta.x, cbbRT.sizeDelta.y * 3);
793 overlayScrollPanelRT.pivot = new Vector2(0f, 1f);
794 overlayScrollPanel.AddComponent<Image>();
795 overlayScrollPanel.AddComponent<Mask>();
796 var scrollRect = overlayScrollPanel.AddComponent<ScrollRect>();
797 scrollRect.horizontal = false;
798 scrollRect.movementType = ScrollRect.MovementType.Clamped;
799 scrollRect.verticalScrollbar = overlayScrollPanelScrollBar.GetComponent<Scrollbar>();
800 //Overlay Items list
801 var overlayScrollPanelItemsRT = overlayScrollPanelItems.GetComponent<RectTransform>();
802 overlayScrollPanelItemsRT.position += new Vector3(5, 0, 0);
803 overlayScrollPanelItemsRT.anchorMin = new Vector2(0f, 1f);
804 overlayScrollPanelItemsRT.anchorMax = new Vector2(0f, 1f);
805 overlayScrollPanelItemsRT.sizeDelta = new Vector2(120f, 5f);
806 overlayScrollPanelItemsRT.pivot = new Vector2(0f, 1f);
807 scrollRect.content = overlayScrollPanelItemsRT;
808 var overlayScrollPanelItemsVLG = overlayScrollPanelItems.AddComponent<VerticalLayoutGroup>();
809 overlayScrollPanelItemsVLG.padding = new RectOffset(0, 0, 5, 0);
810 var overlayScrollPanelItemsFitter = overlayScrollPanelItems.AddComponent<ContentSizeFitter>();
811 overlayScrollPanelItemsFitter.verticalFit = ContentSizeFitter.FitMode.MinSize;
812 //Overlay Scrollbar
813 var overlayScrollPanelScrollbarRT = overlayScrollPanelScrollBar.GetComponent<RectTransform>();
814 overlayScrollPanelScrollbarRT.anchorMin = new Vector2(1f, 0f);
815 overlayScrollPanelScrollbarRT.anchorMax = Vector2.one;
816 overlayScrollPanelScrollbarRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, 0f);
817 overlayScrollPanelScrollbarRT.pivot = Vector2.one;
818 overlayScrollPanelScrollbarRT.GetComponent<Scrollbar>().direction = Scrollbar.Direction.BottomToTop;
819 overlayScrollPanelScrollBar.transform.GetChild(0).name = "SlidingArea";
820
821 //Arrow Button
822 arrowButton.name = "ArrowBtn";
823 var arrowButtonRT = arrowButton.GetComponent<RectTransform>();
824 arrowButtonRT.anchorMin = Vector2.one;
825 arrowButtonRT.anchorMax = Vector2.one;
826 arrowButtonRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, cbbRT.sizeDelta.y);
827 arrowButtonRT.pivot = Vector2.one;
828 Events.UnityEventTools.AddBoolPersistentListener(arrowButton.GetComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(autoCompleteComboBox.ToggleDropdownPanel), true);
829 arrowButton.GetComponentInChildren<Text>().text = "â–¼";
830
831 Selection.activeGameObject = autoCompleteComboBoxRoot;
832 }
833
834 [MenuItem("GameObject/UI/Extensions/ComboBox", false)]
835 static public void AddComboBox(MenuCommand menuCommand)
836 {
837 GameObject comboBoxRoot = CreateUIElementRoot("ComboBox", menuCommand, s_ThickGUIElementSize);
838
839 //Create Template
840 GameObject itemTemplate = AddButtonAsChild(comboBoxRoot);
841
842 //Create Inputfield
843 GameObject inputField = AddInputFieldAsChild(comboBoxRoot);
844
845 //Create Overlay
846 GameObject overlay = CreateUIObject("Overlay", comboBoxRoot);
847 GameObject overlayScrollPanel = CreateUIObject("ScrollPanel", overlay);
848 GameObject overlayScrollPanelItems = CreateUIObject("Items", overlayScrollPanel);
849 GameObject overlayScrollPanelScrollBar = AddScrollbarAsChild(overlayScrollPanel);
850
851 //Create Arrow Button
852 GameObject arrowButton = AddButtonAsChild(comboBoxRoot);
853
854 //Setup ComboBox
855 var comboBox = comboBoxRoot.AddComponent<ComboBox>();
856 var cbbRT = comboBoxRoot.GetComponent<RectTransform>();
857
858 //Setup Template
859 itemTemplate.name = "ItemTemplate";
860 var itemTemplateRT = itemTemplate.GetComponent<RectTransform>();
861 itemTemplateRT.sizeDelta = cbbRT.sizeDelta;
862 var itemTemplateButton = itemTemplate.GetComponent<Button>();
863 itemTemplateButton.transition = Selectable.Transition.None;
864 var itemTemplateLayoutElement = itemTemplate.AddComponent<LayoutElement>();
865 itemTemplateLayoutElement.minHeight = cbbRT.rect.height;
866 itemTemplate.SetActive(false);
867
868 //Setup InputField
869 var inputFieldRT = inputField.GetComponent<RectTransform>();
870 inputFieldRT.anchorMin = Vector2.zero;
871 inputFieldRT.anchorMax = Vector2.one;
872 inputFieldRT.sizeDelta = Vector2.zero;
873 Events.UnityEventTools.AddPersistentListener<string>(inputField.GetComponent<InputField>().onValueChanged, new UnityEngine.Events.UnityAction<string>(comboBox.OnValueChanged));
874
875 //Setup Overlay
876 var overlayRT = overlay.GetComponent<RectTransform>();
877 overlayRT.anchorMin = new Vector2(0f, 1f);
878 overlayRT.anchorMax = new Vector2(0f, 1f);
879 overlayRT.sizeDelta = new Vector2(0f, 1f);
880 overlayRT.pivot = new Vector2(0f, 1f);
881 overlay.AddComponent<Image>().color = new Color(0.243f, 0.871f, 0f, 0f);
882 Events.UnityEventTools.AddBoolPersistentListener(overlay.AddComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(comboBox.ToggleDropdownPanel), true);
883 //Overlay Scroll Panel
884 var overlayScrollPanelRT = overlayScrollPanel.GetComponent<RectTransform>();
885 overlayScrollPanelRT.position += new Vector3(0, -cbbRT.sizeDelta.y, 0);
886 overlayScrollPanelRT.anchorMin = new Vector2(0f, 1f);
887 overlayScrollPanelRT.anchorMax = new Vector2(0f, 1f);
888 overlayScrollPanelRT.sizeDelta = new Vector2(cbbRT.sizeDelta.x, cbbRT.sizeDelta.y * 3);
889 overlayScrollPanelRT.pivot = new Vector2(0f, 1f);
890 overlayScrollPanel.AddComponent<Image>();
891 overlayScrollPanel.AddComponent<Mask>();
892 var scrollRect = overlayScrollPanel.AddComponent<ScrollRect>();
893 scrollRect.horizontal = false;
894 scrollRect.movementType = ScrollRect.MovementType.Clamped;
895 scrollRect.verticalScrollbar = overlayScrollPanelScrollBar.GetComponent<Scrollbar>();
896 //Overlay Items list
897 var overlayScrollPanelItemsRT = overlayScrollPanelItems.GetComponent<RectTransform>();
898 overlayScrollPanelItemsRT.position += new Vector3(5, 0, 0);
899 overlayScrollPanelItemsRT.anchorMin = new Vector2(0f, 1f);
900 overlayScrollPanelItemsRT.anchorMax = new Vector2(0f, 1f);
901 overlayScrollPanelItemsRT.sizeDelta = new Vector2(120f, 5f);
902 overlayScrollPanelItemsRT.pivot = new Vector2(0f, 1f);
903 scrollRect.content = overlayScrollPanelItemsRT;
904 var overlayScrollPanelItemsVLG = overlayScrollPanelItems.AddComponent<VerticalLayoutGroup>();
905 overlayScrollPanelItemsVLG.padding = new RectOffset(0, 0, 5, 0);
906 var overlayScrollPanelItemsFitter = overlayScrollPanelItems.AddComponent<ContentSizeFitter>();
907 overlayScrollPanelItemsFitter.verticalFit = ContentSizeFitter.FitMode.MinSize;
908 //Overlay Scrollbar
909 var overlayScrollPanelScrollbarRT = overlayScrollPanelScrollBar.GetComponent<RectTransform>();
910 overlayScrollPanelScrollbarRT.anchorMin = new Vector2(1f, 0f);
911 overlayScrollPanelScrollbarRT.anchorMax = Vector2.one;
912 overlayScrollPanelScrollbarRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, 0f);
913 overlayScrollPanelScrollbarRT.pivot = Vector2.one;
914 overlayScrollPanelScrollbarRT.GetComponent<Scrollbar>().direction = Scrollbar.Direction.BottomToTop;
915 overlayScrollPanelScrollBar.transform.GetChild(0).name = "SlidingArea";
916
917 //Arrow Button
918 arrowButton.name = "ArrowBtn";
919 var arrowButtonRT = arrowButton.GetComponent<RectTransform>();
920 arrowButtonRT.anchorMin = Vector2.one;
921 arrowButtonRT.anchorMax = Vector2.one;
922 arrowButtonRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, cbbRT.sizeDelta.y);
923 arrowButtonRT.pivot = Vector2.one;
924 Events.UnityEventTools.AddBoolPersistentListener(arrowButton.GetComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(comboBox.ToggleDropdownPanel), true);
925 arrowButton.GetComponentInChildren<Text>().text = "â–¼";
926
927 Selection.activeGameObject = comboBoxRoot;
928 }
929
930 [MenuItem("GameObject/UI/Extensions/DropDownList", false)]
931 static public void AddDropDownList(MenuCommand menuCommand)
932 {
933 GameObject dropDownListRoot = CreateUIElementRoot("DropDownList", menuCommand, s_ThickGUIElementSize);
934
935 //Create Template
936 GameObject itemTemplate = AddButtonAsChild(dropDownListRoot);
937 GameObject itemTemplateImage = AddImageAsChild(itemTemplate);
938 itemTemplateImage.GetComponent<Transform>().SetSiblingIndex(0);
939
940 //Create Main Button
941 GameObject mainButton = AddButtonAsChild(dropDownListRoot);
942 GameObject mainButtonImage = AddImageAsChild(mainButton);
943 mainButtonImage.GetComponent<Transform>().SetSiblingIndex(0);
944
945 //Create Overlay
946 GameObject overlay = CreateUIObject("Overlay", dropDownListRoot);
947 GameObject overlayScrollPanel = CreateUIObject("ScrollPanel", overlay);
948 GameObject overlayScrollPanelItems = CreateUIObject("Items", overlayScrollPanel);
949 GameObject overlayScrollPanelScrollBar = AddScrollbarAsChild(overlayScrollPanel);
950
951 //Create Arrow Button
952 GameObject arrowText = AddTextAsChild(dropDownListRoot);
953
954 //Setup DropDownList
955 var dropDownList = dropDownListRoot.AddComponent<DropDownList>();
956 var cbbRT = dropDownListRoot.GetComponent<RectTransform>();
957
958 //Setup Template
959 itemTemplate.name = "ItemTemplate";
960 var itemTemplateRT = itemTemplate.GetComponent<RectTransform>();
961 itemTemplateRT.sizeDelta = cbbRT.sizeDelta;
962 var itemTemplateButton = itemTemplate.GetComponent<Button>();
963 itemTemplateButton.transition = Selectable.Transition.None;
964 var itemTemplateLayoutElement = itemTemplate.AddComponent<LayoutElement>();
965 itemTemplateLayoutElement.minHeight = cbbRT.rect.height;
966 itemTemplate.SetActive(false);
967 //Item Template Image
968 var itemTemplateImageRT = itemTemplateImage.GetComponent<RectTransform>();
969 itemTemplateImageRT.anchorMin = Vector2.zero;
970 itemTemplateImageRT.anchorMax = new Vector2(0f, 1f);
971 itemTemplateImageRT.pivot = new Vector2(0f, 1f);
972 itemTemplateImageRT.sizeDelta = Vector2.one;
973 itemTemplateImageRT.offsetMin = new Vector2(4f, 4f);
974 itemTemplateImageRT.offsetMax = new Vector2(22f, -4f);
975 itemTemplateImage.GetComponent<Image>().color = new Color(0, 0, 0, 0);
976
977 //Setup Main Button
978 mainButton.name = "MainButton";
979 var mainButtonRT = mainButton.GetComponent<RectTransform>();
980 mainButtonRT.anchorMin = Vector2.zero;
981 mainButtonRT.anchorMax = Vector2.one;
982 mainButtonRT.sizeDelta = Vector2.zero;
983 Events.UnityEventTools.AddBoolPersistentListener(mainButton.GetComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(dropDownList.ToggleDropdownPanel), true);
984 var mainButtonText = mainButton.GetComponentInChildren<Text>();
985 mainButtonText.alignment = TextAnchor.MiddleLeft;
986 mainButtonText.text = "Select Item...";
987 var mainButtonTextRT = mainButtonText.GetComponent<RectTransform>();
988 mainButtonTextRT.anchorMin = Vector2.zero;
989 mainButtonTextRT.anchorMin = Vector2.zero;
990 mainButtonTextRT.pivot = new Vector2(0f, 1f);
991 mainButtonTextRT.offsetMin = new Vector2(10f, 0f);
992 mainButtonTextRT.offsetMax = new Vector2(-4f, 0f);
993 //Main Button Image
994 var mainButtonImageRT = mainButtonImage.GetComponent<RectTransform>();
995 mainButtonImageRT.anchorMin = Vector2.zero;
996 mainButtonImageRT.anchorMax = new Vector2(0f, 1f);
997 mainButtonImageRT.pivot = new Vector2(0f, 1f);
998 mainButtonImageRT.sizeDelta = Vector2.one;
999 mainButtonImageRT.offsetMin = new Vector2(4f, 4f);
1000 mainButtonImageRT.offsetMax = new Vector2(22f, -4f);
1001 mainButtonImageRT.GetComponent<Image>().color = new Color(1, 1, 1, 0);
1002
1003
1004 //Setup Overlay
1005 var overlayRT = overlay.GetComponent<RectTransform>();
1006 overlayRT.anchorMin = new Vector2(0f, 1f);
1007 overlayRT.anchorMax = new Vector2(0f, 1f);
1008 overlayRT.sizeDelta = new Vector2(0f, 1f);
1009 overlayRT.pivot = new Vector2(0f, 1f);
1010 overlay.AddComponent<Image>().color = new Color(0.243f, 0.871f, 0f, 0f);
1011 Events.UnityEventTools.AddBoolPersistentListener(overlay.AddComponent<Button>().onClick, new UnityEngine.Events.UnityAction<bool>(dropDownList.ToggleDropdownPanel), true);
1012 //Overlay Scroll Panel
1013 var overlayScrollPanelRT = overlayScrollPanel.GetComponent<RectTransform>();
1014 overlayScrollPanelRT.position += new Vector3(0, -cbbRT.sizeDelta.y, 0);
1015 overlayScrollPanelRT.anchorMin = new Vector2(0f, 1f);
1016 overlayScrollPanelRT.anchorMax = new Vector2(0f, 1f);
1017 overlayScrollPanelRT.sizeDelta = new Vector2(cbbRT.sizeDelta.x, cbbRT.sizeDelta.y * 3);
1018 overlayScrollPanelRT.pivot = new Vector2(0f, 1f);
1019 overlayScrollPanel.AddComponent<Image>();
1020 overlayScrollPanel.AddComponent<Mask>();
1021 var scrollRect = overlayScrollPanel.AddComponent<ScrollRect>();
1022 scrollRect.horizontal = false;
1023 scrollRect.movementType = ScrollRect.MovementType.Clamped;
1024 scrollRect.verticalScrollbar = overlayScrollPanelScrollBar.GetComponent<Scrollbar>();
1025 //Overlay Items list
1026 var overlayScrollPanelItemsRT = overlayScrollPanelItems.GetComponent<RectTransform>();
1027 overlayScrollPanelItemsRT.position += new Vector3(5, 0, 0);
1028 overlayScrollPanelItemsRT.anchorMin = new Vector2(0f, 1f);
1029 overlayScrollPanelItemsRT.anchorMax = new Vector2(0f, 1f);
1030 overlayScrollPanelItemsRT.sizeDelta = new Vector2(120f, 5f);
1031 overlayScrollPanelItemsRT.pivot = new Vector2(0f, 1f);
1032 scrollRect.content = overlayScrollPanelItemsRT;
1033 var overlayScrollPanelItemsVLG = overlayScrollPanelItems.AddComponent<VerticalLayoutGroup>();
1034 overlayScrollPanelItemsVLG.padding = new RectOffset(0, 0, 5, 0);
1035 var overlayScrollPanelItemsFitter = overlayScrollPanelItems.AddComponent<ContentSizeFitter>();
1036 overlayScrollPanelItemsFitter.verticalFit = ContentSizeFitter.FitMode.MinSize;
1037 //Overlay Scrollbar
1038 var overlayScrollPanelScrollbarRT = overlayScrollPanelScrollBar.GetComponent<RectTransform>();
1039 overlayScrollPanelScrollbarRT.anchorMin = new Vector2(1f, 0f);
1040 overlayScrollPanelScrollbarRT.anchorMax = Vector2.one;
1041 overlayScrollPanelScrollbarRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, 0f);
1042 overlayScrollPanelScrollbarRT.pivot = Vector2.one;
1043 overlayScrollPanelScrollbarRT.GetComponent<Scrollbar>().direction = Scrollbar.Direction.BottomToTop;
1044 overlayScrollPanelScrollBar.transform.GetChild(0).name = "SlidingArea";
1045
1046 //Arrow Button
1047 arrowText.name = "Arrow";
1048 var arrowTextRT = arrowText.GetComponent<RectTransform>();
1049 arrowTextRT.anchorMin = new Vector2(1f, 0f);
1050 arrowTextRT.anchorMax = Vector2.one;
1051 arrowTextRT.sizeDelta = new Vector2(cbbRT.sizeDelta.y, cbbRT.sizeDelta.y);
1052 arrowTextRT.pivot = new Vector2(1f, 0.5f);
1053 var arrowTextComponent = arrowText.GetComponent<Text>();
1054 arrowTextComponent.text = "â–¼";
1055 arrowTextComponent.alignment = TextAnchor.MiddleCenter;
1056 var arrowTextCanvasGroup = arrowText.AddComponent<CanvasGroup>();
1057 arrowTextCanvasGroup.interactable = false;
1058 arrowTextCanvasGroup.blocksRaycasts = false;
1059 Selection.activeGameObject = dropDownListRoot;
1060 }
1061 #endregion
1062
1063 #region RTS Selection box
1064 [MenuItem("GameObject/UI/Extensions/Selection Box", false)]
1065 static public void AddSelectionBox(MenuCommand menuCommand)
1066 {
1067 var go = CreateNewUI();
1068 go.name = "Selection Box";
1069 GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
1070 RectTransform rect = go.transform as RectTransform;
1071 rect.anchorMin = Vector2.zero;
1072 rect.anchorMax = Vector2.one;
1073 rect.anchoredPosition = Vector2.zero;
1074 rect.sizeDelta = Vector2.zero;
1075
1076 Image image = go.AddComponent<Image>();
1077 image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
1078 image.type = Image.Type.Sliced;
1079 image.fillCenter = false;
1080 image.color = new Color(1f, 1f, 1f, 0.392f);
1081
1082
1083 SelectionBox selectableArea = go.AddComponent<SelectionBox>();
1084 selectableArea.selectionMask = rect;
1085 selectableArea.color = new Color(0.816f, 0.816f, 0.816f, 0.353f);
1086
1087
1088 GameObject childSelectableItem = CreateUIObject("Selectable", go);
1089 childSelectableItem.AddComponent<Image>();
1090 childSelectableItem.AddComponent<ExampleSelectable>();
1091
1092
1093 Selection.activeGameObject = go;
1094 }
1095 #endregion
1096
1097 #region Bound Tooltip
1098 [MenuItem("GameObject/UI/Extensions/Bound Tooltip/Tooltip", false)]
1099 static public void AddBoundTooltip(MenuCommand menuCommand)
1100 {
1101 GameObject go = CreateUIElementRoot("Tooltip", menuCommand, s_ImageGUIElementSize);
1102 var tooltip = go.AddComponent<BoundTooltipTrigger>();
1103 tooltip.text = "This is my Tooltip Text";
1104 var boundTooltip = go.AddComponent<Image>();
1105 boundTooltip.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
1106
1107 // if there is no ToolTipItem add one...
1108 CreateToolTipItem(false, go);
1109 Selection.activeGameObject = go;
1110 }
1111
1112 private static void CreateToolTipItem(bool select)
1113 {
1114 CreateToolTipItem(select, null);
1115 }
1116
1117 private static void CreateToolTipItem(bool select, GameObject parent)
1118 {
1119 var btti = Object.FindObjectOfType<BoundTooltipItem>();
1120 if (btti == null)
1121 {
1122 var boundTooltipItem = CreateUIObject("ToolTipItem", parent.GetComponentInParent<Canvas>().gameObject);
1123 btti = boundTooltipItem.AddComponent<BoundTooltipItem>();
1124 var boundTooltipItemCanvasGroup = boundTooltipItem.AddComponent<CanvasGroup>();
1125 boundTooltipItemCanvasGroup.interactable = false;
1126 boundTooltipItemCanvasGroup.blocksRaycasts = false;
1127 var boundTooltipItemImage = boundTooltipItem.AddComponent<Image>();
1128 boundTooltipItemImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
1129 var boundTooltipItemText = CreateUIObject("Text", boundTooltipItem);
1130 var boundTooltipItemTextRT = boundTooltipItemText.GetComponent<RectTransform>();
1131 boundTooltipItemTextRT.anchorMin = Vector2.zero;
1132 boundTooltipItemTextRT.anchorMax = Vector2.one;
1133 boundTooltipItemTextRT.sizeDelta = Vector2.one;
1134 var boundTooltipItemTextcomponent = boundTooltipItemText.AddComponent<Text>();
1135 boundTooltipItemTextcomponent.alignment = TextAnchor.MiddleCenter;
1136 Undo.RegisterCreatedObjectUndo(boundTooltipItem, "Create " + boundTooltipItem.name);
1137 }
1138
1139 if (select && btti != null)
1140 {
1141 Selection.activeGameObject = btti.gameObject;
1142 }
1143 }
1144
1145 #endregion
1146
1147 #region Progress bar
1148 [MenuItem("GameObject/UI/Extensions/Progress Bar", false)]
1149 static public void AddSlider(MenuCommand menuCommand)
1150 {
1151 // Create GOs Hierarchy
1152 GameObject root = CreateUIElementRoot("Progress Bar", menuCommand, s_ThinGUIElementSize);
1153
1154 GameObject background = CreateUIObject("Background", root);
1155 GameObject fillArea = CreateUIObject("Fill Area", root);
1156 GameObject fill = CreateUIObject("Fill", fillArea);
1157
1158 // Background
1159 Image backgroundImage = background.AddComponent<Image>();
1160 backgroundImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
1161 backgroundImage.type = Image.Type.Sliced;
1162 backgroundImage.color = s_DefaultSelectableColor;
1163 RectTransform backgroundRect = background.GetComponent<RectTransform>();
1164 backgroundRect.anchorMin = new Vector2(0, 0.25f);
1165 backgroundRect.anchorMax = new Vector2(1, 0.75f);
1166 backgroundRect.sizeDelta = new Vector2(0, 0);
1167
1168 // Fill Area
1169 RectTransform fillAreaRect = fillArea.GetComponent<RectTransform>();
1170 fillAreaRect.anchorMin = new Vector2(0, 0.25f);
1171 fillAreaRect.anchorMax = new Vector2(1, 0.75f);
1172 fillAreaRect.anchoredPosition = Vector2.zero;
1173 fillAreaRect.sizeDelta = Vector2.zero;
1174
1175 // Fill
1176 Image fillImage = fill.AddComponent<Image>();
1177 fillImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
1178 fillImage.type = Image.Type.Sliced;
1179 fillImage.color = s_DefaultSelectableColor;
1180
1181 RectTransform fillRect = fill.GetComponent<RectTransform>();
1182 fillRect.sizeDelta = Vector2.zero;
1183
1184 // Setup slider component
1185 Slider slider = root.AddComponent<Slider>();
1186 slider.value = 0;
1187 slider.fillRect = fill.GetComponent<RectTransform>();
1188 slider.targetGraphic = fillImage;
1189 slider.direction = Slider.Direction.LeftToRight;
1190 SetDefaultColorTransitionValues(slider);
1191 }
1192 #endregion
1193
1194 #region Primitives
1195
1196 [MenuItem("GameObject/UI/Extensions/Primitives/UI Line Renderer", false)]
1197 static public void AddUILineRenderer(MenuCommand menuCommand)
1198 {
1199 GameObject go = CreateUIElementRoot("UI LineRenderer", menuCommand, s_ImageGUIElementSize);
1200 go.AddComponent<UILineRenderer>();
1201 Selection.activeGameObject = go;
1202 }
1203
1204 [MenuItem("GameObject/UI/Extensions/Primitives/UI Line Texture Renderer", false)]
1205 static public void AddUILineTextureRenderer(MenuCommand menuCommand)
1206 {
1207 GameObject go = CreateUIElementRoot("UI LineTextureRenderer", menuCommand, s_ImageGUIElementSize);
1208 go.AddComponent<UILineTextureRenderer>();
1209 Selection.activeGameObject = go;
1210 }
1211
1212 [MenuItem("GameObject/UI/Extensions/Primitives/UI Circle", false)]
1213 static public void AddUICircle(MenuCommand menuCommand)
1214 {
1215 GameObject go = CreateUIElementRoot("UI Circle", menuCommand, s_ImageGUIElementSize);
1216 go.AddComponent<UICircle>();
1217 Selection.activeGameObject = go;
1218 }
1219
1220 [MenuItem("GameObject/UI/Extensions/Primitives/UI Diamond Graph", false)]
1221 static public void AddDiamondGraph(MenuCommand menuCommand)
1222 {
1223 GameObject go = CreateUIElementRoot("UI Diamond Graph", menuCommand, s_ImageGUIElementSize);
1224 go.AddComponent<DiamondGraph>();
1225 Selection.activeGameObject = go;
1226 }
1227
1228 [MenuItem("GameObject/UI/Extensions/Primitives/UI Cut Corners", false)]
1229 static public void AddCutCorners(MenuCommand menuCommand)
1230 {
1231 GameObject go = CreateUIElementRoot("UI Cut Corners", menuCommand, s_ImageGUIElementSize);
1232 go.AddComponent<UICornerCut>();
1233 Selection.activeGameObject = go;
1234 }
1235
1236 [MenuItem("GameObject/UI/Extensions/Primitives/UI Polygon", false)]
1237 static public void AddPolygon(MenuCommand menuCommand)
1238 {
1239 GameObject go = CreateUIElementRoot("UI Polygon", menuCommand, s_ImageGUIElementSize);
1240 go.AddComponent<UIPolygon>();
1241 Selection.activeGameObject = go;
1242 }
1243
1244 [MenuItem("GameObject/UI/Extensions/Primitives/UI Grid Renderer", false)]
1245 static public void AddUIGridRenderer(MenuCommand menuCommand)
1246 {
1247 GameObject go = CreateUIElementRoot("UI GridRenderer", menuCommand, s_ImageGUIElementSize);
1248 go.AddComponent<UIGridRenderer>();
1249 Selection.activeGameObject = go;
1250 }
1251
1252 #endregion
1253
1254 #region Re-Orderable Lists
1255
1256 [MenuItem("GameObject/UI/Extensions/Re-orderable Lists/Re-orderable Vertical Scroll Rect", false)]
1257 static public void AddReorderableScrollRectVertical(MenuCommand menuCommand)
1258 {
1259 GameObject reorderableScrollRoot = CreateUIElementRoot("Re-orderable Vertical ScrollRect", menuCommand, s_ThickGUIElementSize);
1260
1261 GameObject childContent = CreateUIObject("List_Content", reorderableScrollRoot);
1262
1263 GameObject Element01 = CreateUIObject("Element_01", childContent);
1264 GameObject Element02 = CreateUIObject("Element_02", childContent);
1265 GameObject Element03 = CreateUIObject("Element_03", childContent);
1266
1267
1268 // Set RectTransform to stretch
1269 RectTransform rectTransformScrollSnapRoot = reorderableScrollRoot.GetComponent<RectTransform>();
1270 rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
1271 rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
1272 rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
1273 rectTransformScrollSnapRoot.sizeDelta = new Vector2(150f, 150f);
1274
1275
1276 Image image = reorderableScrollRoot.AddComponent<Image>();
1277 image.color = new Color(1f, 1f, 1f, 0.392f);
1278
1279 ScrollRect sr = reorderableScrollRoot.AddComponent<ScrollRect>();
1280 sr.vertical = true;
1281 sr.horizontal = false;
1282
1283 LayoutElement reorderableScrollRootLE = reorderableScrollRoot.AddComponent<LayoutElement>();
1284 reorderableScrollRootLE.preferredHeight = 300;
1285
1286 reorderableScrollRoot.AddComponent<Mask>();
1287 ReorderableList reorderableScrollRootRL = reorderableScrollRoot.AddComponent<ReorderableList>();
1288
1289 //Setup Content container
1290 RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
1291 rectTransformContent.anchorMin = Vector2.zero;
1292 rectTransformContent.anchorMax = new Vector2(1f, 1f);
1293 rectTransformContent.sizeDelta = Vector2.zero;
1294 VerticalLayoutGroup childContentVLG = childContent.AddComponent<VerticalLayoutGroup>();
1295 ContentSizeFitter childContentCSF = childContent.AddComponent<ContentSizeFitter>();
1296 childContentCSF.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
1297
1298 sr.content = rectTransformContent;
1299 reorderableScrollRootRL.ContentLayout = childContentVLG;
1300
1301 //Setup 1st Child
1302 Image Element01Image = Element01.AddComponent<Image>();
1303 Element01Image.color = Color.green;
1304
1305 RectTransform rectTransformElement01 = Element01.GetComponent<RectTransform>();
1306 rectTransformElement01.anchorMin = new Vector2(0f, 0.5f);
1307 rectTransformElement01.anchorMax = new Vector2(0f, 0.5f);
1308 rectTransformElement01.pivot = new Vector2(0.5f, 0.5f);
1309
1310 LayoutElement LEElement01 = Element01.AddComponent<LayoutElement>();
1311 LEElement01.minHeight = 50;
1312
1313 //Setup 2nd Child
1314 Image Element02Image = Element02.AddComponent<Image>();
1315 Element02Image.color = Color.red;
1316
1317 RectTransform rectTransformElement02 = Element02.GetComponent<RectTransform>();
1318 rectTransformElement02.anchorMin = new Vector2(0f, 0.5f);
1319 rectTransformElement02.anchorMax = new Vector2(0f, 0.5f);
1320 rectTransformElement02.pivot = new Vector2(0.5f, 0.5f);
1321
1322 LayoutElement LEElement02 = Element02.AddComponent<LayoutElement>();
1323 LEElement02.minHeight = 50;
1324
1325 //Setup 2nd Child
1326 Image Element03Image = Element03.AddComponent<Image>();
1327 Element03Image.color = Color.blue;
1328
1329 RectTransform rectTransformElement03 = Element03.GetComponent<RectTransform>();
1330 rectTransformElement03.anchorMin = new Vector2(0f, 0.5f);
1331 rectTransformElement03.anchorMax = new Vector2(0f, 0.5f);
1332 rectTransformElement03.pivot = new Vector2(0.5f, 0.5f);
1333
1334 LayoutElement LEElement03 = Element03.AddComponent<LayoutElement>();
1335 LEElement03.minHeight = 50;
1336
1337
1338 //Need to add example child components like in the Asset (SJ)
1339 Selection.activeGameObject = reorderableScrollRoot;
1340 }
1341
1342 [MenuItem("GameObject/UI/Extensions/Re-orderable Lists/Re-orderable Horizontal Scroll Rect", false)]
1343 static public void AddReorderableScrollRectHorizontal(MenuCommand menuCommand)
1344 {
1345 GameObject reorderableScrollRoot = CreateUIElementRoot("Re-orderable Horizontal ScrollRect", menuCommand, s_ThickGUIElementSize);
1346
1347 GameObject childContent = CreateUIObject("List_Content", reorderableScrollRoot);
1348
1349 GameObject Element01 = CreateUIObject("Element_01", childContent);
1350 GameObject Element02 = CreateUIObject("Element_02", childContent);
1351 GameObject Element03 = CreateUIObject("Element_03", childContent);
1352
1353
1354 // Set RectTransform to stretch
1355 RectTransform rectTransformScrollSnapRoot = reorderableScrollRoot.GetComponent<RectTransform>();
1356 rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
1357 rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
1358 rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
1359 rectTransformScrollSnapRoot.sizeDelta = new Vector2(150f, 150f);
1360
1361
1362 Image image = reorderableScrollRoot.AddComponent<Image>();
1363 image.color = new Color(1f, 1f, 1f, 0.392f);
1364
1365 ScrollRect sr = reorderableScrollRoot.AddComponent<ScrollRect>();
1366 sr.vertical = false;
1367 sr.horizontal = true;
1368
1369 LayoutElement reorderableScrollRootLE = reorderableScrollRoot.AddComponent<LayoutElement>();
1370 reorderableScrollRootLE.preferredHeight = 300;
1371
1372 reorderableScrollRoot.AddComponent<Mask>();
1373 ReorderableList reorderableScrollRootRL = reorderableScrollRoot.AddComponent<ReorderableList>();
1374
1375 //Setup Content container
1376 RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
1377 rectTransformContent.anchorMin = Vector2.zero;
1378 rectTransformContent.anchorMax = new Vector2(1f, 1f);
1379 rectTransformContent.sizeDelta = Vector2.zero;
1380 HorizontalLayoutGroup childContentHLG = childContent.AddComponent<HorizontalLayoutGroup>();
1381 ContentSizeFitter childContentCSF = childContent.AddComponent<ContentSizeFitter>();
1382 childContentCSF.horizontalFit = ContentSizeFitter.FitMode.PreferredSize;
1383
1384 sr.content = rectTransformContent;
1385 reorderableScrollRootRL.ContentLayout = childContentHLG;
1386
1387 //Setup 1st Child
1388 Image Element01Image = Element01.AddComponent<Image>();
1389 Element01Image.color = Color.green;
1390
1391 RectTransform rectTransformElement01 = Element01.GetComponent<RectTransform>();
1392 rectTransformElement01.anchorMin = new Vector2(0f, 0.5f);
1393 rectTransformElement01.anchorMax = new Vector2(0f, 0.5f);
1394 rectTransformElement01.pivot = new Vector2(0.5f, 0.5f);
1395
1396 LayoutElement LEElement01 = Element01.AddComponent<LayoutElement>();
1397 LEElement01.minWidth = 50;
1398
1399 //Setup 2nd Child
1400 Image Element02Image = Element02.AddComponent<Image>();
1401 Element02Image.color = Color.red;
1402
1403 RectTransform rectTransformElement02 = Element02.GetComponent<RectTransform>();
1404 rectTransformElement02.anchorMin = new Vector2(0f, 0.5f);
1405 rectTransformElement02.anchorMax = new Vector2(0f, 0.5f);
1406 rectTransformElement02.pivot = new Vector2(0.5f, 0.5f);
1407
1408 LayoutElement LEElement02 = Element02.AddComponent<LayoutElement>();
1409 LEElement02.minWidth = 50;
1410
1411 //Setup 2nd Child
1412 Image Element03Image = Element03.AddComponent<Image>();
1413 Element03Image.color = Color.blue;
1414
1415 RectTransform rectTransformElement03 = Element03.GetComponent<RectTransform>();
1416 rectTransformElement03.anchorMin = new Vector2(0f, 0.5f);
1417 rectTransformElement03.anchorMax = new Vector2(0f, 0.5f);
1418 rectTransformElement03.pivot = new Vector2(0.5f, 0.5f);
1419
1420 LayoutElement LEElement03 = Element03.AddComponent<LayoutElement>();
1421 LEElement03.minWidth = 50;
1422
1423
1424 //Need to add example child components like in the Asset (SJ)
1425 Selection.activeGameObject = reorderableScrollRoot;
1426 }
1427
1428 [MenuItem("GameObject/UI/Extensions/Re-orderable Lists/Re-orderable Grid Scroll Rect", false)]
1429 static public void AddReorderableScrollRectGrid(MenuCommand menuCommand)
1430 {
1431 GameObject reorderableScrollRoot = CreateUIElementRoot("Re-orderable Grid ScrollRect", menuCommand, s_ThickGUIElementSize);
1432
1433 GameObject childContent = CreateUIObject("List_Content", reorderableScrollRoot);
1434
1435 GameObject Element01 = CreateUIObject("Element_01", childContent);
1436 GameObject Element02 = CreateUIObject("Element_02", childContent);
1437 GameObject Element03 = CreateUIObject("Element_03", childContent);
1438
1439
1440 // Set RectTransform to stretch
1441 RectTransform rectTransformScrollSnapRoot = reorderableScrollRoot.GetComponent<RectTransform>();
1442 rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
1443 rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
1444 rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
1445 rectTransformScrollSnapRoot.sizeDelta = new Vector2(150f, 150f);
1446
1447
1448 Image image = reorderableScrollRoot.AddComponent<Image>();
1449 image.color = new Color(1f, 1f, 1f, 0.392f);
1450
1451 ScrollRect sr = reorderableScrollRoot.AddComponent<ScrollRect>();
1452 sr.vertical = true;
1453 sr.horizontal = false;
1454
1455 LayoutElement reorderableScrollRootLE = reorderableScrollRoot.AddComponent<LayoutElement>();
1456 reorderableScrollRootLE.preferredHeight = 300;
1457
1458 reorderableScrollRoot.AddComponent<Mask>();
1459 ReorderableList reorderableScrollRootRL = reorderableScrollRoot.AddComponent<ReorderableList>();
1460
1461 //Setup Content container
1462 RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
1463 rectTransformContent.anchorMin = Vector2.zero;
1464 rectTransformContent.anchorMax = new Vector2(1f, 1f);
1465 rectTransformContent.sizeDelta = Vector2.zero;
1466 GridLayoutGroup childContentGLG = childContent.AddComponent<GridLayoutGroup>();
1467 childContentGLG.cellSize = new Vector2(30, 30);
1468 childContentGLG.spacing = new Vector2(10, 10);
1469 ContentSizeFitter childContentCSF = childContent.AddComponent<ContentSizeFitter>();
1470 childContentCSF.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
1471
1472 sr.content = rectTransformContent;
1473 reorderableScrollRootRL.ContentLayout = childContentGLG;
1474
1475 //Setup 1st Child
1476 Image Element01Image = Element01.AddComponent<Image>();
1477 Element01Image.color = Color.green;
1478
1479 RectTransform rectTransformElement01 = Element01.GetComponent<RectTransform>();
1480 rectTransformElement01.anchorMin = new Vector2(0f, 0.5f);
1481 rectTransformElement01.anchorMax = new Vector2(0f, 0.5f);
1482 rectTransformElement01.pivot = new Vector2(0.5f, 0.5f);
1483
1484 LayoutElement LEElement01 = Element01.AddComponent<LayoutElement>();
1485 LEElement01.minHeight = 50;
1486
1487 //Setup 2nd Child
1488 Image Element02Image = Element02.AddComponent<Image>();
1489 Element02Image.color = Color.red;
1490
1491 RectTransform rectTransformElement02 = Element02.GetComponent<RectTransform>();
1492 rectTransformElement02.anchorMin = new Vector2(0f, 0.5f);
1493 rectTransformElement02.anchorMax = new Vector2(0f, 0.5f);
1494 rectTransformElement02.pivot = new Vector2(0.5f, 0.5f);
1495
1496 LayoutElement LEElement02 = Element02.AddComponent<LayoutElement>();
1497 LEElement02.minHeight = 50;
1498
1499 //Setup 2nd Child
1500 Image Element03Image = Element03.AddComponent<Image>();
1501 Element03Image.color = Color.blue;
1502
1503 RectTransform rectTransformElement03 = Element03.GetComponent<RectTransform>();
1504 rectTransformElement03.anchorMin = new Vector2(0f, 0.5f);
1505 rectTransformElement03.anchorMax = new Vector2(0f, 0.5f);
1506 rectTransformElement03.pivot = new Vector2(0.5f, 0.5f);
1507
1508 LayoutElement LEElement03 = Element03.AddComponent<LayoutElement>();
1509 LEElement03.minHeight = 50;
1510
1511
1512 //Need to add example child components like in the Asset (SJ)
1513 Selection.activeGameObject = reorderableScrollRoot;
1514 }
1515
1516 [MenuItem("GameObject/UI/Extensions/Re-orderable Lists/Re-orderable Vertical List", false)]
1517 static public void AddReorderableVerticalList(MenuCommand menuCommand)
1518 {
1519 GameObject reorderableScrollRoot = CreateUIElementRoot("Re-orderable Vertical List", menuCommand, s_ThickGUIElementSize);
1520
1521 GameObject childContent = CreateUIObject("List_Content", reorderableScrollRoot);
1522
1523 GameObject Element01 = CreateUIObject("Element_01", childContent);
1524 GameObject Element02 = CreateUIObject("Element_02", childContent);
1525 GameObject Element03 = CreateUIObject("Element_03", childContent);
1526
1527
1528 // Set RectTransform to stretch
1529 RectTransform rectTransformScrollSnapRoot = reorderableScrollRoot.GetComponent<RectTransform>();
1530 rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
1531 rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
1532 rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
1533 rectTransformScrollSnapRoot.sizeDelta = new Vector2(150f, 150f);
1534
1535 Image image = reorderableScrollRoot.AddComponent<Image>();
1536 image.color = new Color(1f, 1f, 1f, 0.392f);
1537
1538 LayoutElement reorderableScrollRootLE = reorderableScrollRoot.AddComponent<LayoutElement>();
1539 reorderableScrollRootLE.preferredHeight = 300;
1540
1541 reorderableScrollRoot.AddComponent<Mask>();
1542 ReorderableList reorderableScrollRootRL = reorderableScrollRoot.AddComponent<ReorderableList>();
1543
1544 //Setup Content container
1545 RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
1546 rectTransformContent.anchorMin = Vector2.zero;
1547 rectTransformContent.anchorMax = new Vector2(1f, 1f);
1548 rectTransformContent.sizeDelta = Vector2.zero;
1549 VerticalLayoutGroup childContentVLG = childContent.AddComponent<VerticalLayoutGroup>();
1550 ContentSizeFitter childContentCSF = childContent.AddComponent<ContentSizeFitter>();
1551 childContentCSF.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
1552
1553 reorderableScrollRootRL.ContentLayout = childContentVLG;
1554
1555 //Setup 1st Child
1556 Image Element01Image = Element01.AddComponent<Image>();
1557 Element01Image.color = Color.green;
1558
1559 RectTransform rectTransformElement01 = Element01.GetComponent<RectTransform>();
1560 rectTransformElement01.anchorMin = new Vector2(0f, 0.5f);
1561 rectTransformElement01.anchorMax = new Vector2(0f, 0.5f);
1562 rectTransformElement01.pivot = new Vector2(0.5f, 0.5f);
1563
1564 LayoutElement LEElement01 = Element01.AddComponent<LayoutElement>();
1565 LEElement01.minHeight = 50;
1566
1567 //Setup 2nd Child
1568 Image Element02Image = Element02.AddComponent<Image>();
1569 Element02Image.color = Color.red;
1570
1571 RectTransform rectTransformElement02 = Element02.GetComponent<RectTransform>();
1572 rectTransformElement02.anchorMin = new Vector2(0f, 0.5f);
1573 rectTransformElement02.anchorMax = new Vector2(0f, 0.5f);
1574 rectTransformElement02.pivot = new Vector2(0.5f, 0.5f);
1575
1576 LayoutElement LEElement02 = Element02.AddComponent<LayoutElement>();
1577 LEElement02.minHeight = 50;
1578
1579 //Setup 2nd Child
1580 Image Element03Image = Element03.AddComponent<Image>();
1581 Element03Image.color = Color.blue;
1582
1583 RectTransform rectTransformElement03 = Element03.GetComponent<RectTransform>();
1584 rectTransformElement03.anchorMin = new Vector2(0f, 0.5f);
1585 rectTransformElement03.anchorMax = new Vector2(0f, 0.5f);
1586 rectTransformElement03.pivot = new Vector2(0.5f, 0.5f);
1587
1588 LayoutElement LEElement03 = Element03.AddComponent<LayoutElement>();
1589 LEElement03.minHeight = 50;
1590
1591
1592 //Need to add example child components like in the Asset (SJ)
1593 Selection.activeGameObject = reorderableScrollRoot;
1594 }
1595
1596 [MenuItem("GameObject/UI/Extensions/Re-orderable Lists/Re-orderable Horizontal List", false)]
1597 static public void AddReorderableHorizontalList(MenuCommand menuCommand)
1598 {
1599 GameObject reorderableScrollRoot = CreateUIElementRoot("Re-orderable Horizontal List", menuCommand, s_ThickGUIElementSize);
1600
1601 GameObject childContent = CreateUIObject("List_Content", reorderableScrollRoot);
1602
1603 GameObject Element01 = CreateUIObject("Element_01", childContent);
1604 GameObject Element02 = CreateUIObject("Element_02", childContent);
1605 GameObject Element03 = CreateUIObject("Element_03", childContent);
1606
1607
1608 // Set RectTransform to stretch
1609 RectTransform rectTransformScrollSnapRoot = reorderableScrollRoot.GetComponent<RectTransform>();
1610 rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
1611 rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
1612 rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
1613 rectTransformScrollSnapRoot.sizeDelta = new Vector2(150f, 150f);
1614
1615
1616 Image image = reorderableScrollRoot.AddComponent<Image>();
1617 image.color = new Color(1f, 1f, 1f, 0.392f);
1618
1619 LayoutElement reorderableScrollRootLE = reorderableScrollRoot.AddComponent<LayoutElement>();
1620 reorderableScrollRootLE.preferredHeight = 300;
1621
1622 reorderableScrollRoot.AddComponent<Mask>();
1623 ReorderableList reorderableScrollRootRL = reorderableScrollRoot.AddComponent<ReorderableList>();
1624
1625 //Setup Content container
1626 RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
1627 rectTransformContent.anchorMin = Vector2.zero;
1628 rectTransformContent.anchorMax = new Vector2(1f, 1f);
1629 rectTransformContent.sizeDelta = Vector2.zero;
1630 HorizontalLayoutGroup childContentHLG = childContent.AddComponent<HorizontalLayoutGroup>();
1631 ContentSizeFitter childContentCSF = childContent.AddComponent<ContentSizeFitter>();
1632 childContentCSF.horizontalFit = ContentSizeFitter.FitMode.PreferredSize;
1633
1634 reorderableScrollRootRL.ContentLayout = childContentHLG;
1635
1636 //Setup 1st Child
1637 Image Element01Image = Element01.AddComponent<Image>();
1638 Element01Image.color = Color.green;
1639
1640 RectTransform rectTransformElement01 = Element01.GetComponent<RectTransform>();
1641 rectTransformElement01.anchorMin = new Vector2(0f, 0.5f);
1642 rectTransformElement01.anchorMax = new Vector2(0f, 0.5f);
1643 rectTransformElement01.pivot = new Vector2(0.5f, 0.5f);
1644
1645 LayoutElement LEElement01 = Element01.AddComponent<LayoutElement>();
1646 LEElement01.minWidth = 50;
1647
1648 //Setup 2nd Child
1649 Image Element02Image = Element02.AddComponent<Image>();
1650 Element02Image.color = Color.red;
1651
1652 RectTransform rectTransformElement02 = Element02.GetComponent<RectTransform>();
1653 rectTransformElement02.anchorMin = new Vector2(0f, 0.5f);
1654 rectTransformElement02.anchorMax = new Vector2(0f, 0.5f);
1655 rectTransformElement02.pivot = new Vector2(0.5f, 0.5f);
1656
1657 LayoutElement LEElement02 = Element02.AddComponent<LayoutElement>();
1658 LEElement02.minWidth = 50;
1659
1660 //Setup 2nd Child
1661 Image Element03Image = Element03.AddComponent<Image>();
1662 Element03Image.color = Color.blue;
1663
1664 RectTransform rectTransformElement03 = Element03.GetComponent<RectTransform>();
1665 rectTransformElement03.anchorMin = new Vector2(0f, 0.5f);
1666 rectTransformElement03.anchorMax = new Vector2(0f, 0.5f);
1667 rectTransformElement03.pivot = new Vector2(0.5f, 0.5f);
1668
1669 LayoutElement LEElement03 = Element03.AddComponent<LayoutElement>();
1670 LEElement03.minWidth = 50;
1671
1672
1673 //Need to add example child components like in the Asset (SJ)
1674 Selection.activeGameObject = reorderableScrollRoot;
1675 }
1676
1677 [MenuItem("GameObject/UI/Extensions/Re-orderable Lists/Re-orderable Grid", false)]
1678 static public void AddReorderableGrid(MenuCommand menuCommand)
1679 {
1680 GameObject reorderableScrollRoot = CreateUIElementRoot("Re-orderable Grid", menuCommand, s_ThickGUIElementSize);
1681
1682 GameObject childContent = CreateUIObject("List_Content", reorderableScrollRoot);
1683
1684 GameObject Element01 = CreateUIObject("Element_01", childContent);
1685 GameObject Element02 = CreateUIObject("Element_02", childContent);
1686 GameObject Element03 = CreateUIObject("Element_03", childContent);
1687
1688
1689 // Set RectTransform to stretch
1690 RectTransform rectTransformScrollSnapRoot = reorderableScrollRoot.GetComponent<RectTransform>();
1691 rectTransformScrollSnapRoot.anchorMin = new Vector2(0.5f, 0.5f);
1692 rectTransformScrollSnapRoot.anchorMax = new Vector2(0.5f, 0.5f);
1693 rectTransformScrollSnapRoot.anchoredPosition = Vector2.zero;
1694 rectTransformScrollSnapRoot.sizeDelta = new Vector2(150f, 150f);
1695
1696
1697 Image image = reorderableScrollRoot.AddComponent<Image>();
1698 image.color = new Color(1f, 1f, 1f, 0.392f);
1699
1700 LayoutElement reorderableScrollRootLE = reorderableScrollRoot.AddComponent<LayoutElement>();
1701 reorderableScrollRootLE.preferredHeight = 300;
1702
1703 reorderableScrollRoot.AddComponent<Mask>();
1704 ReorderableList reorderableScrollRootRL = reorderableScrollRoot.AddComponent<ReorderableList>();
1705
1706 //Setup Content container
1707 RectTransform rectTransformContent = childContent.GetComponent<RectTransform>();
1708 rectTransformContent.anchorMin = Vector2.zero;
1709 rectTransformContent.anchorMax = new Vector2(1f, 1f);
1710 rectTransformContent.sizeDelta = Vector2.zero;
1711 GridLayoutGroup childContentGLG = childContent.AddComponent<GridLayoutGroup>();
1712 childContentGLG.cellSize = new Vector2(30, 30);
1713 childContentGLG.spacing = new Vector2(10, 10);
1714 ContentSizeFitter childContentCSF = childContent.AddComponent<ContentSizeFitter>();
1715 childContentCSF.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
1716
1717 reorderableScrollRootRL.ContentLayout = childContentGLG;
1718
1719 //Setup 1st Child
1720 Image Element01Image = Element01.AddComponent<Image>();
1721 Element01Image.color = Color.green;
1722
1723 RectTransform rectTransformElement01 = Element01.GetComponent<RectTransform>();
1724 rectTransformElement01.anchorMin = new Vector2(0f, 0.5f);
1725 rectTransformElement01.anchorMax = new Vector2(0f, 0.5f);
1726 rectTransformElement01.pivot = new Vector2(0.5f, 0.5f);
1727
1728 LayoutElement LEElement01 = Element01.AddComponent<LayoutElement>();
1729 LEElement01.minHeight = 50;
1730
1731 //Setup 2nd Child
1732 Image Element02Image = Element02.AddComponent<Image>();
1733 Element02Image.color = Color.red;
1734
1735 RectTransform rectTransformElement02 = Element02.GetComponent<RectTransform>();
1736 rectTransformElement02.anchorMin = new Vector2(0f, 0.5f);
1737 rectTransformElement02.anchorMax = new Vector2(0f, 0.5f);
1738 rectTransformElement02.pivot = new Vector2(0.5f, 0.5f);
1739
1740 LayoutElement LEElement02 = Element02.AddComponent<LayoutElement>();
1741 LEElement02.minHeight = 50;
1742
1743 //Setup 2nd Child
1744 Image Element03Image = Element03.AddComponent<Image>();
1745 Element03Image.color = Color.blue;
1746
1747 RectTransform rectTransformElement03 = Element03.GetComponent<RectTransform>();
1748 rectTransformElement03.anchorMin = new Vector2(0f, 0.5f);
1749 rectTransformElement03.anchorMax = new Vector2(0f, 0.5f);
1750 rectTransformElement03.pivot = new Vector2(0.5f, 0.5f);
1751
1752 LayoutElement LEElement03 = Element03.AddComponent<LayoutElement>();
1753 LEElement03.minHeight = 50;
1754
1755
1756 //Need to add example child components like in the Asset (SJ)
1757 Selection.activeGameObject = reorderableScrollRoot;
1758 }
1759
1760
1761 #endregion
1762
1763 #region Segmented Control
1764 [MenuItem("GameObject/UI/Extensions/Segmented Control", false)]
1765 static public void AddSegmentedControl(MenuCommand menuCommand)
1766 {
1767 GameObject go = CreateUIElementRoot("Segmented Control", menuCommand, s_ThickGUIElementSize);
1768 SegmentedControl control = go.AddComponent<SegmentedControl>();
1769
1770 Color selectedColor = new Color(0f, 0.455f, 0.894f);
1771
1772 var labels = new string[] { "This", "That", "Other" };
1773 for (int i = 0; i < 3; i++)
1774 {
1775 var button = AddButtonAsChild(go).GetComponent<Button>();
1776 button.gameObject.AddComponent<Segment>();
1777 button.name = "Segment " + (i + 1);
1778
1779 var colors = button.colors;
1780 colors.pressedColor = selectedColor;
1781 button.colors = colors;
1782
1783 var text = button.GetComponentInChildren<Text>();
1784 text.text = labels[i];
1785 text.color = selectedColor;
1786 }
1787
1788 control.LayoutSegments();
1789
1790 Selection.activeGameObject = go;
1791 }
1792 #endregion
1793
1794 #region Stepper
1795 [MenuItem("GameObject/UI/Extensions/Stepper", false)]
1796 static public void AddStepper(MenuCommand menuCommand)
1797 {
1798 GameObject go = CreateUIElementRoot("Stepper", menuCommand, new Vector2(kWidth / 2, kThickHeight));
1799 Stepper control = go.AddComponent<Stepper>();
1800
1801 var labels = new string[] { "−", "+" };
1802 for (int i = 0; i < 2; i++)
1803 {
1804 var button = AddButtonAsChild(go);
1805 button.gameObject.AddComponent<StepperSide>();
1806 button.name = i == 0 ? "Minus" : "Plus";
1807 var text = button.GetComponentInChildren<Text>();
1808 text.text = labels[i];
1809 }
1810
1811 control.LayoutSides();
1812
1813 Selection.activeGameObject = go;
1814 }
1815 #endregion
1816
1817 #region UI Knob
1818 [MenuItem("GameObject/UI/Extensions/UI Knob", false)]
1819 static public void AddUIKnob(MenuCommand menuCommand)
1820 {
1821 GameObject go = CreateUIElementRoot("UI Knob", menuCommand, s_ImageGUIElementSize);
1822 go.AddComponent<Image>();
1823 go.AddComponent<UI_Knob>();
1824 Selection.activeGameObject = go;
1825 }
1826 #endregion
1827
1828 #region TextPic
1829 [MenuItem("GameObject/UI/Extensions/TextPic", false)]
1830 static public void AddTextPic(MenuCommand menuCommand)
1831 {
1832 GameObject go = CreateUIElementRoot("TextPic", menuCommand, s_ImageGUIElementSize);
1833 go.AddComponent<TextPic>();
1834 Selection.activeGameObject = go;
1835 }
1836 #endregion
1837
1838 #region BoxSlider
1839 [MenuItem("GameObject/UI/Extensions/Box Slider", false)]
1840 static public void AddBoxSlider(MenuCommand menuCommand)
1841 {
1842
1843 GameObject uiboxSliderRoot = CreateUIElementRoot("Box Slider", menuCommand, s_ImageGUIElementSize);
1844
1845 GameObject handleSlideArea = CreateUIObject("Handle Slide Area", uiboxSliderRoot);
1846
1847 GameObject handle = CreateUIObject("Handle", handleSlideArea);
1848
1849 // Set RectTransform to stretch
1850 SetAnchorsAndStretch(uiboxSliderRoot);
1851 Image backgroundImage = uiboxSliderRoot.AddComponent<Image>();
1852 backgroundImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
1853 backgroundImage.type = Image.Type.Sliced;
1854 backgroundImage.fillCenter = false;
1855 backgroundImage.color = new Color(1f, 1f, 1f, 0.392f);
1856
1857 RectTransform handleRect = SetAnchorsAndStretch(handle);
1858 handleRect.sizeDelta = new Vector2(25, 25);
1859 Image handleImage = handle.AddComponent<Image>();
1860 handleImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kKnobPath);
1861 handleImage.type = Image.Type.Simple;
1862 handleImage.fillCenter = false;
1863 handleImage.color = new Color(1f, 1f, 1f, 0.392f);
1864
1865
1866 BoxSlider selectableArea = uiboxSliderRoot.AddComponent<BoxSlider>();
1867 selectableArea.HandleRect = handle.GetComponent<RectTransform>();
1868 selectableArea.ValueX = selectableArea.ValueY = 0.5f;
1869
1870 Selection.activeGameObject = uiboxSliderRoot;
1871 }
1872 #endregion
1873
1874 #region Non Drawing Graphic options
1875 [MenuItem("GameObject/UI/Extensions/NonDrawingGraphic", false)]
1876 static public void AddNonDrawingGraphic(MenuCommand menuCommand)
1877 {
1878 GameObject go = CreateUIElementRoot("NonDrawing Graphic", menuCommand, s_ImageGUIElementSize);
1879 go.AddComponent<NonDrawingGraphic>();
1880 Selection.activeGameObject = go;
1881 }
1882
1883 [MenuItem("GameObject/UI/Extensions/NonDrawingGraphicClickable", false)]
1884 static public void AddClickableNonDrawingGraphic(MenuCommand menuCommand)
1885 {
1886 GameObject go = CreateUIElementRoot("NonDrawing Graphic-Clickable", menuCommand, s_ImageGUIElementSize);
1887 go.AddComponent<NonDrawingGraphic>();
1888 go.AddComponent<UISelectableExtension>();
1889 Selection.activeGameObject = go;
1890 }
1891 #endregion
1892
1893 #region Radial Slider
1894 [MenuItem("GameObject/UI/Extensions/Radial Slider", false)]
1895 static public void AddRadialSlider(MenuCommand menuCommand)
1896 {
1897 GameObject sliderRoot = CreateUIElementRoot("Radial Slider", menuCommand, s_ThickGUIElementSize);
1898 GameObject SliderControl = CreateUIObject("Slider", sliderRoot);
1899
1900 Image image = sliderRoot.AddComponent<Image>();
1901 image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
1902 image.type = Image.Type.Simple;
1903 image.color = s_DefaultSelectableColor;
1904
1905 RectTransform sliderRootRectTransform = sliderRoot.GetComponent<RectTransform>();
1906 sliderRootRectTransform.anchorMin = new Vector2(0.5f, 0.5f);
1907 sliderRootRectTransform.anchorMax = new Vector2(0.5f, 0.5f);
1908 sliderRootRectTransform.anchoredPosition = Vector2.zero;
1909 sliderRootRectTransform.sizeDelta = new Vector2(250f, 250f);
1910
1911 Image slidrImage = SliderControl.AddComponent<Image>();
1912 slidrImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
1913 slidrImage.type = Image.Type.Filled;
1914 slidrImage.fillMethod = Image.FillMethod.Radial360;
1915 slidrImage.fillOrigin = 3;
1916 slidrImage.color = Color.red;
1917 slidrImage.fillAmount = 0;
1918 RadialSlider slider = SliderControl.AddComponent<RadialSlider>();
1919 slider.StartColor = Color.green;
1920 slider.EndColor = Color.red;
1921
1922 RectTransform sliderRectTransform = SliderControl.GetComponent<RectTransform>();
1923 sliderRectTransform.anchorMin = Vector2.zero;
1924 sliderRectTransform.anchorMax = Vector2.one;
1925 sliderRectTransform.sizeDelta = Vector2.zero;
1926
1927 Selection.activeGameObject = sliderRoot;
1928 }
1929 #endregion
1930
1931 #region RangeSlider
1932 [MenuItem("GameObject/UI/Extensions/Range Slider", false)]
1933 static public void AddRangeSlider(MenuCommand menuCommand)
1934 {
1935 GameObject rangeSliderRoot = CreateUIElementRoot("Range Slider", menuCommand, new Vector2(160, 20));
1936
1937 GameObject background = CreateUIObject("Background", rangeSliderRoot);
1938
1939 GameObject fillArea = CreateUIObject("Fill Area", rangeSliderRoot);
1940 GameObject fill = CreateUIObject("Fill", fillArea);
1941
1942 GameObject handleSlideArea = CreateUIObject("Handle Slide Area", rangeSliderRoot);
1943 GameObject lowHandle = CreateUIObject("Low Handle", handleSlideArea);
1944 GameObject highHandle = CreateUIObject("High Handle", handleSlideArea);
1945
1946 SetAnchorsAndStretch(rangeSliderRoot);
1947 Image backgroundImage = background.AddComponent<Image>();
1948 backgroundImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
1949 backgroundImage.type = Image.Type.Sliced;
1950 backgroundImage.fillCenter = false;
1951
1952 RectTransform backgroundRect = backgroundImage.rectTransform;
1953 backgroundRect.anchorMin = new Vector2(0, 0.25f);
1954 backgroundRect.anchorMax = new Vector2(1, 0.75f);
1955 backgroundRect.sizeDelta = Vector2.zero;
1956
1957 RectTransform fillAreaRect = SetAnchorsAndStretch(fillArea);
1958 fillAreaRect.anchorMin = new Vector2(0, 0.25f);
1959 fillAreaRect.anchorMax = new Vector2(1, 0.75f);
1960 fillAreaRect.offsetMin = new Vector2(5, 0);
1961 fillAreaRect.offsetMax = new Vector2(-5, 0);
1962
1963 RectTransform fillRect = SetAnchorsAndStretch(fill);
1964 Image fillImage = fill.AddComponent<Image>();
1965 fillImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
1966 fillImage.type = Image.Type.Sliced;
1967 fillImage.fillCenter = true;
1968 fillRect.offsetMin = new Vector2(-5, 0);
1969 fillRect.offsetMax = new Vector2(5, 0);
1970
1971 RectTransform handleSlideRect = SetAnchorsAndStretch(handleSlideArea);
1972 handleSlideRect.anchorMin = new Vector2(0, 0.5f);
1973 handleSlideRect.anchorMax = new Vector2(1, 0.5f);
1974 handleSlideRect.offsetMin = new Vector2(10, -10);
1975 handleSlideRect.offsetMax = new Vector2(-10, 10);
1976
1977 RectTransform lowHandleRect = SetAnchorsAndStretch(lowHandle);
1978 Image lowHandleImage = lowHandle.AddComponent<Image>();
1979 lowHandleImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kKnobPath);
1980 lowHandleRect.sizeDelta = new Vector2(20, 0);
1981
1982 RectTransform highHandleRect = SetAnchorsAndStretch(highHandle);
1983 Image highHandleImage = highHandle.AddComponent<Image>();
1984 highHandleImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kKnobPath);
1985 highHandleRect.sizeDelta = new Vector2(20, 0);
1986
1987 RangeSlider rangeSlider = rangeSliderRoot.AddComponent<RangeSlider>();
1988 rangeSlider.FillRect = fillRect;
1989 rangeSlider.LowHandleRect = lowHandleRect;
1990 rangeSlider.HighHandleRect = highHandleRect;
1991 rangeSlider.LowValue = rangeSlider.MinValue;
1992 rangeSlider.HighValue = rangeSlider.MaxValue;
1993 rangeSlider.targetGraphic = fillImage;
1994
1995 Selection.activeGameObject = rangeSliderRoot;
1996 }
1997 #endregion
1998
1999 #region Menu Manager GO
2000 [MenuItem("GameObject/UI/Extensions/Menu Manager", false)]
2001 static public void AddMenuManager(MenuCommand menuCommand)
2002 {
2003 GameObject child = new GameObject("MenuManager");
2004 Undo.RegisterCreatedObjectUndo(child, "Create " + "MenuManager");
2005 child.AddComponent<MenuManager>();
2006 Selection.activeGameObject = child;
2007 }
2008 #endregion
2009
2010
2011 #endregion
2012
2013 #region Helper Functions
2014 private static GameObject AddInputFieldAsChild(GameObject parent)
2015 {
2016 GameObject root = CreateUIObject("InputField", parent);
2017
2018 GameObject childPlaceholder = CreateUIObject("Placeholder", root);
2019 GameObject childText = CreateUIObject("Text", root);
2020
2021 Image image = root.AddComponent<Image>();
2022 image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kInputFieldBackgroundPath);
2023 image.type = Image.Type.Sliced;
2024 image.color = s_DefaultSelectableColor;
2025
2026 InputField inputField = root.AddComponent<InputField>();
2027 SetDefaultColorTransitionValues(inputField);
2028
2029 Text text = childText.AddComponent<Text>();
2030 text.text = "";
2031 text.supportRichText = false;
2032 SetDefaultTextValues(text);
2033
2034 Text placeholder = childPlaceholder.AddComponent<Text>();
2035 placeholder.text = "Enter text...";
2036 placeholder.fontStyle = FontStyle.Italic;
2037 // Make placeholder color half as opaque as normal text color.
2038 Color placeholderColor = text.color;
2039 placeholderColor.a *= 0.5f;
2040 placeholder.color = placeholderColor;
2041
2042 RectTransform textRectTransform = childText.GetComponent<RectTransform>();
2043 textRectTransform.anchorMin = Vector2.zero;
2044 textRectTransform.anchorMax = Vector2.one;
2045 textRectTransform.sizeDelta = Vector2.zero;
2046 textRectTransform.offsetMin = new Vector2(10, 6);
2047 textRectTransform.offsetMax = new Vector2(-10, -7);
2048
2049 RectTransform placeholderRectTransform = childPlaceholder.GetComponent<RectTransform>();
2050 placeholderRectTransform.anchorMin = Vector2.zero;
2051 placeholderRectTransform.anchorMax = Vector2.one;
2052 placeholderRectTransform.sizeDelta = Vector2.zero;
2053 placeholderRectTransform.offsetMin = new Vector2(10, 6);
2054 placeholderRectTransform.offsetMax = new Vector2(-10, -7);
2055
2056 inputField.textComponent = text;
2057 inputField.placeholder = placeholder;
2058
2059 return root;
2060 }
2061
2062 private static GameObject AddScrollbarAsChild(GameObject parent)
2063 {
2064 // Create GOs Hierarchy
2065 GameObject scrollbarRoot = CreateUIObject("Scrollbar", parent);
2066
2067 GameObject sliderArea = CreateUIObject("Sliding Area", scrollbarRoot);
2068 GameObject handle = CreateUIObject("Handle", sliderArea);
2069
2070 Image bgImage = scrollbarRoot.AddComponent<Image>();
2071 bgImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpriteResourcePath);
2072 bgImage.type = Image.Type.Sliced;
2073 bgImage.color = s_DefaultSelectableColor;
2074
2075 Image handleImage = handle.AddComponent<Image>();
2076 handleImage.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
2077 handleImage.type = Image.Type.Sliced;
2078 handleImage.color = s_DefaultSelectableColor;
2079
2080 RectTransform sliderAreaRect = sliderArea.GetComponent<RectTransform>();
2081 sliderAreaRect.sizeDelta = new Vector2(-20, -20);
2082 sliderAreaRect.anchorMin = Vector2.zero;
2083 sliderAreaRect.anchorMax = Vector2.one;
2084
2085 RectTransform handleRect = handle.GetComponent<RectTransform>();
2086 handleRect.sizeDelta = new Vector2(20, 20);
2087
2088 Scrollbar scrollbar = scrollbarRoot.AddComponent<Scrollbar>();
2089 scrollbar.handleRect = handleRect;
2090 scrollbar.targetGraphic = handleImage;
2091 SetDefaultColorTransitionValues(scrollbar);
2092
2093 return scrollbarRoot;
2094 }
2095
2096 private static GameObject AddTextAsChild(GameObject parent)
2097 {
2098 GameObject go = CreateUIObject("Text", parent);
2099
2100 Text lbl = go.AddComponent<Text>();
2101 lbl.text = "New Text";
2102 SetDefaultTextValues(lbl);
2103
2104 return go;
2105 }
2106
2107 private static GameObject AddImageAsChild(GameObject parent)
2108 {
2109 GameObject go = CreateUIObject("Image", parent);
2110
2111 go.AddComponent<Image>();
2112
2113 return go;
2114 }
2115
2116 private static GameObject AddButtonAsChild(GameObject parent)
2117 {
2118 GameObject buttonRoot = CreateUIObject("Button", parent);
2119
2120 GameObject childText = new GameObject("Text");
2121 GameObjectUtility.SetParentAndAlign(childText, buttonRoot);
2122
2123 Image image = buttonRoot.AddComponent<Image>();
2124 image.sprite = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
2125 image.type = Image.Type.Sliced;
2126 image.color = s_DefaultSelectableColor;
2127
2128 Button bt = buttonRoot.AddComponent<Button>();
2129 SetDefaultColorTransitionValues(bt);
2130
2131 Text text = childText.AddComponent<Text>();
2132 text.text = "Button";
2133 text.alignment = TextAnchor.MiddleCenter;
2134 SetDefaultTextValues(text);
2135
2136 RectTransform textRectTransform = childText.GetComponent<RectTransform>();
2137 textRectTransform.anchorMin = Vector2.zero;
2138 textRectTransform.anchorMax = Vector2.one;
2139 textRectTransform.sizeDelta = Vector2.zero;
2140
2141 return buttonRoot;
2142 }
2143
2144 private static RectTransform SetAnchorsAndStretch(GameObject root)
2145 {
2146 RectTransform rectTransformRoot = root.GetComponent<RectTransform>();
2147 rectTransformRoot.anchorMin = new Vector2(0.5f, 0.5f);
2148 rectTransformRoot.anchorMax = new Vector2(0.5f, 0.5f);
2149 rectTransformRoot.anchoredPosition = Vector2.zero;
2150 return rectTransformRoot;
2151 }
2152
2153 #endregion
2154
2155 }
2156}
UnityEngine.UI.Button Button
Definition: Pointer.cs:7
System.Drawing.Image Image
Definition: TestScript.cs:37
UnityEngine.Color Color
Definition: TestScript.cs:32
Extension to the UI class which creates a dropdown list
Definition: DropDownList.cs:15
void LayoutSides(Selectable[] sides=null)
Definition: Stepper.cs:218
Includes a few fixes of my own, mainly to tidy up duplicates, remove unneeded stuff and testing....
Definition: UIWindowBase.cs:19
Credit Erdener Gonenc - @PixelEnvision.
UnityEngine.Object Object