/// <summary> /// 将yaml文本解析为UINode /// </summary> /// <param name="objPrefab">预制体</param> /// <param name="bindingOnPrefabUiScript">预制体绑定的UI文件的GUID</param> /// <param name="scriptNodeList">解析的所有脚本</param> /// <returns></returns> public static List <UINode> PrasePrefabTextToUINode(GameObject objPrefab, string bindingOnPrefabUiScript, ref List <ScriptNode> scriptNodeList) { if (null == objPrefab) { return(null); } string context = ParasePrefabUtility.PrasePrefabToText(objPrefab); if (string.IsNullOrEmpty(context)) { return(null); } int startIndex = 0; int endIndex = 0; List <string> strList = new List <string>(); while (true) { if (startIndex >= context.Length) { break; } endIndex = context.IndexOf("--- !", startIndex); if (startIndex < endIndex) { strList.Add(context.Substring(startIndex, endIndex - startIndex)); startIndex = endIndex + 4; } else { if (startIndex < context.Length) { strList.Add(context.Substring(startIndex, context.Length - startIndex)); } break; } } List <ObjNode> objList = new List <ObjNode>(); List <TransformNode> transList = new List <TransformNode>(); for (int i = 1; i < strList.Count; i++) { var paraseStr = strList[i]; PraseNote(paraseStr, bindingOnPrefabUiScript, ref objList, ref transList, ref scriptNodeList); } List <UINode> nodeList = GetUINode(objList, transList); return(nodeList); }
private static void AutoCreateScript() { GameObject objPrefab = Selection.activeGameObject; if (null == objPrefab) { return; } string bindingOnPrefabUiScriptGuid = ParasePrefabUtility.GetBingdingScripGuid(objPrefab); List <ScriptNode> scriptNodeList = new List <ScriptNode>(); List <UINode> nodeList = ParasePrefabUtility.PrasePrefabTextToUINode(objPrefab, bindingOnPrefabUiScriptGuid, ref scriptNodeList); string declareStr = string.Empty; string initWidgetStr = string.Empty; GetUIStr(scriptNodeList, nodeList, bindingOnPrefabUiScriptGuid, ref declareStr, ref initWidgetStr); CreateUIScript(objPrefab.name, declareStr, initWidgetStr); }