public void ClearAllViewElementInScene() { if (previewUIRootWrapper != null && previewUIRootWrapper.rectTransform) { UnityEngine.Object.DestroyImmediate(previewUIRootWrapper.rectTransform.gameObject); previewUIRootWrapper = null; } // var allViewElement = ViewControllerTransform.GetComponentsInChildren<ViewElement>(); // //NestedViewElement is obslote do nothing with NestedViewElement. // //var allNestedViewElement = UnityEngine.Object.FindObjectsOfType<NestedViewElement>(); // foreach (var item in allViewElement) // { // try // { // UnityEngine.Object.DestroyImmediate(item.gameObject); // } // catch // { // //ViewSystemLog.LogWarning($"ignore"); // } // } }
public void OnViewPagePreview(ViewPage viewPage, Dictionary <string, bool> breakPoints) { string UIRootName = ""; if (data.globalSetting.UIRootScene == null) { ViewSystemLog.ShowNotification(editor, new GUIContent($"There is no canvas in your scene, do you enter EditMode?"), 2); ViewSystemLog.LogError($"There is no canvas in your scene, do you enter EditMode?"); return; } UIRootName = data.globalSetting.UIRoot.name; //throw new System.NotImplementedException(); ClearAllViewElementInScene(); // 打開所有相關 ViewElements ViewState viewPagePresetTemp; List <ViewPageItem> viewItemForNextPage = new List <ViewPageItem>(); //從 ViewPagePreset 尋找 (ViewState) if (!string.IsNullOrEmpty(viewPage.viewState)) { viewPagePresetTemp = data.viewStates.Select(m => m.viewState).SingleOrDefault(m => m.name == viewPage.viewState); if (viewPagePresetTemp != null) { viewItemForNextPage.AddRange(viewPagePresetTemp.viewPageItems); } } //從 ViewPage 尋找 viewItemForNextPage.AddRange(viewPage.viewPageItems); Transform root = ViewControllerTransform; var canvas = root.Find($"{UIRootName}"); string viewPageName = ViewSystemUtilitys.GetPageRootName(viewPage); previewUIRootWrapper = ViewSystemUtilitys.CreatePageTransform(viewPageName, canvas, viewPage.canvasSortOrder); ApplySafeArea(viewPage.edgeValues); Transform fullPageRoot = root.Find($"{UIRootName}/{viewPageName}"); //TO do apply viewPage component on fullPageRoot //打開相對應物件 foreach (ViewPageItem item in viewItemForNextPage.OrderBy(m => m.sortingOrder)) { if (item.viewElement == null) { ViewSystemLog.LogWarning($"There are some ViewElement didn't setup correctly in this page or state"); continue; } var temp = PrefabUtility.InstantiatePrefab(item.viewElement.gameObject); ViewElement tempViewElement = ((GameObject)temp).GetComponent <ViewElement>(); tempViewElement.currentViewPageItem = item; tempViewElement.currentViewPage = viewPage; tempViewElement.gameObject.SetActive(true); var rectTransform = tempViewElement.GetComponent <RectTransform>(); Transform tempParent = null; // TODO preview viewpage with BreakPoint var transformData = item.GetCurrentViewElementTransform(breakPoints); if (!string.IsNullOrEmpty(transformData.parentPath)) { //Custom Parent implement tempParent = root.Find(transformData.parentPath); } else { //RectTransform implement tempParent = fullPageRoot; } rectTransform.SetParent(tempParent, true); if (!string.IsNullOrEmpty(transformData.parentPath)) { var mFix = tempViewElement.GetComponent <ViewMarginFixer>(); if (mFix != null) { mFix.ApplyModifyValue(); } tempViewElement.rectTransform.localScale = Vector3.one; tempViewElement.rectTransform.anchoredPosition3D = Vector3.zero; } else { tempViewElement.ApplyRectTransform(transformData); } tempViewElement.ApplyOverrides(item.overrideDatas); tempViewElement.ApplyNavigation(item.navigationDatas); item.previewViewElement = tempViewElement; //Sample animator traisintion viewlement to target frame if (tempViewElement.transition != ViewElement.TransitionType.Animator) { continue; } Animator animator = tempViewElement.animator; AnimationClip[] clips = animator.runtimeAnimatorController.animationClips; foreach (AnimationClip clip in clips) { if (clip.name.ToLower().Contains(tempViewElement.AnimationStateName_Loop.ToLower())) { clip.SampleAnimation(animator.gameObject, 0); } } } UnityEditorInternal.InternalEditorUtility.RepaintAllViews(); }