引用
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Events;
创建类
public class UICreator : MonoBehaviour {
private const int LayerUI = 5;
void Start () {
// 这里开始UGUI
}
}
创建Canvas,其它的UI都是基于它的对象
GameObject canvasObject = new GameObject("Canvas");
canvasObject.layer = LayerUI;
canvasObject.transform.SetParent(parent);
RectTransform canvasTrans = canvasObject.AddComponent<RectTransform>();
Canvas canvas = canvasObject.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvas.pixelPerfect = true;
CanvasScaler canvasScal = canvasObject.AddComponent<CanvasScaler>();
canvasScal.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
canvasScal.referenceResolution = new Vector2(800, 600);
canvasObject.AddComponent<GraphicRaycaster>();
创建EventSystem,UI的事件监听由它完成
GameObject esObject = new GameObject("EventSystem");
esObject.transform.SetParent(canvasObject.transform);
EventSystem esClass = esObject.AddComponent<EventSystem>();
esClass.sendNavigationEvents = true;
esClass.pixelDragThreshold = 5;
StandaloneInputModule stdInput = esObject.AddComponent<StandaloneInputModule>();
stdInput.horizontalAxis = "Horizontal";
stdInput.verticalAxis = "Vertical";
esObject.AddComponent<TouchInputModule>();
创建Panel,由于控制UI界面
GameObject panelObject = new GameObject("Panel");
panelObject.transform.SetParent(canvasObject.transform);
panelObject.layer = LayerUI;
RectTransform trans = panelObject.AddComponent<RectTransform>();
trans.anchorMin = new Vector2(0, 0);
trans.anchorMax = new Vector2(1, 1);
trans.anchoredPosition3D = new Vector3(0, 0, 0);
trans.anchoredPosition = new Vector2(0, 0);
trans.offsetMin = new Vector2(0, 0);
trans.offsetMax = new Vector2(0, 0);
trans.localPosition = new Vector3(0, 0, 0);
trans.sizeDelta = new Vector2(0, 0);
trans.localScale = new Vector3(0.8f, 0.8f, 1.0f);
panelObject.AddComponent<CanvasRenderer>();
//添加一个图片
Image image = panelObject.AddComponent<Image>();
Texture2D tex = Resources.Load<Texture2D>("panel_bkg");
image.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
创建 Text(文本)控件
GameObject textObject = new GameObject("Text");
textObject.transform.SetParent(panelObject.transform);
textObject.layer = LayerUI;
RectTransform trans = textObject.AddComponent<RectTransform>();
trans.sizeDelta.Set(w, h);
trans.anchoredPosition3D = new Vector3(0, 0, 0);
trans.anchoredPosition = new Vector2(x, y);
trans.localScale = new Vector3(1.0f, 1.0f, 1.0f);
trans.localPosition.Set(0, 0, 0);
textObject.AddComponent<CanvasRenderer>();
Text text = textObject.AddComponent<Text>();
text.supportRichText = true;
text.text = message;
text.fontSize = fontSize;
text.font = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font;
text.alignment = TextAnchor.MiddleCenter;
text.horizontalOverflow = HorizontalWrapMode.Overflow;
text.color = new Color(0, 0, 1);
创建 buttons(按钮)控件
GameObject buttonObject = new GameObject("Button");
buttonObject.transform.SetParent(panelObject.transform);
buttonObject.layer = LayerUI;
RectTransform trans = buttonObject.AddComponent<RectTransform>();
SetSize(trans, new Vector2(w, h));
trans.anchoredPosition3D = new Vector3(0, 0, 0);
trans.anchoredPosition = new Vector2(x, y);
trans.localScale = new Vector3(1.0f, 1.0f, 1.0f);
trans.localPosition.Set(0, 0, 0);
buttonObject.AddComponent<CanvasRenderer>();
Image image = buttonObject.AddComponent<Image>();
Texture2D tex = Resources.Load<Texture2D>("button_bkg");
image.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
Button button = buttonObject.AddComponent<Button>();
button.interactable = true;
button.onClick.AddListener(eventListner);