IEnumerator IE_getNewSoul() //获得新灵魂动画 { isAnimation = true; CharacterControl.instance.setInputNone(); yield return(new WaitForSeconds(first_animation_waitTime)); animator.enabled = false; Halo.GetComponent <TrailRenderer>().enabled = true; Particle.SetActive(false); Aperture.SetActive(true); { Vector3 targetPos = Halo.transform.position + new Vector3(0, first_animation_height, 0); Vector3 t_originPos = Halo.transform.position; Vector3 t_vec3 = Vector3.zero; SpriteRenderer t_SR = Aperture.GetComponent <SpriteRenderer>(); float _time0 = 0, _time1 = 0; const float Aperture_duration = 0.4f; while (_time0 < first_animation_duration) //第一段动画 { if (_time1 > 0.2f * Aperture_duration) { _time0 += (Time.deltaTime * ((first_animation_duration * 1.6f - _time0) / first_animation_duration)); } _time1 += Time.deltaTime; t_vec3 = Vector3.Lerp(t_originPos, targetPos, _time0 / first_animation_duration); t_vec3.x = Mathf.Sin(_time0 * 3) * 0.7f + originPos.x; Halo.transform.position = t_vec3; if (_time1 < Aperture_duration * 1.1f) //光圈扩大后开始动画 { float timeScale = _time1 / Aperture_duration; Aperture.transform.localScale = Vector3.Lerp(Vector3.zero, Vector3.one * 20, timeScale); t_SR.color = Color.Lerp(Color.white, new Color(1, 1, 1, 0), timeScale); } yield return(null); } Aperture.SetActive(false); } //第二段动画 { float _time0 = 0; Vector3 t_originPos = Halo.transform.position; Vector3 p1, p2; Vector3 _dir = Halo.transform.position - CharacterControl.instance.transform.position; Vector3 _dir_2 = Vector3.Cross(_dir, Vector3.back); Halo.GetComponent <TrailRenderer>().time *= 0.3f; _dir.z = 0; _dir_2.z = 0; p1 = Halo.transform.position + _dir * 0.8f; p2 = (CharacterControl.instance.transform.position + Halo.transform.position) / 2.0f + _dir_2 * 0.7f; p1.z = 0; p2.z = 0; while (_time0 < second_animation_duration) { _time0 += (Time.deltaTime * (_time0 + 0.4f * second_animation_duration) / second_animation_duration); float t = _time0 / second_animation_duration; Halo.transform.position = BezierLine(t_originPos, CharacterControl.instance.transform.position + Vector3.up, p1, p2, t); yield return(null); } } //第三段动画 { Soul.SetActive(false); float _time0 = 0; SpriteRenderer t_SR = Halo.GetComponent <SpriteRenderer>(); SpriteRenderer bloom_SR = Bloom.GetComponent <SpriteRenderer>(); while (_time0 < third_animation_duration) { _time0 += Time.deltaTime; float t = _time0 / third_animation_duration; Halo.transform.localScale = Vector3.Lerp(Halo.transform.localScale, Vector3.one * 30f, t); t_SR.color = Color.Lerp(t_SR.color, new Color(1, 1, 1, 0), t); bloom_SR.color = Color.Lerp(bloom_SR.color, new Color(1, 1, 1, 0), t); yield return(null); } Halo.SetActive(false); Eye.GetComponent <SpriteRenderer>().color = Color.white * 0.3f; Eye2.GetComponent <SpriteRenderer>().color = Color.white * 0.3f; } CharacterAttribute.GetInstance().add_MaxHP(1); CharacterControl.instance.getInput(); isAnimation = false; this.enabled = false; isNone = true; }