UIExtensionsMenuOptions.cs 94 KB

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