From c0b61bfa55861463b05a332010aedb02695d2526 Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Fri, 11 Dec 2020 15:31:07 +0800 Subject: [PATCH] 修改未上阵动作 移除掉落特殊金币的判断 --- Assets/Scripts/Guide/GuidePanel.cs | 619 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 559 insertions(+), 60 deletions(-) diff --git a/Assets/Scripts/Guide/GuidePanel.cs b/Assets/Scripts/Guide/GuidePanel.cs index e63cda4..684560e 100644 --- a/Assets/Scripts/Guide/GuidePanel.cs +++ b/Assets/Scripts/Guide/GuidePanel.cs @@ -3,7 +3,8 @@ using UnityEngine; using UnityEngine.UI; using System; - +using KTGMGemClient; +using DG.Tweening; /// <summary> /// 新手引导UI脚本 /// </summary> @@ -20,17 +21,72 @@ private RectGuidance maskObj; private RectTransform image_Rim_Rect;//边框 + private GameObject particle_1, particle_2;//使用粒子特效 private RectTransform image_Tip_Rect;//可以移动的提示框 private Text text_Tip;//可以移动的提示框文字 - private Image image_SkillRim;//技能释放区域 Vector2 rimOffset = new Vector2(30, 30);//边框要比按钮大一些 + Image tmpMask;//自身的遮罩 + GameObject offectBackground;//适配需要的黑色背景 + ImageFire1 fire1; + ParticleSystem fire1PS1, fire1PS2;//出现的特效 + + ImageFire2 fire2;//两个用来合成的火元素 + ParticleSystem fire2PS1, fire2PS2; + + ImageWater wood1; + + ParticleSystem woodPS1, woodPS2; + + + ImageTowerPos towerPos;//塔位标识 + ImageTowerPos towerPos2;//塔位标识 + + GameObject towerBuyBtn;//购买宝石按钮 + Vector2 towerBuyBtnPos; + Image backgroundImg;//用来接受空白点击事件的图片 + + RectTransform dragHandImg;//拖动标识手指 + + Button skillBtn;// + Vector2 skillBtnPos = new Vector2(459, 44.6f); + + private Image warningImg;//大波敌人来袭提示 + /// <summary> + /// 关闭所有UI + /// </summary> + public void CleanMask() + { + CloseMask(); + SetRimActive(false); + + } + + private GuideBox boxPanel;//宝箱面板 // Start is called before the first frame update void Awake() { + tmpMask = GetComponent<Image>(); + tmpMask.enabled = false; + offectBackground = transform.Find("OffectImage").gameObject; + offectBackground.SetActive(false); + + backgroundImg = transform.Find("Button").GetComponent<Image>(); + + skillBtn = GameObject.Find("UICamera/BottomCanvas/Panel/Energy/FireSkillBg/SkillBtn").GetComponent<Button>(); + skillBtn.interactable = false; + towerBuyBtn = GameObject.Find("UICamera/BottomCanvas/Panel/TowerBuyBtn"); + RectTransform tmpTs = towerBuyBtn.GetComponent<RectTransform>(); + + RectTransform canvasUI = transform.parent.parent.GetComponent<RectTransform>(); + float tmpOffect = tmpTs.anchoredPosition.y - (canvasUI.sizeDelta.y * 0.5f); + towerBuyBtnPos = new Vector2(tmpTs.anchoredPosition.x, tmpOffect); + tipsUI = transform.Find("Tips").gameObject; + tipsUI.transform.SetAsLastSibling();//把tips放在最下面 + charForeach = tipsUI.GetComponent<CharForeach>(); m_Ctrl = transform.GetComponent<GuideCtrl>(); transform.Find("Button").GetComponent<Button>().onClick.AddListener(m_Ctrl.OnFinishOneStep); @@ -47,23 +103,398 @@ } image_Rim_Rect = transform.Find("Image_Rim").GetComponent<RectTransform>(); + particle_1 = image_Rim_Rect.transform.Find("Particle System Small").gameObject; + particle_2 = image_Rim_Rect.transform.Find("Particle System Big").gameObject; + + float a = 0.06666667f; + float b = canvasUI.localScale.x; + float tmpScale = a / b; + //Debug.Log($"记录的比值:{a} 当前Canvas的Scale:{b} 计算得到的比值:{tmpScale}"); + image_Tip_Rect = transform.Find("Image_Tip").GetComponent<RectTransform>(); text_Tip = image_Tip_Rect.transform.Find("Text").GetComponent<Text>(); - image_SkillRim = transform.Find("Image_SkillRim").GetComponent<Image>(); - image_Rim_Rect.gameObject.SetActive(false); - image_Tip_Rect.gameObject.SetActive(false); - image_SkillRim.gameObject.SetActive(false); + + SetRimActive(false); + + + fire1 = transform.Find("Image_Fire1").GetComponent<ImageFire1>(); + fire1.GetComponent<RectTransform>().anchoredPosition *= tmpScale; + fire1PS1 = fire1.transform.Find("Huo/Particle System").GetComponent<ParticleSystem>(); + fire1PS2 = fire1.transform.Find("Huo_02/Particle System").GetComponent<ParticleSystem>(); + + fire2 = transform.Find("Image_Fire2").GetComponent<ImageFire2>(); + fire2.GetComponent<RectTransform>().anchoredPosition *= tmpScale; + fire2PS1 = fire2.transform.Find("Huo/Particle System").GetComponent<ParticleSystem>(); + fire2PS2 = fire2.transform.Find("Huo_02/Particle System").GetComponent<ParticleSystem>(); + + fire1.gameObject.SetActive(false); + fire2.gameObject.SetActive(false); + + towerPos = transform.Find("Image_TowerPos").GetComponent<ImageTowerPos>(); + towerPos.GetComponent<RectTransform>().anchoredPosition *= tmpScale; + + towerPos.enabled = false; + + towerPos2 = transform.Find("Image_TowerPos2").GetComponent<ImageTowerPos>(); + towerPos2.GetComponent<RectTransform>().anchoredPosition *= tmpScale; + + towerPos2.enabled = false; + + wood1 = transform.Find("Image_Wood").GetComponent<ImageWater>(); + wood1.GetComponent<RectTransform>().anchoredPosition *= tmpScale; + woodPS1 = wood1.transform.Find("Mu/Particle System").GetComponent<ParticleSystem>(); + woodPS2 = wood1.transform.Find("Mu_02/Particle System").GetComponent<ParticleSystem>(); + + wood1.gameObject.SetActive(false); + + dragHandImg = transform.Find("ImageHand").GetComponent<RectTransform>(); + dragHandImg.gameObject.SetActive(false); + + warningImg = transform.Find("Image_Warning").GetComponent<Image>(); + warningImg.gameObject.SetActive(false); + + boxPanel = transform.Find("BoxPanel").GetComponent<GuideBox>(); + } + + + private Vector2 tmpOffect; + + /// <summary> + /// Start is called on the frame when a script is enabled just before + /// any of the Update methods is called the first time. + /// </summary> + void Start() + { + tmpOffect = GetComponent<RectTransform>().offsetMin; + tmpOffect = new Vector2(tmpOffect.x, tmpOffect.y * 0.5f); + + fire1.GetComponent<RectTransform>().anchoredPosition -= tmpOffect; + fire2.GetComponent<RectTransform>().anchoredPosition -= tmpOffect; + towerPos.GetComponent<RectTransform>().anchoredPosition -= tmpOffect; + towerPos2.GetComponent<RectTransform>().anchoredPosition -= tmpOffect; + wood1.GetComponent<RectTransform>().anchoredPosition -= tmpOffect; } + + + /// <summary> + /// 第二步,购买宝石 + /// </summary> + /// <param name="str"></param> + /// <param name="currentIndex">当前第几步</param> + public void Step1(string str, int currentIndex, Action ac) + { + if (currentIndex == 0) + { + backgroundImg.raycastTarget = false; + SetRimActive(true); + AddButtonListener(towerBuyBtn, ac); + Image btnImg = towerBuyBtn.GetComponent<Image>(); + InitRectGuidance(btnImg, 159, 73.5f, Vector2.one); + SetRimPos(towerBuyBtn); + //maskObj.ShowImmediately(); + + } + else if (currentIndex == 1) + { + RemoveButtonListener(towerBuyBtn); + AddButtonListener(towerBuyBtn, ac); + } + text_Tip.text = str;//动态改变长度 + StartCoroutine(ShowRimTip(str)); + } + + public void Step1_1() + { + if (!fire1.gameObject.activeSelf) + { + fire1.gameObject.SetActive(true); + fire1.transform.Find("Image_2").gameObject.SetActive(false); + fire1.enabled = false; + fire1PS1.Play(); + fire1PS2.Play(); + + //EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.PlayAppearEffect, fire1.transform.position); + } + } + public void Step1_2() + { + fire2.gameObject.SetActive(true); + fire2PS1.Play(); + fire2PS2.Play(); + fire2.enabled = false; + DestoryButtonListener(towerBuyBtn); + SetRimActive(false); + CloseMask(); + //EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.PlayAppearEffect, fire2.transform.position); + + //RemoveButtonListener(towerBuyBtn); + } + + /// <summary> + /// 第三步,关闭其余遮罩,打开大Tips + /// </summary> + /// <param name="currentIndex"></param> + public void Step2(int currentIndex) + { + backgroundImg.raycastTarget = true; + //RemoveButtonListener(towerBuyBtn); + } + + /// <summary> + /// 第四步,合成宝石 + /// </summary> + public void Step3(int currentIndex, string str) + { + if (currentIndex == 0) + { + + tmpMask.enabled = true; + offectBackground.SetActive(true); + + SetGuideUI(false); + + SetRimPos(fire2.gameObject); + fire1.enabled = true; + fire2.enabled = true; + image_Tip_Rect.gameObject.SetActive(false); + //ShowDragPath(fire2.GetStartP, fire1.GetRect); + StartCoroutine(ShowRimTip(str)); + } + } + + //移动方框,提示玩家进行合成 + public void Step3_2(string str) + { + SetRimPos(fire1.gameObject); + //StartCoroutine(ShowRimTip(str)); + } + + /// <summary> + /// 第五步,拖动造塔 + /// </summary> + public void Step4(int currentIndex, string str) + { + if (currentIndex == 0) + { + tmpMask.enabled = false; + offectBackground.SetActive(false); + + SetRimActive(true); + Image btnImg = transform.Find("Image_TowerPos").GetComponent<Image>(); + towerPos.enabled = true; + InitRectGuidance(btnImg, 75, 80, tmpOffect); + SetRimPos(btnImg.gameObject); + //maskObj.ShowImmediately(); + ShowDragPath(fire1.GetStartP, btnImg.rectTransform); + StartCoroutine(ShowRimTip(str)); + + } + } + + /// <summary> + /// 第六步 + /// </summary> + public void Step5(int currentIndex, string str) + { + if (currentIndex == -1) + { + CloseMask(); + SetRimActive(false); + + } + } + + /// <summary> + /// 第七步,解锁新塔位 + /// </summary> + public void Step7(int currentIndex, string str) + { + if (currentIndex == 0) + { + SetRimActive(true); + //设置位置 + GameObject go = transform.Find("Image_TowerPos2").gameObject; + + Image btnImg = go.GetComponent<Image>(); + btnImg.raycastTarget = false; + InitRectGuidance(btnImg, 75, 80, tmpOffect); + SetRimPos(go); + //maskObj.ShowImmediately(); + StartCoroutine(ShowRimTip(str)); + } + } + + //介绍水元素 + public void Step8() + { + SetGuideUI(true); + SetRimActive(false); + CloseMask(); + } + + + /// <summary> + /// 第九步,购买水元素,第二步上阵 + /// </summary> + /// <param name="str"></param> + /// <param name="currentIndex">当前第几步</param> + public void Step9(string str, int currentIndex, Action ac) + { + if (currentIndex == 0) + { + SetRimActive(true); + image_Tip_Rect.gameObject.SetActive(false); + //设置位置 + AddButtonListener(towerBuyBtn, ac); + Image btnImg = towerBuyBtn.GetComponent<Image>(); + InitRectGuidance(btnImg, 159, 73.5f, Vector2.one); + SetRimPos(towerBuyBtn); + } + else if (currentIndex == 1) + { + GameObject go = transform.Find("Image_TowerPos2").gameObject; + Image btnImg = go.GetComponent<Image>(); + btnImg.raycastTarget = true; + InitRectGuidance(btnImg, 75, 80, tmpOffect); + SetRimPos(go); + ShowDragPath(wood1.GetStartP, btnImg.rectTransform); + } + } + + public void Step9_1() + { + wood1.gameObject.SetActive(true); + woodPS1.Play(); + woodPS2.Play(); + towerPos2.enabled = true; + DestoryButtonListener(towerBuyBtn); + towerBuyBtn.gameObject.SetActive(false); + } + + + /// <summary> + /// 第12步,交换水火塔 + /// </summary> + public void Step11Drag(int currentIndex) + { + if (currentIndex == 0) + { + GameConfig.CanDragTower = true; + //标记水塔 引导拖动 + towerPos.GetComponent<Image>().raycastTarget = false; + towerPos2.GetComponent<Image>().raycastTarget = false; + backgroundImg.raycastTarget = false; + SetRimActive(true); + SetGuideUI(false); + Image btnImg = towerPos2.GetComponent<Image>(); + btnImg.raycastTarget = false; + + InitRectGuidance(btnImg, 75, 80, tmpOffect); + //SetRimPos(towerPos2.gameObject); + SetRimPos(towerPos2.gameObject, new Vector2(0, 30)); + StartCoroutine(ShowRimTip("交换")); + ShowDragPath(towerPos2.GetComponent<RectTransform>().anchoredPosition, towerPos.GetComponent<RectTransform>()); + + } + else if (currentIndex == 1) + { + Image btnImg = towerPos.GetComponent<Image>(); + btnImg.raycastTarget = false; + + InitRectGuidance(btnImg, 75, 80, tmpOffect); + //SetRimPos(towerPos.gameObject); + SetRimPos(towerPos.gameObject, new Vector2(0, 10)); + + StartCoroutine(ShowRimTip("交换")); + + } + else if (currentIndex == 2) + { + SetRimActive(false); + StopShowDragPath(true); + CloseMask(); + } + } + + /// <summary> + /// 一大波敌人 + /// </summary> + public void Step11_End() + { + warningImg.color = new Color(1.0f, 1.0f, 1.0f, 0); + warningImg.gameObject.SetActive(true); + colorCount = 0; + SetWarningColor(); + } + + int colorCount = 0; + private void SetWarningColor() + { + if (colorCount < 4) + { + colorCount++; + warningImg.DOFade(colorCount % 2, 1.0f).OnComplete(SetWarningColor); + CommonDebugHelper.Debug($"执行了{colorCount}次"); + } + else + { + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.CreateThirdWave); + warningImg.gameObject.SetActive(false); + } + } + + public void Step12() + { + SetGuideUI(true); + backgroundImg.raycastTarget = true; + } + + public void Step13(string str, Action ac) + { + skillBtn.interactable = true; + + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.GuideEnergyUp, 100); + + SetGuideUI(false); + + backgroundImg.raycastTarget = false; + SetRimActive(true); + AddButtonListener(skillBtn.gameObject, ac); + Image btnImg = skillBtn.GetComponent<Image>(); + InitRectGuidance(btnImg, 79, 79f, Vector2.one); + //SetRimPos(skillBtn.gameObject); + SetRimPos(skillBtn.gameObject, new Vector2(-15, -241)); + + text_Tip.text = str;//动态改变长度 + StartCoroutine(ShowRimTip(str)); + } + + public void Step14() + { + SetGuideUI(true); + backgroundImg.raycastTarget = true; + RemoveButtonListener(skillBtn.gameObject); + } + + public void FinishGuide() + { + towerBuyBtn.gameObject.SetActive(true); + } + + #region 设置对话框 /// <summary> /// 设置引导框 /// </summary> /// <param name="active"></param> public void SetGuideUI(bool active) { - tipsUI.SetActive(active); + if (backgroundImg.enabled != active) + backgroundImg.enabled = active; + if (tipsUI.activeSelf != active) + tipsUI.SetActive(active); } //开始打印文字 @@ -79,63 +510,96 @@ { charForeach.ShowWordImmediately(); } - - /// <summary> - /// 第二步,购买宝石 - /// </summary> - /// <param name="str"></param> - /// <param name="currentIndex">当前第几步</param> - public void Step1(string str, int currentIndex, Action ac) - { - if (currentIndex == 0) - { - image_Rim_Rect.gameObject.SetActive(true); - image_Tip_Rect.gameObject.SetActive(true); - //设置位置 - GameObject go = GameObject.Find("MainUI/TowerBuyBtn"); - AddButtonListener(go, ac); - - Image btnImg = go.GetComponent<Image>(); - InitRectGuidance(btnImg); - SetRimPos(btnImg); - maskObj.ShowImmediately(); - - } - else if (currentIndex == 1) - { - - } - text_Tip.text = str;//动态改变长度 - StartCoroutine(ShowRimTip(str)); - - } - - - public void Step2(int currentIndex) - { - image_Rim_Rect.gameObject.SetActive(false); - image_Tip_Rect.gameObject.SetActive(false); - - CloseMask(); - } + #endregion #region 按钮以及提示 + + + public void SetRimActive(bool isOn) + { + if (image_Rim_Rect.gameObject.activeSelf != isOn) + { + image_Rim_Rect.gameObject.SetActive(isOn); + image_Tip_Rect.gameObject.SetActive(isOn); + } + } + /// <summary> + /// 设置边框的大小和位置 + /// </summary> + /// <param name="target"></param> + private void SetRimPos(GameObject target, bool changeTipPos = true) + { + SetRimActive(true); + RectTransform rt = target.GetComponent<RectTransform>(); + if (target.gameObject.name == "TowerBuyBtn") + { + image_Rim_Rect.anchoredPosition = towerBuyBtnPos - tmpOffect; + } + else if (target.gameObject.name == "SkillBtn") + { + image_Rim_Rect.anchoredPosition = skillBtnPos - tmpOffect; + } + else + { + image_Rim_Rect.anchoredPosition = rt.anchoredPosition; + } + image_Rim_Rect.sizeDelta = (rt.sizeDelta * rt.localScale) + rimOffset; + if (image_Rim_Rect.sizeDelta.x > 200) + { + particle_1.SetActive(false); + particle_2.SetActive(true); + } + else + { + particle_1.SetActive(true); + particle_2.SetActive(false); + } + + if (changeTipPos) + { + image_Tip_Rect.anchoredPosition = new Vector2(image_Rim_Rect.anchoredPosition.x, image_Rim_Rect.anchoredPosition.y + 74 / 2 + image_Rim_Rect.sizeDelta.y / 2); + } + + } /// <summary> /// 设置边框的大小和位置 /// </summary> /// <param name="target"></param> - private void SetRimPos(Image target) + private void SetRimPos(GameObject target, Vector2 offect) { + SetRimActive(true); RectTransform rt = target.GetComponent<RectTransform>(); - image_Rim_Rect.anchoredPosition = rt.anchoredPosition; + if (target.gameObject.name == "TowerBuyBtn") + { + image_Rim_Rect.anchoredPosition = towerBuyBtnPos - tmpOffect; + } + else if (target.gameObject.name == "SkillBtn") + { + image_Rim_Rect.anchoredPosition = skillBtnPos - tmpOffect; + } + else + { + image_Rim_Rect.anchoredPosition = rt.anchoredPosition; + } image_Rim_Rect.sizeDelta = (rt.sizeDelta * rt.localScale) + rimOffset; + if (image_Rim_Rect.sizeDelta.x > 200) + { + particle_1.SetActive(false); + particle_2.SetActive(true); + } + else + { + particle_1.SetActive(true); + particle_2.SetActive(false); + } image_Tip_Rect.anchoredPosition = new Vector2(image_Rim_Rect.anchoredPosition.x, image_Rim_Rect.anchoredPosition.y + 74 / 2 + image_Rim_Rect.sizeDelta.y / 2); - + image_Tip_Rect.anchoredPosition += offect; } IEnumerator ShowRimTip(string str) { + text_Tip.text = str;//动态改变长度 yield return 10; SetTipRect(str);//动态修改text长度需要等待计算完成 } @@ -152,18 +616,29 @@ #endregion #region 遮罩,以及按钮添加删除事件 - /// <summary> /// 抠出来一个区域 /// </summary> /// <param name="target"></param> - void InitRectGuidance(Image target) + void InitRectGuidance(Image target, float x, float y, Vector2 offect) { if (!maskObj.gameObject.activeSelf) { maskObj.gameObject.SetActive(true); } - maskObj.Init(target); + + if (target.gameObject.name == "TowerBuyBtn") + { + maskObj.InitForCamera(target, towerBuyBtnPos, x, y); + } + else if (target.gameObject.name == "SkillBtn") + { + maskObj.InitForCamera(target, skillBtnPos, x, y); + } + else + { + maskObj.InitForCamera(target, x, y, offect); + } } /// <summary> @@ -183,6 +658,7 @@ { ac(); }; + } /// <summary> @@ -191,23 +667,46 @@ /// <param name="go"></param> private void RemoveButtonListener(GameObject go) { - EventTriggerListener.GetListener(go).onClick -= null; + EventTriggerListener eventTriggerListener = EventTriggerListener.GetListener(go); + eventTriggerListener.RemoveListener(go); + } + + private void DestoryButtonListener(GameObject go) + { + EventTriggerListener eventTriggerListener = EventTriggerListener.GetListener(go); + + if (eventTriggerListener != null) + Destroy(eventTriggerListener); } #endregion - #region + #region 拖动效果 + private void ShowDragPath(Vector2 startP, RectTransform endP) + { + if (!dragHandImg.gameObject.activeSelf) + { + dragHandImg.gameObject.SetActive(true); + dragHandImg.anchoredPosition = startP; + dragHandImg.DOMove(endP.position, 1).SetEase(Ease.InCubic).SetLoops(-1); + } + } + + public void StopShowDragPath(bool isClose) + { + dragHandImg.DOKill(); + if (isClose) + dragHandImg.gameObject.SetActive(false); + } + #endregion - #region - #endregion - - #region - - #endregion + public void OpenDialogBox(){ + + } } -- Gitblit v1.9.1