private static void ChargeInfoInternal(object component, AssemblerStateMechine mechine, string key, string pair_value) { var instence = component; var member = TypeUtil.GetDeepMember(ref instence, key); if (member != null) { if (member is FieldInfo) { var info = (member as FieldInfo); var value = GetValueFromTypeString(info.FieldType, pair_value, mechine); if (value != null) { info.SetValue(instence, value); } } else if (member is PropertyInfo) { var info = (member as PropertyInfo); var value = GetValueFromTypeString(info.PropertyType, pair_value, mechine); if (value != null) { info.SetValue(instence, value, null); } } } }
public static UINode CreateRootNode(this AssemblerStateMechine mechine, LayerInfo layerInfo, Rect customRect) { var path = layerInfo.path; var instenceName = NameFromPath(path); var go = new GameObject(instenceName, typeof(RectTransform)); go.layer = LayerMask.NameToLayer("UI"); go.transform.SetParent(mechine.canvas.transform, false); var uiRect = ParamAnalysisTool.PsRectToUnityRect(mechine.uiSize, customRect); SetRectTransform(uiRect, go.transform as RectTransform); UINode node = new UINode(go.transform, layerInfo); node.layerInfo = layerInfo; return(node); }
public static GameObject GenerateUI(string spriteFolderPath, Canvas canvas, Dictionary <string, Type> layerImportTypes, UIInfo uiInfo) { if (layerImportTypes == null) { return(null); } mechine = new AssemblerStateMechine(); mechine.spriteFolderPath = spriteFolderPath; mechine.uiSize = PreferHelper.uiSize; mechine.canvas = canvas; mechine.fontFolderPath = PreferHelper.fontFolderPath; mechine.textureFolderPath = PreferHelper.textureFolderPath; mechine.materialFolderPath = PreferHelper.materialFolderPath; mechine.RegistEmptyImprot(Activator.CreateInstance(emptyImporter) as ILayerImport); using (var enumerator = layerImportTypes.GetEnumerator()) { while (enumerator.MoveNext()) { var current = enumerator.Current; if (typeof(ILayerImport).IsAssignableFrom(current.Value)) { var instence = Activator.CreateInstance(current.Value) as ILayerImport; if (instence != null) { mechine.RegistLayerimport(current.Key, instence); } } } } if (mechine.canvas != null) { Screen.SetResolution(PreferHelper.uiSize.x, PreferHelper.uiSize.y, false); #if UNITY_EDITOR var ok = CheckGameViewSize(PreferHelper.uiSize); if (!ok) { var @continue = UnityEditor.EditorUtility.DisplayDialog("屏幕比例和配制不一致:" + PreferHelper.uiSize.ToString(), "继续生成会造成坐标不正确", "继续", "取消"); if (!@continue) { return(null); } } #endif return(mechine.GenerateUI(uiInfo)); } return(null); }
/// <summary> /// 装载入信息 /// </summary> /// <param name="component"></param> /// <param name="resourceDic"></param> public static void ChargeInfo(this AssemblerStateMechine mechine, Component component, ResourceDic resourceDic) { component.gameObject.SetActive(resourceDic.active); if (!resourceDic.active) { return; } using (var enumerator = resourceDic.GetEnumerator()) { while (enumerator.MoveNext()) { var pair = enumerator.Current; ChargeInfoInternal(component, mechine, pair.Key, pair.Value); } } }
/// <summary> /// 加载Image/Text/Label /// </summary> /// <param name="parent"></param> /// <param name="layerInfo"></param> public static void LoadCommonResources(AssemblerStateMechine mechine, UINode node, Rect baseRect) { Transform parent = node.transform; LayerInfo layerInfo = node.layerInfo; if (layerInfo.sub_images != null) { for (int i = 0; i < layerInfo.sub_images.Count; i++) { var current = layerInfo.sub_images[i]; var image = new GameObject("Image", typeof(RectTransform), typeof(Image)).GetComponent <Image>(); image.transform.SetParent(parent, false); mechine.ChargeInfo(image, current); image.rectTransform.SetRectFromResource(layerInfo.rect, baseRect, current); } } if (layerInfo.sub_texts != null) { for (int i = 0; i < layerInfo.sub_texts.Count; i++) { var current = layerInfo.sub_texts[i]; var title = LayerImportUtil.MakeTitleComponenet("Title", parent); title.resizeTextForBestFit = true;//缩放时会看不到? mechine.ChargeInfo(title, current); title.rectTransform.SetRectFromResource(layerInfo.rect, baseRect, current); } } if (layerInfo.sub_rawImages != null) { for (int i = 0; i < layerInfo.sub_rawImages.Count; i++) { var current = layerInfo.sub_rawImages[i]; var rawImage = new GameObject("RawImage", typeof(RectTransform), typeof(RawImage)).GetComponent <RawImage>(); rawImage.transform.SetParent(parent, false); mechine.ChargeInfo(rawImage, current); rawImage.rectTransform.SetRectFromResource(layerInfo.rect, baseRect, current); } } }
public static object GetValueFromTypeString(Type type, string value, AssemblerStateMechine mechine) { if (type == typeof(SpriteState)) { return(ParamAnalysisTool.StringToSpriteState(value, mechine.spriteFolderPath)); } else if (type == typeof(ColorBlock)) { return(ParamAnalysisTool.StringToColorBlock(value)); } else if (type == typeof(Sprite)) { return(ParamAnalysisTool.StringToObject <Sprite>(value, mechine.spriteFolderPath)); } else if (type == typeof(Font)) { return(ParamAnalysisTool.StringToObject <Font>(value, mechine.fontFolderPath)); } else if (type == typeof(Material)) { return(ParamAnalysisTool.StringToObject <Material>(value, mechine.materialFolderPath)); } else if (type == typeof(Texture)) { return(ParamAnalysisTool.StringToObject <Texture>(value, mechine.textureFolderPath)); } else if (type == typeof(Texture2D)) { return(ParamAnalysisTool.StringToObject <Texture2D>(value, mechine.textureFolderPath)); } else if (type == typeof(Color)) { return(ParamAnalysisTool.StringToColor(value)); } else if (type == typeof(Vector2)) { return(ParamAnalysisTool.StringToVector2(value)); } else if (type == typeof(Vector3)) { return(ParamAnalysisTool.StringToVector3(value)); } else if (type == typeof(Vector4)) { return(ParamAnalysisTool.StringToVector4(value)); } else if (type == typeof(Rect)) { return(ParamAnalysisTool.StringToRect(value)); } else if (typeof(IConvertible).IsAssignableFrom(type)) { if (type.IsSubclassOf(typeof(System.Enum))) { return(Enum.Parse(type, value)); } else { try { return(Convert.ChangeType(value, type)); } catch (Exception e) { Debug.LogWarning(e.Message + ":" + value); } } } Debug.LogWarningFormat("未成功解析类型为{0}的信息", type.FullName); return(null); }
public static void LoadCommonResources(AssemblerStateMechine mechine, UINode node) { LoadCommonResources(mechine, node, node.layerInfo.rect); }