void Start() { foreach (Transform t in GetComponentsInChildren <Transform>()) { switch (t.name) { case "Soul": Soul = t.gameObject; break; case "Halo": Halo = t.gameObject; break; case "Bloom": Bloom = t.gameObject; break; case "Eye": Eye = t.gameObject; break; case "Eye2": Eye2 = t.gameObject; break; case "Particle": Particle = t.gameObject; break; case "Aperture": Aperture = t.gameObject; t.gameObject.SetActive(false); break; default: break; } } animator = GetComponent <Animator>(); originPos = transform.position; if (isNone) { Halo.SetActive(false); Eye.GetComponent <SpriteRenderer>().color = Color.white * 0.3f; Eye2.GetComponent <SpriteRenderer>().color = Color.white * 0.3f; Particle.SetActive(false); this.enabled = false; } }
/// <summary> /// This method is used to draw the eyes of the snake. /// </summary> private void DrawEyes() { Vector A1 = new Vector(_startPoint.X, _startPoint.Y); Vector B1 = new Vector(_endPoint.X, _endPoint.Y); Vector C1 = B1 - A1; C1.Normalize(); Vector P1 = ((_strokeThickness / 3) * C1) + A1; double dx = _endPoint.X - _startPoint.X; double dy = _endPoint.Y - _startPoint.Y; double dist = Math.Sqrt(dx * dx + dy * dy); dx /= dist; dy /= dist; Point line1Start = new Point(), line2Start = new Point(); line1Start.X = P1.X - (_strokeThickness / 2) * dy; line1Start.Y = P1.Y + (_strokeThickness / 2) * dx; line2Start.X = P1.X + (_strokeThickness / 2) * dy; line2Start.Y = P1.Y - (_strokeThickness / 2) * dx; Eye1.SetBinding(Canvas.LeftProperty, "Eye1Left"); Eye1.SetBinding(Canvas.TopProperty, "Eye1Top"); Eye1.SetBinding(Ellipse.HeightProperty, "EyeSize"); Eye1.SetBinding(Ellipse.WidthProperty, "EyeSize"); Eye1.SetBinding(Ellipse.StrokeThicknessProperty, "EyeStrokeThickness"); Eye1.Stroke = Brushes.Yellow; Eye1.Fill = Brushes.Black; Eye1.Visibility = Visibility.Visible; Eye1Left = line1Start.X; Eye1Top = line1Start.Y; Eye2.SetBinding(Canvas.LeftProperty, "Eye2Left"); Eye2.SetBinding(Canvas.TopProperty, "Eye2Top"); Eye2.SetBinding(Ellipse.HeightProperty, "EyeSize"); Eye2.SetBinding(Ellipse.WidthProperty, "EyeSize"); Eye2.SetBinding(Ellipse.StrokeThicknessProperty, "EyeStrokeThickness"); Eye2.Stroke = Brushes.Yellow; Eye2.Fill = Brushes.Black; Eye2.Visibility = Visibility.Visible; Eye2Left = line2Start.X; Eye2Top = line2Start.Y; }
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; }