/// <summary> /// Force cleanup / create widgets infrastructure from attached xml-schema. /// </summary> public void CreateVisuals() { ValidateGenerators(); if ((object)_defaultFont == null) { _defaultFont = _fonts.Count > 0 ? _fonts[0] : Resources.GetBuiltinResource <Font> ("Arial.ttf"); } if ((object)_defaultTheme == null) { _defaultTheme = _themes.Count > 0 ? _themes[0] : ScriptableObject.CreateInstance <MarkupTheme> (); } if (_xmlTree == null) { _xmlTree = LoadXml(_markupPath); } ClearVisuals(); CreateVisualNode(_xmlTree, MarkupUtils.CreateUiObject("root", transform)); _isVisualized = true; }
void CreateVisualNode(XmlNode xmlTree, RectTransform root) { if (xmlTree == null) { return; } Func <RectTransform, XmlNode, MarkupContainer, RectTransform> generator; var isFound = Generators.TryGetValue(xmlTree.NameHash, out generator); if (!isFound) { generator = BoxNode.Create; } var tr = MarkupUtils.CreateUiObject(null, root); var contentTr = generator(tr, xmlTree, this); #if UNITY_EDITOR if (!isFound) { tr.name = string.Format("unknown-replaced-with-{0}", tr.name); Debug.LogWarningFormat(tr, "Unknown hashed-node \"{0}\" - box-node will be used instead", xmlTree.NameHash); } #endif if ((object)_canvas == null) { _canvas = tr.GetComponentInChildren <Canvas> (); } var nodeName = xmlTree.GetAttribute(HashedName); if (!string.IsNullOrEmpty(nodeName)) { #if UNITY_EDITOR tr.name = string.Format("{0}-{1}", tr.name, nodeName); #endif var nodeNameHash = nodeName.GetStableHashCode(); if (_namedNodes.ContainsKey(nodeNameHash)) { #if UNITY_EDITOR Debug.LogWarning("Duplicate name: " + nodeName); #endif } else { _namedNodes[nodeNameHash] = tr; } } var children = xmlTree.Children; if (children.Count > 0) { if ((object)contentTr != null) { for (int i = 0, iMax = children.Count; i < iMax; i++) { CreateVisualNode(children[i], contentTr); } } else { Debug.LogWarning("Node not supported children.", tr); } } }