Example #1
0
    /// <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);
    }
Example #2
0
    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);
    }