IEnumerator _Goto() { _isSwitching = true; if (GetNeedLoadingMask()) { LoadingMask.StartLoading(); yield return(new WaitForSeconds(LoadingMask.Instance.TimeToUnload)); } BaseUI newUI = null; switch (_targetUIState) { case UIStateName.Entrance: newUI = EntranceUI.EnterStage(); break; case UIStateName.Menu: newUI = MenuUI.EnterStage(); break; case UIStateName.Match: newUI = MatchUI.EnterStage(); break; case UIStateName.Game: newUI = GameUI.EnterStage(); break; case UIStateName.PushLevel: newUI = PushLevelUI.EnterStage(); break; case UIStateName.EndRound: newUI = EndRoundUI.EnterStage(); break; default: Debug.LogError("ERROR uiState:" + _targetUIState); break; } switch (_targetUIState) { case UIStateName.Entrance: var sr = Background.GetComponent <SpriteRenderer>(); sr.sprite = SprSplash; break; case UIStateName.PushLevel: //Background.gameObject.SetActive(false); break; default: //Background.gameObject.SetActive(true); sr = Background.GetComponent <SpriteRenderer>(); sr.sprite = SprBg; break; } if (!newUI) { Debug.LogError("GotoUI却没有成功创建UI:" + _targetUIState); } for (int i = 0; i < _baseUIs.Length; i++) { if (i == (int)_targetUIState) { _baseUIs[i] = newUI; } else { if (_baseUIs[i]) { _baseUIs[i].OffStage(); _baseUIs[i] = null; Resources.UnloadUnusedAssets(); } } } LoadingMask.EndLoading(); _isSwitching = false; }
/// <summary> /// 第一次调用时创建新的岛屿内容,之后调用不会再改动。 /// </summary> /// <param name="pushLevelUI"></param> /// <param name="majorLevelId"></param> /// <param name="majorLevel"></param> /// <param name="majorLevelData"></param> public void SetAndRefresh(PushLevelUI pushLevelUI, int majorLevelId, MajorLevelUnlockInfo majorLevel, MajorLevelData majorLevelData) { PushLevelUI = pushLevelUI; MajorLevelId = majorLevelId; _majorLevelUnlockInfo = majorLevel; _majorLevelData = majorLevelData; if (!_artContent) { var prefab = MorlnDownloadResources.Load <GameObject>("ResourcesForDownload/Island/Island" + (majorLevelId - 1)); _artContent = PrefabHelper.InstantiateAndReset(prefab, transform); //_artContent.transform.localScale = new Vector3(0.5f, 0.5f, 1); IslandInfo = _artContent.GetComponent <IslandInfo>(); if (IslandInfo) { IslandInfo.Island = this; IslandInfo.transform.SetSortingLayer("Planet"); } } if (!IslandInfo) { Debug.LogError("没有岛屿内容则不能玩游戏,请检查"); return; } if (_majorLevelData == null) { Debug.LogError("没有_majorLevelData。不用显示了,玩不了!"); return; } if (_majorLevelData.SubLevelList == null) { Debug.LogError("没有_majorLevelData.SubLevelList。不用显示了,玩不了!"); return; } while (SubLevelPointList.Count < _majorLevelData.SubLevelList.Count)//确保 小关点 数量足够 { var subLevelPoint = PrefabHelper.InstantiateAndReset <SubLevelPoint>(SubLevelPointTemplate, SubLevelPointContainer); subLevelPoint.name = "SubLevel " + SubLevelPointList.Count; SubLevelPointList.Add(subLevelPoint); } var subLevelPointPosList = Route.GetPointsUniformly(_majorLevelData.SubLevelList.Count); for (int subId = 1; subId <= SubLevelPointList.Count; subId++) { var pointI = subId - 1; var dataI = _majorLevelData != null ? _majorLevelData.SubLevelList.FindIndex(x => x.SubLevelId == subId) : -1; var unlockI = _majorLevelUnlockInfo != null ? _majorLevelUnlockInfo.SubLevelUnlockInfoList.FindIndex(x => x.SubLevelId == subId) : -1; if (dataI >= 0) //后者必然true,只为彻底保险 { var go = SubLevelPointList[pointI].gameObject; go.SetActive(true); go.transform.localPosition = subLevelPointPosList[pointI]; SubLevelPointList[pointI].SetAndRefresh(_majorLevelData.MajorLevelId, unlockI >= 0 ? _majorLevelUnlockInfo.SubLevelUnlockInfoList[unlockI] : null, dataI >= 0 ? _majorLevelData.SubLevelList[dataI] : null);//指数大于0则一定不为null,放心,别管波浪线 } else { SubLevelPointList[pointI].gameObject.SetActive(false); } } SubLevelPointTemplate.SetActive(false); var locked = _majorLevelUnlockInfo == null || !_majorLevelUnlockInfo.Unlocked; IslandInfo.CloudsContainer.SetActive(locked); }