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); }
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(); }
static string GetName(GPrefabInstance loader, GExportToScriptInfo property) { return(GetName(property.type) + "_" + GetName(loader.name)); }
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(); } }