Ejemplo n.º 1
0
    IEnumerator IE_getEnergy()
    {
        isNone = true;

        Halo.SetActive(true);
        Halo.transform.parent = null;
        Halo.GetComponent <TrailRenderer>().enabled = true;

        //第一段动画
        {
            float   _time0 = 0;
            Vector3 _dir   = Halo.transform.position - CharacterControl.instance.transform.position;
            Vector3 _dir_2 = Vector3.Cross(_dir, Vector3.back);
            _dir.z = 0;
            Vector3 p1, p2;
            p1   = Halo.transform.position + _dir * 0.9f;
            p2   = (CharacterControl.instance.transform.position + Halo.transform.position) / 2.0f + _dir_2 * 0.8f;
            p1.z = 0;
            p2.z = 0;
            while (_time0 < first_animation_duration)
            {
                _time0 += Time.deltaTime;
                float t = _time0 / first_animation_duration;
                Halo.transform.position = GameFunction.BezierLine(Halo.transform.position, CharacterControl.instance.transform.position + Vector3.up * 1, p1, p2, t);

                yield return(null);
            }
        }

        //第二段动画
        {
            Energy.SetActive(false);

            float          _time0            = 0;
            Vector3        originScale_Halo  = Halo.transform.localScale;
            SpriteRenderer SR_BG             = BG.GetComponent <SpriteRenderer>();
            Color          originColor_BG    = SR_BG.color;
            SpriteRenderer SR_Stone          = Stone.GetComponent <SpriteRenderer>();
            Color          originColor_Stone = SR_Stone.color;
            SpriteRenderer SR_Halo           = Halo.GetComponent <SpriteRenderer>();
            while (_time0 < second_animation_duration)
            {
                _time0 += Time.deltaTime;
                float t = _time0 / second_animation_duration;
                Halo.transform.localScale = Vector3.Lerp(originScale_Halo, Vector3.one * 10f, t);
                SR_Halo.color             = Color.Lerp(SR_Halo.color, new Color(1, 1, 1, 0), t);
                SR_BG.color    = Color.Lerp(originColor_BG, Color.black, t);
                SR_Stone.color = Color.Lerp(originColor_Stone, Color.black, t);

                yield return(null);
            }
            SR_BG.sortingOrder = 0;
            Stone.SetActive(false);
            Halo.SetActive(false);
            Particle.SetActive(false);
        }
        Bag.getInstance().AddArmsFragment(1);
    }
Ejemplo n.º 2
0
    IEnumerator IE_openNewGroove(int GrooveID)
    {
        //第一段动画
        {
            for (int i = 0; i < Frags.Length; i++)
            {
                Frags[i].SetActive(true);
            }

            float _time0 = 0;

            Vector3   originScale_FragIcon = Frag_icon.transform.localScale;
            Vector3[] originPos_Frags = new Vector3[Frags.Length];
            Vector3   _dir, _dir_2;
            Vector3   p1;
            Vector3[] p2 = new Vector3[Frags.Length];
            _dir   = Frags[0].transform.position - Gem[GrooveID].transform.position;
            _dir_2 = Vector3.Cross(_dir, Vector3.back);
            p1     = Frags[0].transform.position + _dir * 0.5f;
            for (int i = 0; i < Frags.Length; i++)
            {
                p2[i] = Frags[0].transform.position + _dir_2 * (0.5f - i * 0.1f) * (i % 2 == 0 ? 1 : -1);
                originPos_Frags[i] = Frags[i].transform.position;
            }

            updateArmsFragNum();
            while (_time0 < openGroove_first_animation_duration)
            {
                _time0 += Time.deltaTime;
                float t = _time0 / openGroove_first_animation_duration;
                Frag_icon.transform.localScale = Vector3.Lerp(Vector3.one * 0.5f, originScale_FragIcon, t * 8);
                for (int i = 0; i < Frags.Length; i++)
                {
                    Frags[i].transform.position = GameFunction.BezierLine(originPos_Frags[i], Gem[GrooveID].transform.position, p1, p2[i], t);
                }

                yield return(null);
            }
        }

        for (int i = 1; i < Frags.Length; i++)
        {
            Frags[i].SetActive(false);
            Frags[i].transform.position = Frag_icon.transform.position;
        }

        //第二段动画
        {
            Frags[0].GetComponent <TrailRenderer>().enabled = false;
            Frags[0].transform.GetChild(0).gameObject.SetActive(false);
            float _time0 = 0;

            Image   img_frag         = Frags[0].GetComponent <Image>();
            Color   originColor_frag = img_frag.color;
            Vector3 originScale_Frag = Frags[0].transform.localScale;
            bool    isUpdate         = false;
            while (_time0 < openGroove_second_animation_duration)
            {
                _time0 += Time.deltaTime;
                float t = _time0 / openGroove_second_animation_duration;
                Frags[0].transform.localScale = Vector3.Lerp(originScale_Frag, Vector3.one * 33f, t);
                img_frag.color = Color.Lerp(originColor_frag, originColor_frag * GameFunction.Transparent, t);

                if (!isUpdate && _time0 > 0.3f * openGroove_second_animation_duration)
                {
                    GemGroove[GrooveID].GetComponent <Image>().color = Color.white;  //更新显示
                    GemGroove_Disable[GrooveID].gameObject.SetActive(false);
                    GemGroove_None[GrooveID].gameObject.SetActive(true);
                }

                yield return(null);
            }
            Frags[0].GetComponent <TrailRenderer>().enabled = true;
            Frags[0].transform.localScale = originScale_Frag;
            Frags[0].transform.position   = Frag_icon.transform.position;
            img_frag.color = originColor_frag;
            Frags[0].SetActive(false);
            Frags[0].transform.GetChild(0).gameObject.SetActive(true);
        }
    }