using System; using UnityEngine; using UnityEngine.UI; namespace VketCloudGUITools.Runtime { public class VCFactory { public static VCLayerList CreateLayerList(string name, CanvasType canvasType) { var gameObject = new GameObject(name); var rectTransform = gameObject.AddComponent(); rectTransform.anchoredPosition = Vector2.zero; rectTransform.anchorMin = new Vector2(0.5f, 0.5f); rectTransform.anchorMax = new Vector2(0.5f, 0.5f); rectTransform.anchoredPosition = new Vector2(); if(canvasType == CanvasType.LandScape) { rectTransform.sizeDelta = new Vector2(1280, 720); } else if(canvasType == CanvasType.Portrait) { rectTransform.sizeDelta = new Vector2(1280, 2276); } else { throw new ArgumentException("CanvasType is invalid"); } var vcguiLayerList = gameObject.AddComponent(); vcguiLayerList.ResolveRequireComponents(); return vcguiLayerList; } public static VCCanvas CreateCanvas(string name) { var gameObject = new GameObject(name); var vcguiCanvas = gameObject.AddComponent(); var rectTransform = gameObject.GetComponent(); rectTransform.anchoredPosition = Vector2.zero; var canvas = gameObject.GetComponent(); canvas.renderMode = RenderMode.ScreenSpaceOverlay; return vcguiCanvas; } public static VCText CreateText(string name) { var gameObject = new GameObject(name); gameObject.AddComponent(); var rectTransform = gameObject.GetComponent(); rectTransform.anchoredPosition = Vector2.zero; gameObject.AddComponent(); var text = gameObject.AddComponent(); text.text = "New Text"; var vcguiText = gameObject.AddComponent(); vcguiText.ResolveRequireComponents(); return vcguiText; } public static VCImage CreateImage(string name) { var gameObject = new GameObject(name); gameObject.AddComponent(); var rectTransform = gameObject.GetComponent(); rectTransform.anchoredPosition = Vector2.zero; gameObject.AddComponent(); gameObject.AddComponent(); var vcguiImage = gameObject.AddComponent(); vcguiImage.ResolveRequireComponents(); return vcguiImage; } public static VCButton CreateButton(string name) { var gameObject = new GameObject(name); gameObject.AddComponent(); var rectTransform = gameObject.GetComponent(); rectTransform.anchoredPosition = Vector2.zero; gameObject.AddComponent(); gameObject.AddComponent(); var vcguiButton = gameObject.AddComponent(); vcguiButton.ResolveRequireComponents(); vcguiButton.ApplyDefaultToButton(); return vcguiButton; } public static VCHtml CreateHtml(string name) { var gameObject = new GameObject(name); gameObject.AddComponent(); var rectTransform = gameObject.GetComponent(); rectTransform.anchoredPosition = Vector2.zero; gameObject.AddComponent(); var vcguiHtml = gameObject.AddComponent(); vcguiHtml.ResolveRequireComponents(); return vcguiHtml; } public static VCUnknown CreateUnknown(string name) { var gameObject = new GameObject(name); gameObject.AddComponent(); var rectTransform = gameObject.GetComponent(); rectTransform.anchoredPosition = Vector2.zero; var vcguiUnknown = gameObject.AddComponent(); //vcguiUnknown.ResolveRequireComponents(); return vcguiUnknown; } static GameObject CreateUIObject(string name, GameObject parent) { GameObject go = new GameObject(name); go.AddComponent(); SetParentAndAlign(go, parent); return go; } private static void SetParentAndAlign(GameObject child, GameObject parent) { if (parent == null) return; child.transform.SetParent(parent.transform, false); SetLayerRecursively(child, parent.layer); } private static void SetLayerRecursively(GameObject go, int layer) { go.layer = layer; Transform t = go.transform; for (int i = 0; i < t.childCount; i++) SetLayerRecursively(t.GetChild(i).gameObject, layer); } /// /// UnityのHierarchy MenuのSliderを参考にしている /// Unity特有の初期パラメタ微調整は削除し、Heliodor的に都合よくしている /// https://github.com/Unity-Technologies/uGUI/blob/5ab4c0fee7cd5b3267672d877ec4051da525913c/UnityEngine.UI/UI/Core/DefaultControls.cs /// /// /// public static VCSlider CreateSlider(string name) { GameObject root = new GameObject(name); GameObject background = CreateUIObject("Background", root); GameObject fillArea = CreateUIObject("Fill Area", root); GameObject fill = CreateUIObject("Fill", fillArea); GameObject handleArea = CreateUIObject("Handle Slide Area", root); GameObject handle = CreateUIObject("Handle", handleArea); root.AddComponent(); var rectTransform = root.GetComponent(); rectTransform.anchoredPosition = Vector2.zero; // Background Image backgroundImage = background.AddComponent(); backgroundImage.sprite = null; RectTransform backgroundRect = background.GetComponent(); backgroundRect.anchorMin = new Vector2(0, 0); backgroundRect.anchorMax = new Vector2(1, 1); backgroundRect.sizeDelta = new Vector2(0, 0); // Fill Area RectTransform fillAreaRect = fillArea.GetComponent(); fillAreaRect.anchorMin = new Vector2(0, 0); fillAreaRect.anchorMax = new Vector2(1, 1); fillAreaRect.anchoredPosition = new Vector2(0, 0); fillAreaRect.sizeDelta = new Vector2(0, 0); // Fill Image fillImage = fill.AddComponent(); fillImage.sprite = null; RectTransform fillRect = fill.GetComponent(); fillRect.sizeDelta = new Vector2(0, 0); // Handle Area RectTransform handleAreaRect = handleArea.GetComponent(); handleAreaRect.sizeDelta = new Vector2(0, 0); handleAreaRect.anchorMin = new Vector2(0, 0.5f); handleAreaRect.anchorMax = new Vector2(1, 0.5f); // Handle Image handleImage = handle.AddComponent(); RectTransform handleRect = handle.GetComponent(); handleRect.sizeDelta = new Vector2(0, 0); // Setup Slider Component var vcSlider = root.AddComponent(); vcSlider.InitializePostAddComponent(backgroundImage, fillImage, handleImage, fillRect, handleRect); vcSlider.ResolveRequireComponents(); return vcSlider; } public static VCComment CreateComment(string comment, Transform parent) { var vcguiComment = new GameObject(comment, typeof(RectTransform)).AddComponent(); vcguiComment.transform.SetParent(parent); return vcguiComment; } } }