static string GetScriptString(GPrefabInstance firstTarget)
    {
        string script = "";
        GFrame frame  = firstTarget.GetComponentInParent <GFrame>();

        if (frame)
        {
            //script += "findPath = \"" + GUtility.GetPath(frame.transform, firstTarget.transform) + "\";\n";
            script += "trans = frame.Find(\"" + GUtility.GetPath(frame.transform, firstTarget.transform) + "\");\n";
        }
        GWidget prefab = firstTarget.prefab;

        for (int i = 0; i < prefab.exportToScriptInfos.Count; i++)
        {
            GExportToScriptInfo property = prefab.exportToScriptInfos[i];
            string path = GUtility.GetPath(firstTarget.transform, property.target.transform);
            if (path.StartsWith("/"))
            {
                path = path.Substring(1);
            }
            script += "trans.Find(\"" + path + "\").";
            script += "GetComponent <" + property.type + "> ();";
            script += "//" + property.rename + "\n";
        }
        return(script);
    }
 public void OnEnable()
 {
     firstTarget = serializedObject.targetObjects[0] as GPrefabInstance;
     allTargets  = new GPrefabInstance[serializedObject.targetObjects.Length];
     for (int i = 0; i < allTargets.Length; i++)
     {
         allTargets[i] = serializedObject.targetObjects[i] as GPrefabInstance;
     }
 }
    static string GetScriptString2(GPrefabInstance firstTarget)
    {
        string script = "";
        GFrame frame  = firstTarget.GetComponentInParent <GFrame>();

        if (frame)
        {
            script += "相对于Frame的路径:\n";
            script += "    \"" + GUtility.GetPath(frame.transform, firstTarget.transform) + "\"\t//" + GetTypes(firstTarget.prefab.transform) + "\n";
        }
        script += "\n";
        GWidget prefab = firstTarget.prefab;

        script += "内部结构:\n";
        script += GetTreeString(prefab.transform, "    ");
        return(script);
    }
예제 #4
0
    public void OnEnable()
    {
        widget = target as GWidget;
        if (!Application.isPlaying)
        {
            if (widget.GetComponentInParent <GFrame>())
            {
                if (widget.name != "__preview__")
                {
                    Object parentObject = PrefabUtility.GetPrefabParent(widget);
                    if (parentObject)
                    {
                        string  path   = AssetDatabase.GetAssetPath(parentObject);
                        GWidget prefab = AssetDatabase.LoadAssetAtPath <GWidget>(path);
                        if (prefab)
                        {
                            //add prefab instance
                            GameObject obj = new GameObject(widget.name);
                            obj.AddComponent <RectTransform>();
                            GPrefabInstance gpi = obj.AddComponent <GPrefabInstance>();
                            gpi.prefab = prefab;
                            obj.transform.SetParent(widget.transform.parent, false);
                            obj.transform.SetSiblingIndex(widget.transform.GetSiblingIndex());

                            gpi.Instantiate();

                            GameObject.DestroyImmediate(widget.gameObject);
                        }
                    }
                }
            }
        }
        propertyList       = InitExportPropertyList();
        eventList          = InitExportEventList();
        exportToScriptList = InitExportToScriptList();
    }
예제 #5
0
 static string GetName(GPrefabInstance loader, GExportToScriptInfo property)
 {
     return(GetName(property.type) + "_" + GetName(loader.name));
 }
예제 #6
0
    void ReplaceNode(Transform node, bool debug)
    {
        for (int i = 0; i < node.transform.childCount; i++)
        {
            ReplaceNode(node.transform.GetChild(0), debug); //每次都处理第一个,因为处理过的会放到最后
        }
        GPrefabInstance loader = node.GetComponent <GPrefabInstance>();

        if (loader && loader.prefab)
        {
            //实例化
            GWidget widget = Instantiate <GWidget>(loader.prefab);
            targetRedirect[loader.gameObject.GetInstanceID()] = widget.gameObject;
            widgets.Add(widget);
            loaders.Add(loader);

            widget.name = loader.name;
            widget.transform.SetParent(node.parent, false);

            //设置大小和位置
            (widget.transform as RectTransform).anchorMin        = (loader.transform as RectTransform).anchorMin;
            (widget.transform as RectTransform).anchorMax        = (loader.transform as RectTransform).anchorMax;
            (widget.transform as RectTransform).anchoredPosition = (loader.transform as RectTransform).anchoredPosition;
            (widget.transform as RectTransform).sizeDelta        = (loader.transform as RectTransform).sizeDelta;

            //更新属性
            loader.UpdatePreviewValues(widget);
            loader.BindTestEvent(widget);

            if (widget.containerPanel != null)
            {
                if (widget.isDynamicContainer && widget.containerPanel.transform.childCount == 1) //如果是动态添加的容器(如邮件列表),并且有一个模板元素
                {
                    GDynamicContainer dynamicContainer = widget.containerPanel.GetComponent <GDynamicContainer>();
                    if (dynamicContainer)
                    {
                        loader.transform.GetChild(0).gameObject.SetActive(false);//第0个元素为模板,隐藏起来
                        if (debug)
                        {
                            dynamicContainer.AddTestElements();//debug模式下显示一些内容元素
                        }
                    }
                }
                else
                {
                    while (loader.transform.childCount > 0)
                    {
                        Transform child = loader.transform.GetChild(0);
                        child.SetParent(widget.containerPanel, false);//普通静态容器,将子节点放到容器节点下
                    }
                }
            }
            else
            {
                while (loader.transform.childCount > 0)
                {
                    loader.transform.GetChild(0).SetParent(widget.transform, false);//非容器,将子节点放到widget节点下
                }
            }

            widget.gameObject.SetActive(loader.gameObject.activeSelf);
            Destroy(widget);
            //将loader从源节点移除
            loader.transform.SetParent(null);
        }
        else
        {
            node.SetAsLastSibling();
        }
    }