From b2722bf84115092dcf61a0f612b737c20eb11f27 Mon Sep 17 00:00:00 2001
From: chenxin <chenxin6991@163.com>
Date: Wed, 25 Nov 2020 21:10:20 +0800
Subject: [PATCH] 木精灵蓄力攻击特效

---
 Assets/Scripts/Guide/GuidePanel.cs |  383 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 339 insertions(+), 44 deletions(-)

diff --git a/Assets/Scripts/Guide/GuidePanel.cs b/Assets/Scripts/Guide/GuidePanel.cs
index 7af2a97..cdb296b 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,6 +21,7 @@
     private RectGuidance maskObj;
 
     private RectTransform image_Rim_Rect;//边框
+    private GameObject particle_1, particle_2;//使用粒子特效
     private RectTransform image_Tip_Rect;//可以移动的提示框
     private Text text_Tip;//可以移动的提示框文字
 
@@ -27,11 +29,16 @@
     Vector2 rimOffset = new Vector2(30, 30);//边框要比按钮大一些
 
     Image tmpMask;//自身的遮罩
-
+    GameObject offectBackground;//适配需要的黑色背景
     ImageFire1 fire1;
-    ImageFire2 fire2;//两个用来合成的火元素
+    ParticleSystem fire1PS1, fire1PS2;//出现的特效
 
-    ImageWater water1;
+    ImageFire2 fire2;//两个用来合成的火元素
+    ParticleSystem fire2PS1, fire2PS2;
+
+    ImageWater wood1;
+
+    ParticleSystem woodPS1, woodPS2;
 
     ImageSkill skill;
 
@@ -39,9 +46,15 @@
     ImageTowerPos2 towerPos2;//塔位标识
 
     GameObject towerBuyBtn;//购买宝石按钮
-
+    Vector2 towerBuyBtnPos;
     Image backgroundImg;//用来接受空白点击事件的图片
 
+    RectTransform dragHandImg;//拖动标识手指
+
+    Button skillBtn;//
+    Vector2 skillBtnPos = new Vector2(459, 280);
+
+    private Image warningImg;//大波敌人来袭提示
     /// <summary>
     /// 关闭所有UI
     /// </summary>
@@ -58,9 +71,20 @@
     {
         tmpMask = GetComponent<Image>();
         tmpMask.enabled = false;
+        offectBackground = transform.Find("OffectImage").gameObject;
+        offectBackground.SetActive(false);
+
         backgroundImg = transform.Find("Button").GetComponent<Image>();
 
-        towerBuyBtn = GameObject.Find("MainUI/TowerBuyBtn");
+        skillBtn = GameObject.Find("UICamera/BottomCanvas/Panel/Energy/FireSkillBtn").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放在最下面
 
@@ -80,32 +104,85 @@
         }
 
         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_SkillRim.GetComponent<RectTransform>().anchoredPosition *= tmpScale;
 
         SetRimActive(false);
         image_SkillRim.gameObject.SetActive(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<ImageTowerPos2>();
+        towerPos2.GetComponent<RectTransform>().anchoredPosition *= tmpScale;
+
         towerPos2.enabled = false;
 
-        water1 = transform.Find("Image_Water").GetComponent<ImageWater>();
-        water1.gameObject.SetActive(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);
 
         skill = transform.Find("Image_Skill").GetComponent<ImageSkill>();
+        skill.GetComponent<RectTransform>().anchoredPosition *= tmpScale;
+
         skill.gameObject.SetActive(false);
+
+        dragHandImg = transform.Find("ImageHand").GetComponent<RectTransform>();
+        dragHandImg.gameObject.SetActive(false);
+
+        warningImg = transform.Find("Image_Warning").GetComponent<Image>();
+        warningImg.gameObject.SetActive(false);
     }
 
+
+    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);
+
+        image_SkillRim.GetComponent<RectTransform>().anchoredPosition -= tmpOffect;
+        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;
+        skill.GetComponent<RectTransform>().anchoredPosition -= tmpOffect;
+
+    }
     /// <summary>
     /// 设置引导框
     /// </summary>
@@ -139,16 +216,15 @@
     /// <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, 189, 73.5f);
+            InitRectGuidance(btnImg, 159, 73.5f, Vector2.one);
             SetRimPos(towerBuyBtn);
-            maskObj.ShowImmediately();
+            //maskObj.ShowImmediately();
 
         }
         else if (currentIndex == 1)
@@ -158,7 +234,6 @@
         }
         text_Tip.text = str;//动态改变长度
         StartCoroutine(ShowRimTip(str));
-
     }
 
     public void Step1_1()
@@ -168,13 +243,23 @@
             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);
     }
 
@@ -186,8 +271,6 @@
     {
         backgroundImg.raycastTarget = true;
         //RemoveButtonListener(towerBuyBtn);
-        SetRimActive(false);
-        CloseMask();
     }
 
     /// <summary>
@@ -197,13 +280,17 @@
     {
         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));
         }
     }
@@ -212,7 +299,7 @@
     public void Step3_2(string str)
     {
         SetRimPos(fire1.gameObject);
-        StartCoroutine(ShowRimTip(str));
+        //StartCoroutine(ShowRimTip(str));
     }
 
     /// <summary>
@@ -223,19 +310,22 @@
         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);
+            InitRectGuidance(btnImg, 75, 80, tmpOffect);
             SetRimPos(btnImg.gameObject);
-            maskObj.ShowImmediately();
+            //maskObj.ShowImmediately();
+            ShowDragPath(fire1.GetStartP, btnImg.rectTransform);
             StartCoroutine(ShowRimTip(str));
+
         }
     }
 
     /// <summary>
-    /// 第六步,拖动造塔
+    /// 第六步
     /// </summary>
     public void Step5(int currentIndex, string str)
     {
@@ -259,9 +349,10 @@
             GameObject go = transform.Find("Image_TowerPos2").gameObject;
 
             Image btnImg = go.GetComponent<Image>();
-            InitRectGuidance(btnImg, 75, 80);
+            btnImg.raycastTarget = false;
+            InitRectGuidance(btnImg, 75, 80, tmpOffect);
             SetRimPos(go);
-            maskObj.ShowImmediately();
+            //maskObj.ShowImmediately();
             StartCoroutine(ShowRimTip(str));
         }
     }
@@ -276,7 +367,7 @@
 
 
     /// <summary>
-    /// 第九步,
+    /// 第九步,购买水元素,第二步上阵
     /// </summary>
     /// <param name="str"></param>
     /// <param name="currentIndex">当前第几步</param>
@@ -285,29 +376,29 @@
         if (currentIndex == 0)
         {
             SetRimActive(true);
+            image_Tip_Rect.gameObject.SetActive(false);
             //设置位置
             AddButtonListener(towerBuyBtn, ac);
-
             Image btnImg = towerBuyBtn.GetComponent<Image>();
-            InitRectGuidance(btnImg, 189, 73.5f);
+            InitRectGuidance(btnImg, 159, 73.5f, Vector2.one);
             SetRimPos(towerBuyBtn);
-            maskObj.ShowImmediately();
         }
         else if (currentIndex == 1)
         {
             GameObject go = transform.Find("Image_TowerPos2").gameObject;
             Image btnImg = go.GetComponent<Image>();
-            InitRectGuidance(btnImg, 75, 80);
+            btnImg.raycastTarget = true;
+            InitRectGuidance(btnImg, 75, 80, tmpOffect);
             SetRimPos(go);
-            maskObj.ShowImmediately();
+            ShowDragPath(wood1.GetStartP, btnImg.rectTransform);
         }
-
-        StartCoroutine(ShowRimTip(str));
     }
 
     public void Step9_1()
     {
-        water1.gameObject.SetActive(true);
+        wood1.gameObject.SetActive(true);
+        woodPS1.Play();
+        woodPS2.Play();
         towerPos2.enabled = true;
         DestoryButtonListener(towerBuyBtn);
     }
@@ -324,35 +415,148 @@
     }
 
     /// <summary>
-    /// 第12步,引导释放技能
+    /// 第12步,弃用
     /// </summary>
     public void Step11(int currentIndex, string str)
     {
         if (currentIndex == 0)
         {
             tmpMask.enabled = true;
-
+            tmpMask.color = new Color(1.0f, 1.0f, 1.0f, 0);
             SetGuideUI(false);
             SetRimActive(true);
             SetRimPos(skill.gameObject);
-            StartCoroutine(ShowRimTip(str));
+            image_Tip_Rect.gameObject.SetActive(false);
+            //StartCoroutine(ShowRimTip(str));
+
+            ShowDragPath(skill.GetStartP, image_SkillRim.rectTransform);
+
+            InitRectGuidance(image_SkillRim, 79, 265, tmpOffect);
+
         }
         else if (currentIndex == 1)
         {
-            SetRimPos(image_SkillRim.gameObject);
-            StartCoroutine(ShowRimTip(str));
+            SetRimActive(false);
+            //SetRimPos(image_SkillRim.gameObject);
+            //StartCoroutine(ShowRimTip(str));
+        }
+    }
+
+    public void SkillRelease()
+    {
+        StopShowDragPath(true);
+        CloseMask();
+        image_SkillRim.gameObject.SetActive(false);
+        tmpMask.enabled = false;
+        SetRimActive(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()
     {
-        image_SkillRim.gameObject.SetActive(false);
-        tmpMask.enabled = false;
-
         SetGuideUI(true);
-        SetRimActive(false);
+        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);
+    }
+
 
     #region 按钮以及提示
 
@@ -373,11 +577,71 @@
     {
         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 == "FireSkillBtn")
+        {
+            image_Rim_Rect.anchoredPosition = skillBtnPos - tmpOffect;
+        }
+        else
+        {
+            image_Rim_Rect.anchoredPosition = rt.anchoredPosition;
+        }
         image_Rim_Rect.sizeDelta = (rt.sizeDelta * rt.localScale) + rimOffset;
-        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);
+        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);
+            //image_Tip_Rect.anchoredPosition -= tmpOffect;
+        }
+
+    }
+
+    /// <summary>
+    /// 设置边框的大小和位置
+    /// </summary>
+    /// <param name="target"></param>
+    private void SetRimPos(GameObject target, Vector2 offect)
+    {
+        SetRimActive(true);
+        RectTransform rt = target.GetComponent<RectTransform>();
+        if (target.gameObject.name == "TowerBuyBtn")
+        {
+            image_Rim_Rect.anchoredPosition = towerBuyBtnPos - tmpOffect;
+        }
+        else if (target.gameObject.name == "FireSkillBtn")
+        {
+            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)
@@ -406,15 +670,26 @@
     /// 抠出来一个区域
     /// </summary>
     /// <param name="target"></param>
-    void InitRectGuidance(Image target, float x, float y)
+    void InitRectGuidance(Image target, float x, float y, Vector2 offect)
     {
         if (!maskObj.gameObject.activeSelf)
         {
             maskObj.gameObject.SetActive(true);
         }
         //maskObj.Init(target);
-        maskObj.InitForCamera(target, x, y);
-
+        //maskObj.ShowImmediately();
+        if (target.gameObject.name == "TowerBuyBtn")
+        {
+            maskObj.InitForCamera(target, towerBuyBtnPos, x, y);
+        }
+        else if (target.gameObject.name == "FireSkillBtn")
+        {
+            maskObj.InitForCamera(target, skillBtnPos, x, y);
+        }
+        else
+        {
+            maskObj.InitForCamera(target, x, y, offect);
+        }
     }
 
     /// <summary>
@@ -458,5 +733,25 @@
 
     #endregion
 
+    #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
 
 }

--
Gitblit v1.9.1