public GameObject InstantiateWidget(Canvas canvas, SVGSpriteRef spriteRef, SVGUIWidgetType widgetType) { SVGSpriteAssetFile spriteAsset; if (this.m_GeneratedSpritesFiles.TryGetValue(spriteRef, out spriteAsset)) { return(this.InstantiateWidget(canvas, spriteAsset, widgetType)); } return(null); }
private GameObject InstantiateWidget(Canvas canvas, SVGSpriteAssetFile spriteAsset, SVGUIWidgetType widgetType) { Image uiImage; InputField inputField = null; SVGSpriteRef spriteRef = spriteAsset.SpriteRef; SVGSpriteData spriteData = spriteAsset.SpriteData; GameObject gameObj = new GameObject(); gameObj.layer = LayerMask.NameToLayer("UI"); // add Image component; NB: it will add a RectTransform component too uiImage = gameObj.AddComponent <Image>(); uiImage.fillCenter = true; uiImage.material = null; uiImage.color = new Color(1.0f, 1.0f, 1.0f, 1.0f); uiImage.sprite = spriteData.Sprite; switch (widgetType) { case SVGUIWidgetType.Button: gameObj.AddComponent <Button>(); break; case SVGUIWidgetType.InputField: inputField = gameObj.AddComponent <InputField>(); break; default: break; } // get RectTransform component and set size according to the associated sprite RectTransform rectTransform = gameObj.GetComponent <RectTransform>(); rectTransform.SetParent(canvas.transform); // attach SVGUISpriteLoaderBehaviour component SVGUISpriteLoaderBehaviour spriteLoader = (SVGUISpriteLoaderBehaviour)gameObj.AddComponent <SVGUISpriteLoaderBehaviour>(); spriteLoader.UIAtlas = this; spriteLoader.SpriteReference = spriteRef; spriteLoader.ResizeOnStart = true; // anchor presets if (widgetType == SVGUIWidgetType.Panel) { rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; rectTransform.localPosition = Vector3.zero; rectTransform.sizeDelta = Vector2.zero; } else { rectTransform.anchorMin = new Vector2(0.5f, 0.5f); rectTransform.anchorMax = new Vector2(0.5f, 0.5f); rectTransform.sizeDelta = new Vector2(spriteData.Sprite.rect.width, spriteData.Sprite.rect.height); } // set image type uiImage.type = (spriteData.Sprite.border != Vector4.zero) ? Image.Type.Sliced : Image.Type.Simple; if (widgetType == SVGUIWidgetType.InputField) { this.PopulateInputField(canvas, gameObj, inputField); } gameObj.name = spriteData.Sprite.name; gameObj.SetActive(true); return(gameObj); }