protected override GameObject Install(GameObject go, RawImageElement element, IReadOnlyLayoutContext context) { var img = go.AddComponent <RawImage>(); img.color = context.ParseColor(element.Color); img.texture = context.GetAsset <Texture2D>(element.Image); img.material = context.GetAsset <Material>(element.Material); return(go); }
protected override GameObject Install(GameObject go, ImageElement element, IReadOnlyLayoutContext context) { var img = go.AddComponent <Image>(); img.color = context.ParseColor(element.Color); img.sprite = context.GetAsset <Sprite>(element.Image); img.preserveAspect = context.ParseBool(element.PreserveAspect); img.material = context.GetAsset <Material>(element.Material); return(go); }
protected override GameObject Install(GameObject go, LabelElement element, IReadOnlyLayoutContext context) { var rect = go.GetComponent <RectTransform>(); var oldOffsetMin = rect.offsetMin; var oldOffsetMax = rect.offsetMax; var textMesh = go.AddComponent <TextMeshProUGUI>(); textMesh.text = context.ParseString(element.Text); textMesh.fontSize = context.ParseFloat(element.FontSize); if (string.IsNullOrEmpty(element.Align)) { element.Align = "middle"; } if (string.IsNullOrEmpty(element.VertAlign)) { element.VertAlign = "middle"; } var alignment = ParseUtils.ParseTextMeshProAlignment(element.Align, element.VertAlign); if (alignment.HasValue) { textMesh.alignment = alignment.Value; } textMesh.color = context.ParseColor(element.Color); if (!string.IsNullOrEmpty(element.FitSize)) { var horiz = element.FitSize == "horizontal" || element.FitSize == "both"; var vert = element.FitSize == "vertical" || element.FitSize == "both"; var contentFitter = go.AddComponent <ContentSizeFitter>(); contentFitter.verticalFit = vert ? ContentSizeFitter.FitMode.PreferredSize : ContentSizeFitter.FitMode.Unconstrained; contentFitter.horizontalFit = horiz ? ContentSizeFitter.FitMode.PreferredSize : ContentSizeFitter.FitMode.Unconstrained; } rect.offsetMin = oldOffsetMin; rect.offsetMax = oldOffsetMax; return(go); }
public static void ReflectionSetComponentField(IReadOnlyLayoutContext context, string fieldName, Type fieldType, Action <object> setter, Component component, string value) { if (fieldType == typeof(string)) { setter(context.ParseString(value)); } else if (fieldType == typeof(int)) { setter(context.ParseInt(value)); } else if (fieldType == typeof(float)) { setter(context.ParseFloat(value)); } else if (fieldType == typeof(Vector2)) { setter(context.ParseVector2(value)); } else if (fieldType == typeof(Vector3)) { setter(context.ParseVector3(value)); } else if (fieldType == typeof(Vector4)) { setter(context.ParseVector4(value)); } else if (fieldType == typeof(Color)) { setter(context.ParseColor(value)); } else if (fieldType.IsEnum) { var reValue = context.ParseString(value); if (reValue.Length == 0) { return; } if (char.IsDigit(reValue[0])) { if (!int.TryParse(reValue, out var integer)) { Debug.LogError( $"Trying to set field {fieldName} of enum type {fieldType}, but `{reValue}` is not a number"); } else { setter(Enum.ToObject(fieldType, integer)); } } else { setter(Enum.Parse(fieldType, reValue)); } } else if (fieldType.IsSubclassOf(typeof(Object))) { var asset = context.GetAsset <Object>(value); setter(asset); } else { Debug.LogError($"Don't know how to set value of field type {fieldType} in {component}/{fieldName}"); } }