// public void OpenWithDefault(List<GameObject> uiList, UIAction action = UIAction.RightSlip) // { // var layerInfo = new UILayerInfo {haveAlpha = true}; // foreach (var ui in uiList) // { // layerInfo.elements.Add(ui, action); // } // // OpenUILayer(layerInfo); // } public void OpenUILayer(UILayerInfo info, bool show = true) { foreach (var item in info.elements) { var obj = item.Key; obj.SetActive(show); var key = obj.GetInstanceID(); if (UiDefaultPosDict.ContainsKey(key)) { continue; } var cur = new UIInfo(); var renderer = obj.GetComponentInChildren <Renderer>(); if (renderer != null) { cur.renderQueue = renderer.material.renderQueue; } cur.defaultPos = obj.transform.localPosition; UiDefaultPosDict.Add(key, cur); } if (!info.haveAlpha) { SetTopUI(false); } else if (info.pedalTf) { SetCover(true, info.pedalTf); } if (show) { Performance(info, true); } UILayerList.Add(info); AlterLayer?.Invoke(UILayerList.Count); }
private static void Performance(UILayerInfo info, bool isPositive) { foreach (var element in info.elements) { var obj = element.Key; obj.SetActive(true); var tf = obj.transform; var rectTransform = tf.GetComponent <RectTransform>(); if (rectTransform == null) { continue; } var relativePos = Vector3.zero; var defaultPos = Vector3.zero; if (UiDefaultPosDict.ContainsKey(obj.GetInstanceID())) { defaultPos = UiDefaultPosDict[obj.GetInstanceID()].defaultPos; } else { Debug.LogError($"!!!!! Performance: PosDict not contained: {obj.name} !!!!!"); return; } var srcPos = defaultPos; var destPos = defaultPos; switch (element.Value) { case UIAction.None: obj.SetActive(isPositive); continue; case UIAction.LeftSlip: relativePos = new Vector3(srcPos.x - rectTransform.rect.width, srcPos.y, srcPos.z); break; case UIAction.RightSlip: relativePos = new Vector3(srcPos.x + rectTransform.rect.width, srcPos.y, srcPos.z); break; case UIAction.TopSlip: relativePos = new Vector3(srcPos.x, srcPos.y + rectTransform.rect.height, srcPos.z); break; case UIAction.BottomSlip: relativePos = new Vector3(srcPos.x, srcPos.y - rectTransform.rect.height, srcPos.z); break; case UIAction.Pop: if (isPositive) { obj.transform.DOPunchScale(new Vector3(0.1f, 0.1f, 0), 0.3f, 1); } else { obj.SetActive(false); } continue; default: throw new ArgumentOutOfRangeException(); } var duration = ActionDuration; if (isPositive) { tf.localPosition = relativePos; } else { duration = ActionDuration - 0.2f; destPos = relativePos; } obj.transform.DOLocalMove(destPos, duration).SetEase(Ease.OutBack).OnComplete(() => { obj.SetActive(isPositive); }); // obj.transform.DOLocalJump(destPos, 0.3f, 1, duration).SetEase(Ease.OutBack).OnComplete(() => { obj.SetActive(isPositive); }); } }