public GroupElement(Dictionary <string, object> json, Element parent, bool resetStretch = false) : base(json, parent) { Elements = new List <Element>(); var jsonElements = json.Get <List <object> >("elements"); if (jsonElements != null) { foreach (var jsonElement in jsonElements) { var elem = ElementFactory.Generate(jsonElement as Dictionary <string, object>, this); if (elem != null) { Elements.Add(elem); } } } Elements.Reverse(); CanvasGroup = json.GetDic("canvas_group"); LayoutGroupJson = json.GetDic("layout_group"); ContentSizeFitterJson = json.GetDic("content_size_fitter"); MaskJson = json.GetDic("mask"); RectMask2D = json.GetBool("rect_mask_2d"); ScrollRectJson = json.GetDic("scroll_rect"); FillColorJson = json.Get("fill_color"); ComponentsJson = json.Get <List <object> >("components"); }
public void Create(ref GameObject targetObject, RenderContext renderContext, Dictionary <string, object> rootJson) { if (EditorApplication.isPlaying) { EditorApplication.isPlaying = false; } var rootElement = ElementFactory.Generate(rootJson, null); rootElement.Render(ref targetObject, renderContext, null); if (renderContext.ToggleGroupMap.Count > 0) { // ToggleGroupが作成された場合 var go = new GameObject("ToggleGroup"); go.transform.SetParent(targetObject.transform); foreach (var keyValuePair in renderContext.ToggleGroupMap) { var gameObject = keyValuePair.Value; gameObject.transform.SetParent(go.transform); } } // 使われなかったオブジェクトの退避グループ var notUsedGroupObject = ElementUtil.GetOrCreateGameObject(renderContext, null, $"[{Importer.NAME}] Unused", null); var notUsedchilds = renderContext.FreeChildObjects; if (notUsedchilds.Count > 0) { var notUsedGroupRect = ElementUtil.GetOrAddComponent <RectTransform>(notUsedGroupObject); foreach (var keyValuePair in notUsedchilds) { var go = keyValuePair.Key; if (go != null) { if (PrefabUtility.GetNearestPrefabInstanceRoot(go) == null) { // NestedPrefabの子供でなければNotUsedグループに移動できる var goRect = go.GetComponent <RectTransform>(); if (goRect != null) { goRect.SetParent(notUsedGroupRect); } } else { // NestedPrefabの子供を転送しようとするとエラーになるため、 // 非アクティブにする //TODO: unusedといった名前をつけるか検討 go.SetActive(false); } } else { // Debug.Log("既に廃棄されています"); } } // not used グループに子供があった場合のみ移動 if (notUsedGroupRect.childCount > 0) { notUsedGroupRect.SetParent(targetObject.transform); notUsedGroupObject.SetActive(false); } } else { Object.DestroyImmediate(notUsedGroupObject); } foreach (var prefab in renderContext.NewPrefabs.ToList()) { //if we haven't created a prefab out of the referenced GO we do so now if (PrefabUtility.GetPrefabAssetType(prefab) == PrefabAssetType.NotAPrefab) { //TODO: Ugly path generation var nestedPrefabDirectory = Path.Combine(Application.dataPath.Replace("Assets", ""), Path.Combine(Path.Combine(EditorUtil.GetOutputPrefabsFolderAssetPath()), "Components")); if (!Directory.Exists(nestedPrefabDirectory)) { Directory.CreateDirectory(nestedPrefabDirectory); } nestedPrefabs.Add(PrefabUtility.SaveAsPrefabAssetAndConnect(prefab, Path.Combine(nestedPrefabDirectory, prefab.name + ".prefab"), InteractionMode.AutomatedAction)); } } }